コミットメッセージのバリデーションには commitlint
( https://github.com/conventional-changelog/commitlint ) を使用します。
またコミットメッセージは次の規約に準拠します。
https://www.conventionalcommits.org/ja/v1.0.0/
コミットメッセージのフォーマットは次の通りです。
<type>[optional scope]: <subject>
[optional body]
[optional footer(s)]
type
, subject
は必須です。body
, footer
を入れる場合はそれぞれ空行を間に挿みます。
type
は lowerCase で表記し、次のいずれかの指定が必須です。
name | description |
---|---|
feat | 新機能 |
fix | バグフィックス |
docs | ドキュメントのみの変更 |
style | コードに影響を与えないスタイル変更(スペース、フォーマット、セミコロン抜け) |
refactor | リファクタリング(バグを修正するのでもなく、機能を追加するのでもないコードの変更) |
perf | パフォーマンスを向上させるためのコード変更 |
test | 不足しているテストを追加したり、既存のテストを修正 |
build | ビルドシステムや外部の依存関係に影響を与えるような変更 |
ci | CIの設定ファイルやスクリプトの変更 |
chore | その他、src やテストファイルを変更しない変更 |
revert | コミット取り消し(git revert) |
: some message # fails
foo: some message # fails
FIX: some message # fails
fix: some message # passes
type
には追加のコンテキスト情報を表す scope
を含むことが出来ます。
scope
は type
の後に括弧付きで表し、lowerCase で表記します。
fix(SCOPE): some message # fails
fix(scope): some message # passes
subject
は必須であり、命令形・現在系の動詞から始めます(例:'changed' や 'changes' ではなく 'change' から始まります)。
コミットメッセージは「何をしたか」を記録するというよりも、「このコミットを適用するとどうなるか」を示す方が望ましいためです。
subject
は lowerCase で表記します。
fix: # fails
fix: Some Message # fails
fix: SomeMessage # fails
fix: SOMEMESSAGE # fails
fix: some message # passes
subject
の末尾を .
で終わらせてはなりません。
fix: some message. # fails
fix: some message # passes
subject
の詳細情報が必要な場合は body
セクションに記述してください。
fix: correct minor typos in code
see the issue for details on the typos fixed
closes issue #12
footer
には、Breaking Changes についての情報や、このコミットがクローズした GitHub の課題を参照する場所でもあります。
Breaking Changes は、最初に BREAKING CHANGE:
という単語で始まり、スペースか改行で始まります。
破壊的な変更は全て footer
の BREAKING CHANGE
ブロックとして記載しなければなりません。
BREAKING CHANGE
ブロックには、変更の説明、変更理由、移行の注意事項などを記載します。
BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
myBind: 'bind',
myExpression: 'expression',
myEval: 'evaluate',
myAccessor: 'accessor'
}
After:
scope: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - usually not useful, but in cases where the expression is assignable, you can use '='
myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
クローズしたGitHub Issueへの参照を追加する場合、次のように Closes
キーワードを先頭にして記述してください。
Closes #234
複数のIssueへの参照を追加するには、カンマ区切りで記述します。
Closes #123, #245, #992
オプションの本文やフッターセクションの最初に BREAKING CHANGE:
というテキストを持つコミットは、互換性の無い破壊的な変更を含むことを表します。
BREAKING CHANGE
は、どのようなタイプのコミットにも含まれる可能性があります。
fix: some message
BREAKING CHANGE: It will be significant
-
@commitlint/config-conventional
https://github.com/conventional-changelog/commitlint/tree/master/@commitlint/config-conventional -
Conventional Commits
https://www.conventionalcommits.org/en/v1.0.0-beta.4/ -
Angular Commit Message Conventions
https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit# -
Writing Git commit messages
https://365git.tumblr.com/post/3308646748/writing-git-commit-messages