コミットメッセージを揃えるだけでチーム開発が楽になる話(Conventional Commits)

チームのGitの履歴を見返したとき、こんな状態になっていませんか?

  • 「修正」「update」「fix」だけのコミットがずらっと並んでいる
  • どのコミットで機能が追加されたのか、履歴から追いかけられない
  • リリースノートを書くたびに、変更内容を一つずつ思い出している

コミットメッセージは、未来の自分とチームメンバーへの「申し送り」です。

今回は、コミットメッセージの書き方を揃えるためのルール「Conventional Commits」を紹介します。


履歴が読めないと何が困るのか

コミットメッセージがバラバラだと、困るのは「あとから調べるとき」です。

  • 不具合の原因になった変更を探したいとき
  • 「この機能はいつ入ったんだっけ?」と確認したいとき
  • リリースのたびに、変更点をまとめたいとき

どれも、メッセージを読んだだけで変更の種類がわかれば、すぐに終わる作業です。


Conventional Commitsの基本形

Conventional Commitsでは、コミットメッセージを次の形で書きます。

  • 1
  • 2
  • 3
  • 4
  • 5
<type>(<scope>): <description>

[本文(任意)]

[フッター(任意)]

type には、変更の種類を書きます。よく使われるのは次のとおりです。

  • feat:新しい機能の追加
  • fix:バグの修正
  • docs:ドキュメントだけの変更
  • refactor:機能を変えないコードの整理
  • test:テストの追加や修正
  • chore:ビルド設定や依存関係の更新など、その他の作業

scope は省略できます。変更した範囲(画面名や機能名など)を書いておくと、さらにわかりやすくなります。


実際の例

  • 1
  • 2
  • 3
  • 4
feat(login): パスワード再設定メールの送信機能を追加
fix(cart): 数量が0のときに合計金額がマイナスになる不具合を修正
docs: READMEにセットアップ手順を追記
chore: 依存パッケージを更新

description は日本語でもかまいません。大切なのは、先頭の type を揃えることです。

ちなみに、このブログのリポジトリでも feat:、fix:、chore: などの形でコミットしています。

また、互換性がなくなる大きな変更(破壊的変更)は、type の後ろに ! を付けるか、フッターに BREAKING CHANGE: と書いて示します。

  • 1
  • 2
  • 3
feat!: APIのレスポンス形式を変更

BREAKING CHANGE: user_name を name に変更しました

このルールに沿って書いておくと、履歴からリリースノートを自動生成するツールも使えるようになります。


ルールを守る仕組みを作る

「ルールを決めたけど、だんだん守られなくなる」というのはよくある話です。

そこで、commitlint というツールを使うと、コミットのタイミングでメッセージの形式をチェックできます。

Node.jsのプロジェクトであれば、次のように導入できます。

  • 1
  • 2
  • 3
  • 4
npm install --save-dev @commitlint/cli @commitlint/config-conventional husky
echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.mjs
npx husky init
echo "npx --no -- commitlint --edit \$1" > .husky/commit-msg

これで、形式に合わないメッセージでコミットしようとすると、エラーで止めてくれるようになります。

なお、npx husky init を実行すると npm test を実行する .husky/pre-commit も作成されます。不要な場合は削除しておきましょう。

また、CursorなどのAIエディタには、変更内容からコミットメッセージを提案してくれる機能があります。

Rulesなどで「Conventional Commitsの形式で書く」と伝えておけば、形式の揃ったメッセージを提案してもらいやすくなります。


まとめ

今回は、コミットメッセージを揃えるためのルール「Conventional Commits」を紹介しました。

  • 先頭に feat や fix などの type を付ける
  • 破壊的変更は ! や BREAKING CHANGE: で示す
  • commitlintで、ルールを守る仕組みを作る

チームのGitを快適にするには、.gitignore の整備もおすすめです。

チームのGitが毎日荒れる意外な原因、実は「.gitignore」にあった?

まずは次のコミットから、type を付けるところから始めてみてくださいね。


メンバーのSNSアカウントはこちら

◆かいと:IT担当
X(旧Twitter)
Instagram