Commitizenを使ってgitのコミットメッセージをしっかり書こう
はじめに
gitのコミットメッセージを記述するとき、内容について悩むことが度々あります。
簡潔に要点をまとめて書きたいけどいちいち記述が面倒だったり、チームで書き方がバラバラだったり・・・
そして結局「fix bug」のひとことだけメッセージを記述するだけになったりします。
この記事ではそんなコミットメッセージを少しでも簡単に有用にするためのツールを紹介します。
Commitizen?
コミットメッセージを簡単・簡潔に記述したいときに使えるのがCommitizenです。
Commitizenはインタラクティブにコミットメッセージを作成できるツールで、
- このコミットのタイプ
- スコープ
- コミットのサマリー
- コミットの詳細
などについて対話的に記述していくことで、適切なコミットメッセージを作成できます。
? Select the type of change that you're committing: feat: A new feature ? What is the scope of this change (e.g. component or file name): (press enter to skip) hello.txt ? Write a short, imperative tense description of the change (max 83 chars): (6) サンプルテキストファイル新規追加 ・ ・ ・
環境
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.14.5
- node.js : v12.8.0
- npm : v6.10.3
インストール
Commitizenはnpmを使って簡単にインストールできます。
% npm install -g commitizen
そして、git commitのかわりに git czとすれば
Commitizenでコミットメッセージを作成できます。
また、npm5.2以降を使用している場合、グローバルインストールしなくても ↓のようにnpxで実行可能です。
% npx git-cz
つかってみる
ではCommitizenをつかってみます。
適当なgitリポジトリでコミットしてみます。
%touch hello.txt %git add hello.txt %git cz cz-cli@4.0.3, cz-conventional-changelog@3.0.1 ? Select the type of change that you're committing: (Use arrow keys) ❯ feat: A new feature fix: A bug fix improvement: An improvement to a current feature docs: Documentation only changes style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) refactor: A code change that neither fixes a bug nor adds a feature perf: A code change that improves performance
git czコマンドで、コミットの種類や内容を記述する対話式インターフェイスが起動しました。
入力していくと、↓のようなメッセージが作成されます。
(#123はissueの番号)
commit xxxxx (HEAD -> master) Author: nakamura shuta Date: Fri Nov 22 11:01:59 2019 +0900 feat(hello.txt): ファイル追加 hello.txtファイルを新規に追加 #123
日本語化する
このままつかってもよいですが、日本語のほうがわかりやすいこともあります。
その場合、cz-conventional-changelog-ja というモジュールを設定すれば、
インターフェイスが日本語になります。
npm install -g cz-conventional-changelog-ja
~/.czrcファイル(なければ作成)に、下記内容を記述します。
{ "path": "cz-conventional-changelog-ja" }
git czコマンドを実行すると、日本語化されています。
%git cz cz-cli@4.0.3, cz-conventional-changelog-ja@0.0.2 1行目は100文字で切り取られ、超過分は次行以降に記載されます。 ? コミットする変更タイプを選択: (Use arrow keys) ❯ feat: 新機能 fix: バグ修正 docs: ドキュメントのみの変更 style: フォーマットの変更(コードの動作に影響しないスペース、フォーマット、セミコロンなど) refactor: リファクタリングのための変更(機能追加やバグ修正を含まない) perf: パフォーマンスの改善のための変更 test: 不足テストの追加や既存テストの修正
tigでCommitizenを使う
私は普段tigをgitクライアントとして使っているのですが、
tigを使ったコミット時にもCommitizenを使えます。
その場合、~/.tigrcにCommitizenのコマンドをバインドするだけです。
~/.tigrcファイル(なければ作成)に、下記内容を記述。
bind status C !git cz
これでtigからのコミットでもCommitizenのインターフェイスでメッセージを作成できます。