Commitizenを使ってgitのコミットメッセージをしっかり書こう

2019.11.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

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
  • : v2.22.0

インストール

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のインターフェイスでメッセージを作成できます。

参考

github
試行錯誤顛末記録
cz-conventional-changelog-ja