AI活用

AIでコミットメッセージを作る方法|git diffから変更意図を要約する

git diffからAIでコミットメッセージを作る手順を、差分整理、Conventional Commits、誤要約の確認、安全な半自動化まで解説します。

この記事の目次
  1. 結論:差分だけでなく変更意図を一文添える
  2. コミットメッセージに必要な情報
  3. 1.commit予定の差分を安全に確認する
  4. 2.Conventional Commits形式を指定する
  5. 3.候補を3つ作るプロンプト
  6. よい例・悪い例10組
  7. 4.生成結果をdiffと照合する
  8. 生成とcommitを分離して半自動化する
  9. よくある質問
  10. 変更理由がdiffにない場合はどうしますか?
  11. 日本語メッセージでもよいですか?
  12. AIへcommitまで任せるべきですか?
  13. まとめ

AIでコミットメッセージを作るなら、commit予定の差分、変更理由、チームの書式を渡し、複数候補を生成します。AIが差分にない変更を付け足していないか確認してから採用します。

この記事では、git diff --cachedを使った差分確認、Conventional Commits形式のプロンプト、よい例・悪い例、安全な半自動化を解説します。

情報確認日:2026年7月18日(日本時間)

結論:差分だけでなく変更意図を一文添える

  1. 無関係な変更を別commitへ分ける
  2. staged差分に秘密や生成物がないか確認する
  3. 変更理由と書式をAIへ渡す
  4. 2〜3候補を作り、diffと照合する
  5. 人が選択・編集し、commit操作は分ける
スポンサーリンク

コミットメッセージに必要な情報

差分から「何を変えたか」は分かっても、「なぜ変えたか」は分からないことがあります。次の4点を揃えます。

  • 変更内容:stagedされた差分
  • 変更理由:障害、要件、保守性など
  • 影響範囲:機能、module、利用者
  • 書式:言語、type、scope、件名の長さ

1.commit予定の差分を安全に確認する

git status --short
git diff --cached --stat
git diff --cached

git diff --cachedはindexとHEADを比較し、次のcommitに含まれる内容を確認するために使えます。まだstageしていない変更だけを見るgit diffと区別してください。

送信前確認:diffにAPI key、token、個人情報、顧客データ、非公開URLがないか確認します。外部AIを使えるかは組織のルールに従い、許可されないコードは送信しません。

依存更新とUI修正のように目的が違う変更が混ざっている場合は、先にcommit単位を分けます。巨大なdiffを短文へ押し込むより、1つの目的へ揃える方が正確な履歴になります。

2.Conventional Commits形式を指定する

チームがConventional Commitsを採用している場合、基本形は次のとおりです。

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]
要素 役割
type featfix 変更の種類
scope authcheckout 影響範囲
description reject expired refresh tokens 短い要約
body 理由や以前との違い 件名で足りない背景
footer BREAKING CHANGE: 破壊的変更やissue参照

この形式はGitの必須機能ではありません。チーム独自のprefixや日本語書式があるなら、既存履歴を優先します。

3.候補を3つ作るプロンプト

次のstaged diffからコミットメッセージ候補を3つ作ってください。

変更理由:
期限切れrefresh tokenが再利用される不具合を防ぐため。

書式:
- Conventional Commits 1.0.0
- 英語
- typeとscopeを含める
- subjectは命令形で簡潔に
- diffにない変更は書かない
- breaking changeとissue番号は、根拠がある場合だけ書く

各候補の後に、選んだtypeとscopeの理由を1行で説明してください。

staged diff:
{{diff}}

候補を1つだけ求めるより、typeやscopeの違いを比較できます。最終メッセージへ理由説明は含めず、レビュー用の補助として使います。

よい例・悪い例10組

悪い例 改善例
update fix(auth): reject expired refresh tokens
bug fix fix(cart): preserve quantity after price refresh
CSS修正 fix(header): prevent mobile menu overflow
refactor refactor(invoice): extract tax calculation
test追加 test(shipping): cover free-delivery boundary
docs docs(setup): add local database restore steps
package update chore(deps): update eslint to approved version
API変更 feat(profile): add avatar removal endpoint
高速化 perf(search): cache category counts
いろいろ修正 目的別にcommitを分割して個別に命名

改善例は書式の見本です。実際のdiffに書かれていない動作、性能効果、原因を推測して使わないでください。

4.生成結果をdiffと照合する

  • typeは実際の変更種類と合うか
  • scopeは変更ファイルの責務と合うか
  • 件名が「何をしたか」を具体的に表すか
  • 変更していない機能を含めていないか
  • 理由を結果として誇張していないか
  • 破壊的変更やissue番号を創作していないか
  • 既存履歴の言語・時制・長さと合うか

特に「高速化した」「安全にした」は、計測や仕様の根拠がないと断定できません。diffが実装した事実だけを要約します。

生成とcommitを分離して半自動化する

安全な流れ
1. staged diffを取得
2. 許可されたAIへ要約依頼
3. 候補をterminalへ表示
4. 人が選択・編集
5. git diff --cachedを再確認
6. 人がcommitを実行

避ける流れ
AIが差分取得 → メッセージ生成 → commit → pushまで無確認で実行

メッセージ生成と状態変更を分けると、誤った差分や文面を止められます。AIツールへ与える権限と安全な入力はAIを安全に使う方法も参照してください。

よくある質問

変更理由がdiffにない場合はどうしますか?

issue、要件、作業者の説明から一文を追加します。分からない場合はAIに推測させず、変更内容だけを表すか担当者へ確認します。

日本語メッセージでもよいですか?

問題ありません。チームの既存履歴と規約を優先します。プロジェクト固有指示の整理はCLAUDE.mdの書き方も参考になります。

AIへcommitまで任せるべきですか?

メッセージ候補作成とcommitは分ける方が安全です。少なくともstaged diffと最終文面を人が確認してから状態を変更します。

まとめ

AIでコミットメッセージを作るときは、git diff --cached、変更理由、チーム書式を渡し、複数候補を比較します。差分にない内容、破壊的変更、issue番号をAIが補っていないか確認してください。

まずcommitの目的を1つへ揃えることが、よい要約への近道です。AIコーディング環境の比較はAIコーディングツール比較を参照してください。

スポンサーリンク