🔰
伝わる!Gitコミットメッセージの書き方
日々の開発で欠かせない Git。その中でも、コミットメッセージは変更履歴を管理し、チーム開発を円滑に進める上で非常に重要な役割を果たします。本記事では、可読性が高く、意図が伝わりやすいコミットメッセージの書き方について解説します。
なぜ良いコミットメッセージが重要なのか?
良いコミットメッセージは、以下のようなメリットをもたらします。
- 変更履歴の可読性向上: 何が、なぜ変更されたのかが一目でわかります。
- 問題の追跡: バグが発生した際に、どのコミットが原因かを特定しやすくなります。
- コードレビューの効率化: レビュー担当者は、コミットメッセージを読むことで変更の意図を理解しやすくなります。
- ドキュメントとしての活用: コミットログ自体が、プロジェクトの変遷を記録したドキュメントとして活用できます。
コミットメッセージの基本構造
コミットメッセージの構造は以下の通りです。
<type>(<scope>): #<Issue Number> <subject>
<body>
<footer>
それぞれの要素について詳しく見ていきましょう。
<type>
: コミットの種類を示す Prefix
コミットの種類を示す短いキーワードです。プロジェクトの変更内容を分類し、コミットの意図を明確にするために使用します。一般的に使用される Prefix とその使用場面は以下の通りです。
Prefix | 説明 | 使用場面 |
---|---|---|
feat |
新機能の追加 | 新しい機能を追加したコミット |
fix |
バグの修正 | バグを修正したコミット |
docs |
ドキュメントの変更 | ドキュメント(例: README, API ドキュメントなど)を追加、修正、削除したコミット |
style |
コードのスタイルに関する変更 (フォーマット、セミコロンなど) | コードの意味に影響を与えないスタイルの修正(例: インデントの修正、不要な空白の削除、コードフォーマットの適用など) |
refactor |
コードのリファクタリング (機能変更なし) | コードの内部構造を変更したが、外部から見た動作は変わらないコミット(例: 変数名の変更、関数の分割・統合、ロジックの整理など) |
test |
テストコードの追加、修正 | 新しいテストコードの追加や既存のテストコードの修正を行ったコミット |
chore |
ビルドプロセス、補助ツール、依存関係などの管理に関する変更 | 開発環境やビルドシステムに関する変更(例: 依存ライブラリの更新、タスクランナーの設定変更、gitignore の修正など) |
perf |
パフォーマンス改善に関する変更 | コードのパフォーマンスを向上させるための変更を行ったコミット |
build |
ビルドシステムや外部依存関係に関する変更 | ビルドプロセス自体や、それに必要な外部ライブラリなどの依存関係を変更したコミット |
ci |
CI (継続的インテグレーション) パイプラインの設定やスクリプトに関する変更 | GitHub Actions、CircleCI などの CI/CD に関する設定ファイルやスクリプトを変更したコミット |
revert |
直前のコミットを取り消す変更 | 誤った変更を取り消すために git revert コマンドを実行した際に生成されるコミット |
(<scope>)
: スコープ (任意)
変更が影響する範囲を示す任意の要素です。例えば、特定のコンポーネント、モジュール、ファイルなどを記述します。複数のスコープにまたがる場合は省略しても構いません。
#<Issue Number>
: Issue トラッカーの ID
変更内容に関連する Issue トラッカーの ID です。
<subject>
: 短い概要
変更内容を簡潔にまとめた一行の概要です。多くても 30 文字程度に収めることが推奨されます。命令形で記述し、「ユーザー登録機能を追加」のように具体的に記述します。
<body>
: 詳細な説明 (任意)
変更の理由、背景、具体的な内容などを詳細に記述します。必要に応じて複数行にわたっても構いません。なぜその変更を行ったのか、どのような影響があるのかなどを記述すると、より理解が深まります。
<footer>
: フッター (任意)
関連する Issue の ID や、破壊的な変更(Breaking Changes)に関する情報を記述します。
-
Issue Tracking:
#123
,Closes #456
のように、関連する Issue トラッカーの ID を記述します。 -
Breaking Changes:
BREAKING CHANGE: APIのレスポンス形式が変更されました。
のように、後方互換性のない変更について明示的に記述します。
コミットメッセージを書く際のポイント
- 一貫性: プロジェクト全体で一貫した Prefix やフォーマットを使用するように心がけましょう。
- 具体性: 何を変更したのかを具体的に記述しましょう。「修正しました」だけでなく、「〇〇に関する問題を修正しました」のように記述します。
- 簡潔性: 短く分かりやすい言葉で記述しましょう。
-
命令形:
<subject>
は命令形で記述しましょう。 -
最初の行を重要視: 最初の行(
<type>(<scope>): #<Issue Number> <subject>
) は特に重要です。変更の概要が一目でわかるように記述しましょう。
コミットメッセージの例
feat(user): #10 ユーザー登録機能を追加
ユーザーがメールアドレスとパスワードでアカウントを作成できるようにしました。
入力validationやエラーハンドリングも実装済みです。
Closes #10
この例では、以下の情報が明確に伝わります。
-
種類:
feat
(新機能の追加) -
スコープ:
user
(ユーザー関連の機能) - Issue ID: #10
- 概要: ユーザー登録機能を追加した
- 詳細: 実装内容(メールアドレスとパスワードでの登録、validation、エラーハンドリング)
- 関連 Issue: Issue #10 をクローズする
まとめ
良いコミットメッセージを書くことは、自分自身だけでなく、チーム全体の生産性向上に繋がります。本記事で紹介した内容を参考に、より分かりやすく、価値のあるコミットメッセージを作成する習慣を身につけていきましょう。
参考
Discussion