複数行のコミットボディ
効果的な複数行コミットメッセージボディの書き方を学びます。ボディを追加するタイミング、構造化の方法、72文字での行折り返し、ベストプラクティスを解説します。
Multi-line
詳細な説明
効果的なコミットメッセージボディの作成
コミットメッセージのボディは、変更の理由を説明する場所です。サブジェクト行が何が変わったかを記述する一方、ボディはコンテキスト、動機、将来の開発者(未来の自分を含む)が推論を理解するための詳細を提供します。
ボディを追加するタイミング
以下の場合にボディを追加します:
- サブジェクト行だけでは変更が自明でない
- 文書化すべき重要なコンテキストや動機がある
- コミットが再発する可能性のある自明でないバグを修正する
- このアプローチが代替案より選ばれた理由を説明したい
- コミットが複数のファイルやシステムに影響する
フォーマットルール
- サブジェクトとボディを空行で区切る
- ボディ行を72文字で折り返す
- ボディは何をとなぜを説明し、どのようにではない
例
fix(parser): handle escaped quotes in JSON strings
The previous regex-based parser failed when processing
JSON strings containing escaped double quotes (\").
This caused a parse error for any configuration file
with file paths or regex patterns containing quotes.
Replace the regex with a character-by-character state
machine that properly tracks escape sequences. This
approach is also ~30% faster for large inputs.
Closes #789
ボディの構造化
良いボディは以下のパターンに従います:
- 段落1:問題や動機は何だったか?
- 段落2:どのアプローチを取ったか、なぜか?
- 段落3(オプション):どの代替案が検討されたか?
- フッター:イシュー参照、共著者など
72文字ルール
Gitがボディ行を72文字で折り返すことを推奨する理由:
git logは出力を4スペースでインデントする- 72 + 4 = 76で、80列ターミナルに収まる
- ツール間で一貫した可読性を確保する
- 多くのGitホスティングプラットフォームがこの想定でコミットを表示する
ボディでの箇条書き
リストには箇条書きを使用できます:
refactor: reorganize project directory structure
- Move all API routes from /routes to /api
- Extract shared middleware into /middleware
- Consolidate database models in /models
- Update import paths across all files
ユースケース
診断に相当な調査を必要とした微妙なパースバグを修正しました。修正にはregexベースのアプローチをステートマシンに置き換えることが含まれます。将来のメンテナがなぜコードがこのように書かれているかを理解できるよう、根本原因と新しいアプローチの理由を文書化したいと考えています。