はじめに:いつも手癖でコミットメッセージを書いてませんか?
gitのコミットメッセージはできるだけ、具体的な内容を書くべきです。
(何をどう変えたのか、どういう理由で変更したのか、等)
しかし、初心者の人は「レビュー修正」や「指摘対応」のように、ただの作業名をコミットメッセージに書く人が多いです。
これだと、あとからコミット履歴を見直したときに、何をどう変更したのかわかりません。
しかも、
🙋♂️「修正しました!」
🧔🏻♂️「コメントしました」
🙋♂️「修正しました!」
🧔🏻♂️「コメントしました」
🙋♂️「修正しました!」
🧔🏻♂️「コメントしました」
というように、レビューコメントとレビュー修正のラリーが続くと、コミット履歴が「レビュー修正」の嵐になります。
こうなってしまうと、あとからコミット履歴を見ても何がどう変わったのか、さっぱりわかりません🤷♂️
そして、ベテランプログラマからはきっと、
🧔🏻♂️「"レビュー修正"ではなく、もっと具体的な変更内容を書いてください」
と、チクリと注意されるはずです。
努力でダメなら仕組みで改善する!!
これですぐに直る人はいいのですが、中には完全に手癖になってしまっているために、その後もつい「レビュー修正」と書き続けてしまう人もいるかもしれません。
人間の努力だけでは改善できない場合は、仕組み で改善しましょう!
というわけで、この記事では「レビュー修正」のような手癖を矯正するgitフック(Git Hooks)の作り方を紹介します。
動作環境
このスクリプトは以下の環境で動作確認しています。
- macOS 15.7.2
- zsh
- git 2.44.0
手癖矯正gitフックの作り方
gitフックは特定のリポジトリのみに適用する方法と、グローバル(マシン全体)に適用する方法があります。
ですが、おそらくどのプロジェクトでも同じように矯正した方がいいと思うので、今回はグローバルに適用する方法を紹介します。
gitフック用のスクリプトファイルを用意する
まず、既存のgitフックがないか確認してください。
ls ~/git-hooks/hooks/commit-msg
もしすでに存在している場合は、この後で紹介するコードを既存のスクリプトにいい感じに書き足してください。
既存のgitフックがなければ、ファイルを作成して実行権限を付けます。
touch ~/git-hooks/hooks/commit-msg
chmod +x ~/git-hooks/hooks/commit-msg
スクリプトを書く
viやVSCodeなど、好きなテキストエディタで~/git-hooks/hooks/commit-msgを開き、以下のスクリプトを保存してください。
#!/bin/sh
# 禁止したいコミットメッセージ(自分の手癖をここに書く)
NG_MSG="レビュー修正"
# コミットメッセージファイルのパスを取得
COMMIT_MSG_FILE="$1"
# コミットメッセージの1行目を取得し、空白を除去
MSG=$(head -n1 "$COMMIT_MSG_FILE" | tr -d '[:space:]')
# 禁止されているメッセージだけならエラーで終了
if [ "$MSG" = "$NG_MSG" ]; then
echo "Error: コミットメッセージが「${NG_MSG}」だけです。具体的に書いてください。" >&2
exit 1
fi
# 問題なければそのままコミット継続
exit 0
動作確認する
動作確認してみましょう。
「レビュー修正」とだけコミットメッセージに書いてコミットしようとすると、エラーになってコミットが中断されるはずです。
git commit -m "レビュー修正"
Error: コミットメッセージが「レビュー修正」だけです。具体的に書いてください。
もちろん、具体的な内容を書けば、ちゃんとコミットできます。
git commit -m "バリデーションエラーが発生する場合のテストを追加"
参考:AIにコミットメッセージを考えてもらう
最近は生成AIがコミットメッセージの作成をサポートしてくれたりもするので、自分でメッセージを考えるのが苦手な人はこういった機能を活用するのも良いと思います。
(ただし、生成されたメッセージが正しいかどうかは人間がチェックしましょうね!!)
まとめ
というわけで、この記事ではgitフックを使って、具体性のない手癖コミットメッセージを矯正する方法を紹介してみました。
つい「レビュー修正」や「指摘対応」のようなコミットメッセージばかりを打ち込んでしまいがちな人は、ぜひこのgitフックを導入してみてください。
あわせて読みたい
良いコミット・悪いコミットについて知りたい、という人はこちらの記事を読んでみてください。
いいコミットメッセージが思いつかないのは、コミットの粒度に問題があるせいかもしれません。
適切なコミット粒度について知りたい方はこちらの記事をどうぞ。


