概要
「人間と機会が読みやすく、意味のあるコミットメッセージにするための仕様」である
- コミットメッセージのための軽量の規約
- 明示的なコミット履歴を作成するための簡単なルール
- この規則に従うことで、自動化ツールの導入を簡単にする
- コミットメッセージで機能追加・修正・破壊的変更などを説明することで、Semantic Versioningと協調動作することができる
コミットメッセージの形式
<type>[optional scope]: <description>
[optional body]
[optional footer]
- type: コミットの種類を表す(例: feat, fix, docsなど)
- scope: 変更が影響する範囲(オプション、例: login, api)
- description: 簡潔な変更内容の説明
- body: 詳細な説明(オプション)
- footer: 例として、関連するIssue番号やBREAKING CHANGEを示す(オプション)
Type一覧
Type | 説明 |
---|---|
feat | 新機能の追加 |
fix | バグ修正 |
docs | ドキュメントの更新 |
style | コードフォーマットの変更 |
refactor | コードのリファクタリング |
test | テストの追加や修正 |
chore | ビルドプロセスや補助ツールの変更 |
-
fix
:コードベースのバグにパッチを当てる -
feat
:コードベースに新しい機能を追加する -
BREAKING CHANGE
or!
:APIの破壊的変更を導入する -
それ以外の型
:Angular の規約が基になっているものとして以下がある
- build
- chore
- ci
- docs
- style
- refactor
- perf
- test
破壊的変更への対応
破壊的変更は、コミットメッセージで「!」を型に追加(例: feat!:)するか、フッターにBREAKING CHANGE:を記載すること
- 破壊的変更(breaking changes)は、以前のバージョンと互換性がなく、既存のコードや機能に影響を与える変更を指す
- これは、APIの変更、メソッドの削除、または動作の根本的な変更など、ユーザーがコードを更新する必要がある場合に該当します
使えそうなツール
ツール名 | 説明 | 他ツールとの関係 |
---|---|---|
Commitizen | コマンドラインでConventional Commits形式のコミットメッセージを作成可能 (Commitizen) | commitlintで作成したメッセージを検証(commitlint) |
commitlint | コミットメッセージの形式を検証 | Huskyと統合し、コミット前にチェック可能 |
Husky | Gitフックを使ってコミットメッセージの形式を検証 (Husky) | commitlintをpre-commitフックに設定 |
Semantic Release | コミットメッセージに基づき、バージョンを自動更新し、CHANGELOGを生成 (Semantic Release) | commitlintで検証されたメッセージを基に動作 |
ワークフローの例
- 開発者はCommitizenを使って、git czでコミットメッセージを作成(例: feat: 新機能の追加)
- Huskyがpre-commitフックをトリガーし、commitlintを実行。メッセージがConventional Commits形式でない場合、コミットを拒否
- コミットが成功すると、コミット履歴が蓄積。リリース時にSemantic Releaseが実行され、コミットメッセージに基づいてバージョン(例: 1.0.0 → 1.1.0)を自動更新し、リリースノートを生成
使用例
タイトルおよび破壊的変更のフッターを持つコミットメッセージ
feat: allow provided config object to extend other configs
BREAKING CHANGE: `extends` key in config file is now used for extending other config files
破壊的変更を目立たせるために ! を持つコミットメッセージ**
feat!: send an email to the customer when a product is shipped
スコープおよび破壊的変更を目立たせるための ! を持つコミットメッセージ
feat(api)!: send an email to the customer when a product is shipped
! と BREAKING CHANGE フッターの両方を持つコミットメッセージ
chore!: drop support for Node 6
BREAKING CHANGE: use JavaScript features not available in Node 6.
本文を持たないコミットメッセージ
docs: correct spelling of CHANGELOG
スコープを持つコミットメッセージ
feat(lang): add polish language
複数段落からなる本文と複数のフッターを持ったコミットメッセージ
fix: prevent racing of requests
Introduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.
Remove timeouts which were used to mitigate the racing issue but are
obsolete now.
Reviewed-by: Z
Refs: #123
参考