コミットメッセージのフォーマットをウツクシク保つには


注意:type/scopeはアルファベットのみしか対応していないようです

コミット時のメッセージのフォーマットをそろえておくと、デバッグ/rollback時などに分かりやすいだけではなく、
コミット履歴からchangelogを自動生成するなどの運用も可能になります。

いちいちコミット文のフォーマットを確認するのは面倒くさいですが、
pre-commit hookを使えば、コミットする前に自動でチェックしてくれるようになります。

今回は以下のようなフォーマットで統一することを目指しますが、設定をいじれば編集可能です。

<type>(<scope>): <subject>
test(staging): 〇〇の機能のテストを追加

huskyをインストール

npm install husky --save-dev

こうすると、コミット前に関連したnpm scriptが走るようになります。

validate-commit-msgをインストール

npm install --save-dev validate-commit-msg

インストールした後は、package.jsonで"commitmsg": validate-commit-msgコマンドを追加します。

package.json
{
"scripts": {
    "commitmsg": "validate-commit-msg"
  }
 }

コミットメッセージのフォーマットは、ここで設定できます。
詳しくは公式参照ですが、
typesscopeの単語を変更したり、subjectPatternに入れたい単語を指定することでわりと必要な情報がそろったコミットになると思います。
(ただ、こちらでtypesを日本語にカスタマイズしてみたところ、認識されませんでした・・・)

package.json
{  
  "config": {
    "validate-commit-msg": {
    "types": ["feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"],
    "scope": {
        "required": false,
        "allowed": ["*"],
        "validate": false,
        "multiple": false
     },
    "warnOnFail": false,
    "maxSubjectLength": 100,
    "subjectPattern": ".+",
    "subjectPatternErrorMsg": "subject does not match subject pattern!",
    "helpMessage": "",
    "autoFix": false
    }
  }
 }

ちなみに

huskyの機能を使えば、precommit以外でもprepushなどのタイミングでnpm scriptを実行することができます。

package.json
{
  "scripts": {
    "precommit": "npm test",
    "prepush": "npm test",
    "...": "..."
  }
}

git-hookとの対応表はこちら。
https://github.com/typicode/husky/blob/master/HOOKS.md