Dev Study
← 解説「コミットメッセージ — 「なぜ」が伝わる書き方」に戻る

サンプルコードで身につける: コミットメッセージ — 「なぜ」が伝わる書き方

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1悪いメッセージと良いメッセージ

「修正」だけのメッセージは、1週間後の自分にもレビュアーにも何も伝えません。何をなぜ変えたかが1行で分かるように書くと、履歴がそのままプロジェクトの記録になります。

# ── 悪い例: 差分を開かないと何も分からない ──
git commit -m "修正"
git commit -m "いろいろ更新"
git commit -m "wip"

# ── 良い例: 1行で変更の内容と種類が分かる ──
git commit -m "fix: 連打するとお気に入りが二重登録される問題を修正"
git commit -m "feat: お気に入り一覧に並び替え機能を追加"
git commit -m "refactor: お気に入りの状態管理をサービスに集約"

2Conventional Commits の接頭辞

type: 説明 という形式で書くのが Conventional Commits です。接頭辞を見るだけで変更の種類が分かるので、履歴の検索やリリースノートの自動生成にも使えます。

# 形式: <type>: <説明>

# よく使う type:
git commit -m "feat: お気に入りボタンを追加"        # 新機能
git commit -m "fix: 保存失敗時にエラー表示を出す"   # バグ修正
git commit -m "refactor: 重複した判定処理を関数化"  # 動作を変えない整理
git commit -m "docs: READMEに起動手順を追記"        # ドキュメント
git commit -m "test: お気に入り切り替えのテスト追加" # テスト
git commit -m "chore: 依存パッケージを更新"         # 雑務的な変更

# fix の履歴だけを探す、といった検索がしやすくなる
git log --oneline --grep="^fix"

3「なぜ」は本文に書ける

1行に収まらない理由や経緯は、コミットメッセージの本文に書けます。-m を2回渡すと1行目が要約、2つ目が本文になります。コードに書きにくい判断の理由を残す場所です。

# -m を2回渡す: 1つ目が要約(1行目)、2つ目が本文
git commit -m "fix: お気に入り保存のリトライを3回までに制限" \
  -m "サーバー障害時に無限リトライとなり、APIに負荷をかけていた。
3回失敗したらエラー表示に切り替え、ユーザーに再操作を促す方針にした。"

# 履歴で本文まで確認する
git log
# commit a1b2c3d...
#     fix: お気に入り保存のリトライを3回までに制限
#
#     サーバー障害時に無限リトライとなり、APIに負荷をかけていた。
#     3回失敗したらエラー表示に切り替え、ユーザーに再操作を促す方針にした。

# 「なぜこの実装なのか」は差分に写らない。本文が唯一の記録になる

41コミット=1つの変更に分ける

バグ修正のついでに別の整理もしたときは、git add でファイルを選んで2回に分けてコミットします。混ぜると片方だけ取り消したいときに分離できなくなります。

# 作業中にバグ修正と表記の統一の2つをやってしまった場合
git status
# modified: src/app/favorite.service.ts   # バグ修正
# modified: src/app/app.html              # 表記の統一

# ファイルを選んで、意味の単位で2回に分けてコミットする
git add src/app/favorite.service.ts
git commit -m "fix: 未ログイン時にお気に入りが消える問題を修正"

git add src/app/app.html
git commit -m "docs: ボタンの表記を『お気に入り』に統一"

# 分けておけば、後から片方だけ取り消す(revert)こともできる

5良い履歴は調査のときに効く

メッセージが整っていると、git log を眺めるだけで「いつ何が変わったか」を追えます。不具合がいつ混入したかを探すときに、履歴が読めるかどうかで調査時間が大きく変わります。

# 履歴を1行ずつ眺める
git log --oneline
# e5f6a7b feat: お気に入り一覧に並び替えを追加
# c3d4e5f fix: 連打で二重登録される問題を修正
# a1b2c3d feat: お気に入りをサーバーに保存

# 特定ファイルの変更履歴だけを追う
git log --oneline -- src/app/favorite.service.ts

# 「保存まわりがおかしい」→ 履歴が読めれば a1b2c3d 前後を
# 重点的に調べればよい、と当たりを付けられる。
# メッセージが「修正」の羅列だとこの絞り込みができない