複数人の開発者が参加するチーム開発において、コミットメッセージの書き方がバラバラだと、「何を変更したコミットなのか」を一目で理解することが困難になります。例えば、fix、update、修正 といった曖昧なメッセージは、後からバグの原因を調査する(デバッグ)際やリリースノートを作成する際に深刻な足枷となります。
この問題を解決し、機械可読な一貫性のあるコミットログを作成するための世界的な標準規格が Conventional Commits(セマンティック・コミットメッセージ) です。
本記事では、Conventional Commitsの基本構成、主要なプレフィックスの使い分け、そして導入によって得られるメリットを解説します。
1. Conventional Commits の基本構造
Conventional Commits は、コミットメッセージに明確な構造化ルールを定めた仕様です。基本構成は以下の通りです。
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
- type(タイプ): 変更の性質を表すプレフィックス(必須)
- scope(スコープ): 変更が及ぶパッケージやモジュール名(任意、例:
auth、api) - description(説明): 変更内容の簡潔な要約(必須)
- body(本文): 変更の詳細や理由(任意)
- footer(フッター): 破壊的変更(BREAKING CHANGE)の告知や、IssueトラッカーのID(任意)
具体例:
feat(auth): パスワードの最低文字数を8文字に変更
ユーザーセキュリティの向上のため、新規登録およびパスワード変更時に
8文字未満の場合はバリデーションエラーを返すように仕様を変更しました。
Closes #142
2. 主要なプレフィックス(type)の使い分け
Conventional Commitsで最も重要なのが、プレフィックスの正しい選定です。一般的に使用されるのは以下のタイプです。
| タイプ | 説明 |
|---|---|
| feat | 新機能の追加(プロダクションコードに影響) |
| fix | バグや不具合の修正(プロダクションコードに影響) |
| docs | ドキュメント(READMEやコード内コメント)の作成・修正 |
| style | コードの機能に影響を与えない変更(インデント、セミコロン、フォーマット修正) |
| refactor | バグ修正や機能追加を行わない、コードの整理やリファクタリング |
| perf | パフォーマンス向上を目的としたコード変更 |
| test | テストコードの追加や修正 |
| chore | ビルドプロセス、補助ツール、パッケージ依存関係の更新(package.jsonの変更など) |
| ci | CI/CDの設定ファイルやスクリプトの変更(GitHub Actions等) |
3. セマンティック・コミットメッセージ導入のメリット
① コミットログの可読性と検索性の向上
Git履歴を表示した際、ログが綺麗に整理されているため、特定のバグ修正や機能追加コミットをすぐに見つけ出せます。
② 変更履歴(CHANGELOG)の自動生成
メッセージが構造化されているため、ツール(例: standard-version や semantic-release)を利用することで、リリース時に CHANGELOG.md を自動で生成することができます。手動でリリースノートを書く手間がゼロになります。
③ 自動バージョン判定(Semantic Versioning)の自動化
コミットメッセージのタイプから、次のバージョン番号が「パッチ(fix)」「マイナー(feat)」「メジャー(BREAKING CHANGE)」のいずれであるかをツールが自動判定し、npmパッケージなどのバージョンタグ打ちを完全自動化できます。
まとめ
Conventional Commits規約の導入は、最初はプレフィックスの選択に少し迷うかもしれませんが、慣れてしまえばチーム全体のコミュニケーションコストを大幅に引き下げる強力な武器になります。
まずは feat と fix の使い分けから始め、少しずつチームの開発フローに組み込んでみてください。
