なぜこう書くのか
コミットメッセージのプロンプトで規則を言葉だけで説明すると、毎回微妙に異なるフォーマットで出力されてしまいます。昨日は "fix: ~" だったのに今日は "[Fix] ~" になったり、ある日はタイトルだけ、別の日は箇条書きが5行続いたりします。リポジトリの履歴は、形式が崩れた瞬間に一覧性が損なわれます。
そこで、2番目の段落に規則の説明と合わせて実際のメッセージ**例(Few-shot)**を2行入れています。人間と同じくAIも、「50文字以内、命令形」という説明より、完成した例文を1つ見たほうがはるかに正確に倣います。例を2つ用意しているのは、1つだけだとその文章のトピック(ドメイン)まで真似してしまうからです。
課題で3パターン要求しつつ「視点が異なること」と釘を刺しているのは、単に3つ求めると語尾だけを変えた3行が返ってくるためです。形式の「なぜ変更したのか」は本文の存在意義そのものです。何を変更したのかはdiffを見ればわかるため、履歴に残すべきはその判断理由です。
最初の段落の「数ヶ月後にこの行がなぜ変わったのかを調べる人が読む」という一文も軽視できません。読み手を指定することで、文章の長さや語彙レベルが定まります。この一文がないと、今日の自分にしか伝わらない略語やタスク番号がタイトルに入ってしまいます。
制約の「イシュー番号を捏造しないでください」は、実際によく起こるトラブルを防ぐためのものです。コミットメッセージの自動生成に任せると、存在しない架空の番号をもっともらしく付けてしまうことがあります。変更内容を """ で囲むのは、diff内のコメントや文字列がプロンプトの指示として誤認されるのを防ぐためです。
用語が分からなければAha AIで: few-shot, output-format
悪い例との比較
コミットメッセージ書いて
(diffを貼り付け)
「Update cart.js」のような1行が出力されるか、逆に変更された行をそのまま転記しただけの箇条書きが出てきます。チームの規則がわからないためプレフィックスも言語も毎回バラバラになり、なぜ変更したのかがどこにも残らないため、数ヶ月後にこのコミットを開いた人が再びコードを読み解く羽目になります。
バリエーション
1つのコミットに複数の作業が混ざっている場合
以下の変更内容に複数の異なる作業が混ざっていないか、まず判断してください。混ざっている場合は、どのようにコミットを分割すべきか「コミット順序・含める変更・タイトル」として整理してください。分割する必要がない場合は、そのまま1つのコミットとして進めるよう教えてください。規則は{{メッセージ規則}}に従ってください。
""" {{変更内容}} """
作業をまとめて行ってしまい、コミットを綺麗に分割したいときに使います。分割の判断から任せることで、レビューしやすい粒度が得られます。
英語のコミットメッセージが必要な場合
以下の変更内容をもとに、英語のコミットメッセージを2パターン作成してください。タイトルは命令形の現在形・50文字以内、本文は1行あたり72文字以内で改行してください。規則は{{メッセージ規則}}に従いつつ、文章は英語で記述してください。難解な表現は避け、一般的によく使われる平易な単語を選んでください。
""" {{変更内容}} """
オープンソースや英語を使用するリポジトリにプッシュする際に使います。改行幅まで指定することで、ターミナル上での表示崩れを防ぎます。
モデル別の注意
diffが長い場合はファイルごとに分けて入力し、最後に「上記の内容を1つのコミットメッセージにまとめて」と依頼してください。
diffをそのまま貼り付けると記号が多く含まれるため、変更の意図を逆方向に解釈してしまうことがあります。冒頭に「今回の変更の要点は〜」と1行添えると精度が向上します。
関連プロンプト
最終更新 2026-09-02 · 誤りがありますか? 知らせる