TL;DR

人間と機械が読みやすく、意味のあるコミットメッセージにするための仕様。<type>[scope]: <description> の形でコミットの種類を明示する。

なぜ必要か

コミットの種類が決まった形で書かれていれば、ツールで扱える。公式サイトは、CHANGELOG の自動生成、セマンティックバージョニングのバージョンの自動決定、変更内容の共有、ビルドやリリースの起動、構造化された履歴による貢献のしやすさを利点に挙げている。

fix は SemVer の PATCH、feat は MINOR、破壊的変更は種類にかかわらず MAJOR に対応する。

仕組み

コミットメッセージは次の形で書く。

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

type(必須)

コミットの種類を表す。仕様で決まっているのは、バグ修正の fix と新機能追加の feat である。それ以外の種類も使ってよく、たとえば Angular の規約では次のものを使う。

  • build: ビルドシステムや依存関係に関する変更
  • ci: CI の設定ファイルやスクリプトの変更
  • docs: ドキュメントの変更
  • style: フォーマットなど、コードの意味に影響しない変更
  • refactor: リファクタリング
  • perf: パフォーマンス改善
  • test: テストの追加や既存のテストの修正

そのほかの要素

scope(任意)は、api のように変更が影響する範囲を書く。description(必須)は変更の短い要約、body(任意)は変更についての追加の情報である。

footer(任意)は、単語のトークンに : か # を続け、値を書いたものである。複数書ける。

Refs: #123
Reviewed-by: Z

破壊的変更

破壊的変更は、type に ! を付けるか、footer に BREAKING CHANGE を書いて表す。両方を付けてもよい。

feat!: send an email to the customer when a product is shipped
feat: allow provided config object to extend other configs

BREAKING CHANGE: `extends` key in config file is now used for extending other config files
chore!: drop support for Node 6

BREAKING CHANGE: use JavaScript features not available in Node 6.

注意点

footer のトークンでは空白の代わりに - を使わなければならない(Reviewed-by など)。ただし BREAKING CHANGE は例外である。

関連

出典