Gitコミットメッセージを自動化する方法
(insight.infograb.net)*git のコミットメッセージを書いていて困るとき
- 絵文字を使い、イシュー番号も入れたコミットメッセージは追跡しやすく、見た目もよい
- しかし、コミットメッセージが長く複雑になるほど毎回面倒で、ミスも増えがち
- 毎回適切な絵文字を探すのは苦行
*Git Hooks で git のコミットメッセージを強制する
- Git Hooks は Git 関連のイベントが発生したときに、こちらで定めたスクリプトを実行する機能
- この機能はサーバーフックとクライアントフックに分かれる
*サーバーフック: Git の push rule 機能を使う
- pre-receive フックにコミットメッセージを検査するスクリプトを入れると、サーバーにプッシュされないようにできる
- GitLab では push rule 機能を使って、正規表現でコミットメッセージを検査できる
- 正規表現に違反するコミットメッセージを検知すると、そのプッシュを拒否してエラーにする
*クライアントフック: プッシュ前に事前チェックする
- コミットを最終確定する前段階の commit-msg フックにスクリプトを作成し、コミットメッセージを検査できる
- コミットメッセージを修正したいなら、prepare-commit-msg フックに関連スクリプトを書く
*Infograb のコミットメッセージ自動化の方法
- Husky と Commitlint を使って、コミットメッセージ自動化の仕組みを作った
- Husky は Git Hooks の管理を助ける npm モジュール。.husky ディレクトリ配下にスクリプトを含むフックファイルを作る。その後、
npx husky installコマンドを入力すると、そのスクリプトが git に登録される - commitlint はコミット規約を簡単に管理し、コミットメッセージを検査するツール。チームで定めたコミット規約を JSON 形式で記述し、その後
commitlintコマンドでメッセージを検査する
1)コミット規約を commitlint 形式で定義
- コミットメッセージの基本フォーマットをもとに、
commitlint.config.tsファイルに各チームに合った属性を定義
2)Husky に commitlint を登録
- commit-msg フックに
commitlintコマンドを登録。.husky/commit-msg ファイルにスクリプトを入れる
3)自動化を追加
- 絵文字を付けたり、イシュー番号を挿入したりする作業を自動化
- Infograb プロダクトチームでは、タイプ(feat, fix)だけ入力すれば絵文字を自動追加し、タイプの先頭文字だけ大文字に自動修正し、ブランチにイシュー番号があれば footer にイシュー番号を自動で付けるよう設定している
- 自動化スクリプトは prepare-commit-msg フックに入れられる
2件のコメント
commitizenと一緒に使っても良いです
良いツールをありがとうございます