コミットメッセージは、「1行目に変更の要約」「2行目は空行」「3行目以降に、なぜ変更したか」を書くのが基本です。1行目の先頭に feat:(機能追加)や fix:(バグ修正)といったプレフィックスを付けて、変更の種類をひと目でわかるようにする書き方も広く使われています。

コミットメッセージは、半年後の自分やチームのメンバーが「なぜこのコードはこうなっているのか」を知るための記録です。この記事では、基本の形とルール、プレフィックスの一覧と使い分け、日本語での例文、チームで統一する仕組み、書き間違えたときの直し方までを解説します。

コミットメッセージの基本の形

fix: ログイン後に元のページへ戻らない問題を修正

ログイン画面へ遷移する際に、遷移元のURLを保持していなかったため、
ログイン後は常にトップページに戻っていた。
クエリパラメータ redirect_to に遷移元を保持し、ログイン後に戻すようにした。

Closes #123
部分 書くこと ポイント
1行目(件名) 何をしたかの要約 短く、具体的に。末尾に句点を付けない
2行目 空行 件名と本文を区切る。多くのツールがこの空行で件名を判定する
3行目以降(本文) なぜ変更したか、どう変えたか 件名だけで伝わる小さな変更なら省略してよい
最後(フッター) 関連するIssue、破壊的変更、共同作業者 決まった書式で書くと、ツールが読み取れる

本文には「何を変えたか」より「なぜ変えたか」を書くのがポイントです。何を変えたかは差分(diff)を見ればわかりますが、なぜそうしたのかは、コードからは読み取れないからです。

よいコミットメッセージの7つのルール

英語圏で広く知られている「7つのルール」を、日本語で書く場合の目安とあわせて整理します。

ルール 英語の場合 日本語の場合の目安
1. 件名と本文を空行で分ける 同じ 同じ
2. 件名は短くする 50文字程度 全角25〜35文字程度
3. 件名の先頭は大文字にする Fix login bug ―(日本語では不要)
4. 件名の末尾にピリオドを付けない 同じ 句点「。」を付けない
5. 件名は命令形で書く Add, Fix(Added, Fixedではなく) 「〜を追加」「〜を修正」の体言止め
6. 本文は72文字で折り返す 同じ 全角36文字程度で改行すると読みやすい
7. 本文には「何を・なぜ」を書く 同じ 同じ

件名を短くするのは、git log --oneline やGitHubの画面で、1行目だけが一覧表示されるからです。長すぎる件名は途中で切れて表示されます。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「コミットメッセージの書き方|ルール・例文・プレフィックス一覧」

プレフィックス一覧(Conventional Commits)

1行目の先頭に変更の種類を付ける書き方は、Conventional Commitsという仕様として整理されています。

<種類>(<範囲>): <要約>
プレフィックス 意味 例
feat 新しい機能の追加 feat: 注文履歴のCSV出力を追加
fix バグの修正 fix: 月末日の締め処理で1日ずれる問題を修正
docs ドキュメントのみの変更 docs: READMEにセットアップ手順を追記
style 動作に影響しない書式の変更(空白・インデントなど) style: インデントをスペース2つに統一
refactor 機能も修正も伴わない、コードの整理 refactor: 料金計算を別クラスに分離
perf 性能の改善 perf: 注文一覧のN+1問題を解消
test テストの追加・修正 test: 会員登録のバリデーションのテストを追加
build ビルドや依存関係の変更 build: Spring Bootを3.5に更新
ci CIの設定の変更 ci: プルリクエストで単体テストを実行
chore その他の雑務(上記に当てはまらないもの) chore: .gitignoreにログディレクトリを追加
revert 以前のコミットの取り消し revert: 注文履歴のCSV出力を追加

迷いやすい使い分け

  • style と refactor — 見た目だけの変更(空白・改行・フォーマッターの適用)はstyle、変数名の変更やメソッドの分割など、コードの構造に手を入れるものはrefactor
  • fix と refactor — 利用者から見た動作が変わる(誤りが直る)ならfix、変わらないならrefactor
  • feat と perf — できることが増えるならfeat、同じことが速くなるだけならperf
  • build と chore — 依存ライブラリやビルドの設定はbuild、それ以外の雑務はchore

1つのコミットに複数の種類が混ざって迷うときは、コミットを分けるサインです。「機能追加」と「ついでのリファクタリング」は、別のコミットにしておくと、レビューも取り消しもしやすくなります。

範囲(スコープ)

変更した機能やモジュールを、括弧で付け加えることもできます。

feat(auth): パスワードリセットのメール送信を追加
fix(order): 在庫0の商品が注文できる問題を修正

範囲の名前は、チームで一覧を決めておくと揃います。

破壊的変更の書き方

既存の利用者に影響がある変更(APIの仕様変更、設定項目の削除など)は、種類の後ろに ! を付けるか、フッターに BREAKING CHANGE: を書きます。

feat(api)!: 注文APIのレスポンスから旧項目 total_price を削除

BREAKING CHANGE: total_price は廃止しました。amount を使用してください。

Conventional Commitsの形式で書いておくと、semantic-releaseやrelease-pleaseなどのツールで、変更履歴(CHANGELOG)の作成やバージョン番号の決定を自動化できます。feat はマイナーバージョン、fix はパッチバージョン、破壊的変更はメジャーバージョンを上げる、という対応です。

日本語の例文:よい例と、改善したい例

改善したい例 よい例 ポイント
修正 fix: 検索結果が0件のときに500エラーになる問題を修正 何を直したかがわかる
バグ対応 fix: 郵便番号にハイフンがあると保存できない問題を修正 どのバグかがわかる
いろいろ修正 (コミットを分ける) 1コミット1目的
レビュー指摘対応 refactor: 料金計算の条件分岐を早期リターンに整理 指摘された内容そのものを書く
update docs: APIの認証方式の説明を追記 何を更新したかを書く
テスト test: 会員登録で重複メールアドレスを拒否するテストを追加 何を検証するテストかを書く
WIP (作業途中はpushせず、後でまとめる) 後述のfixupを使う

「レビュー指摘対応」「修正」のような、後から読んで何もわからない件名は、最もよく見かける改善ポイントです。「半年後に git log だけを見て、何をしたか思い出せるか」を基準にすると判断しやすくなります。

本文に書くとよいこと

  • 変更の理由:なぜこの変更が必要だったか(不具合の原因、仕様の変更など)
  • 検討した別の方法:なぜ他の方法を選ばなかったか
  • 影響範囲:他の機能への影響、移行作業の必要性
  • 注意点:一時的な対応である、後で見直す必要がある、など

フッターの便利な書き方

Issueの自動クローズ

GitHubでは、コミットメッセージやプルリクエストに次のキーワードとIssue番号を書くと、デフォルトブランチにマージされたときに、Issueが自動でクローズされます。

Closes #123
Fixes #456
Resolves #789

クローズせず関連を示すだけなら、Refs #123 や #123 のように書きます。

共同作業者の記録

ペアプログラミングなどで一緒に作業した人を、次の形式で記録できます。GitHubでは、共同作業者としてコミットに表示されます。

Co-authored-by: 山田太郎 <yamada@example.com>

チームで統一する仕組み

ルールを決めても、人の注意だけで守り続けるのは大変です。仕組みで揃えるのが確実です。

コミットテンプレート

git config --global commit.template ~/.gitmessage
# ~/.gitmessage の例(#で始まる行はコミットメッセージに含まれない)
# <種類>(<範囲>): <要約>  ← 全角35文字以内
# 種類: feat fix docs style refactor perf test build ci chore revert
#
# なぜ変更したか:
#
# Closes #

git commit を実行すると、エディタにこのテンプレートが表示され、書き方を毎回確認できます。

commitlintで自動チェック

commitlintは、コミットメッセージがルールに沿っているかを検査するツールです。Gitのフック(huskyなどで設定)に組み込むと、ルールに合わないコミットをその場で止められます。CIで、プルリクエストのコミットをまとめて検査することもできます。

スカッシュマージの場合

プルリクエストを「Squash and merge」で取り込む運用では、プルリクエストのタイトルが、main ブランチのコミットメッセージになります。この場合は、個々のコミットよりも、プルリクエストのタイトルにルールを適用するのが効果的です。

書き間違えたときの直し方

直前のコミットメッセージを直す

git commit --amend

過去のコミットに修正をまとめる(fixup)

git commit --fixup=<直したいコミットのID>
git rebase -i --autosquash main

「レビュー指摘対応」のような小さな修正コミットを、元のコミットに統合できます。作業途中のコミットを整理してからプルリクエストを出すと、履歴が読みやすくなります。

注意:--amend や rebase は履歴を書き換えます。すでにpushして、他の人も使っているブランチでは行わないのが原則です。自分だけの作業ブランチで、pushする前に整えましょう。

AIにコミットメッセージを書かせるときのコツ

エディタやAIのコーディング支援で、差分からコミットメッセージを自動生成できるようになりました。便利ですが、次の点に注意すると質が上がります。

  • AIは差分から「何を変えたか」は書けるが、「なぜ変えたか」はわからない。理由は自分で1行加える
  • プロジェクトのルール(プレフィックス、日本語か英語か、文字数)を指示に含める。リポジトリのルールファイルに書いておくと、毎回指示しなくて済む
  • 1つのコミットに複数の目的が混ざっていると、要約がぼやける。AIの要約が長くなるときは、コミットを分けるサイン

よくある質問

Q. コミットメッセージは日本語と英語のどちらで書くべきですか? A. チームで統一されていればどちらでも構いません。海外のメンバーがいる、OSSとして公開する場合は英語、国内のチームで細かなニュアンスを残したい場合は日本語、という選び方が一般的です。プレフィックス(feat・fixなど)だけ英語にし、要約は日本語で書く形もよく使われます。

Q. コミットはどのくらいの単位で分けるべきですか? A. 「1つのコミットで1つの目的」が目安です。取り消したいときに、そのコミットだけを取り消せる単位にしておくと扱いやすくなります。

Q. 絵文字のプレフィックス(gitmoji)は使ってもいいですか? A. チームで合意していれば使えます。視覚的にわかりやすい一方、ツールでの自動処理や検索のしやすさでは、文字のプレフィックスの方が扱いやすい場合があります。

Q. プレフィックスに当てはまらない変更はどうすればいいですか? A. chore を使うのが一般的です。ただし、chore が多すぎる場合は、チームの実態に合った種類を追加するか、コミットの分け方を見直すきっかけにします。

まとめ

  • 1行目に要約、2行目は空行、3行目以降に理由が基本の形
  • 本文には「何を」より「なぜ」を書く。何を変えたかは差分でわかる
  • 件名は短く(日本語なら全角35文字程度まで)、句点を付けない
  • プレフィックスは feat・fix・docs・style・refactor・perf・test・build・ci・chore・revert。迷ったらコミットを分ける
  • 破壊的変更は ! か BREAKING CHANGE:。形式を揃えると変更履歴を自動生成できる
  • テンプレート・commitlintで仕組みとして揃え、スカッシュマージならPRのタイトルを整える
  • 直すなら --amend・--fixup。ただしpush済みの共有ブランチでは行わない

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「コミットメッセージの書き方|ルール・例文・プレフィックス一覧」

株式会社RJCでは、コミットメッセージのような日々の小さな習慣も、チームで気持ちよく開発するための大切な技術だと考えています。こうした知識を仲間と共有しながら、一緒に成長を楽しんでいます。

株式会社RJC ― SI事業・SES事業・AI駆動開発。未経験からエンジニアに育てるのが得意な会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?