Conventional Commits
https://avatars.githubusercontent.com/u/42154238?s=200&v=4#.png
https://www.conventionalcommits.org/ja/v1.0.0/
人間と機械が読みやすく、意味のあるコミットメッセージにするための仕様
メッセージ様式のフォーマットなので Git だけでなく Subversion、Mercurial などでも使って良い
フォーマット
code:md
<type>optional scope: <description>
optional body
optional footer(s)
commitlintでコミットメッセージのLintができるようになっているので使用する場合はセットと考えると良さそう
https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional
例
feat: allow provided config object to extend other configs
chore!: drop support for Node 6
docs: correct spelling of CHANGELOG
公式の主張するメリット
公式サイトより引用
- 変更履歴 (CHANGELOG) を自動的に生成できる
- Semantic Version (SemVer)単位で自動的に履歴をまとめられる
- チームメイトや一般のユーザー、およびその他の利害関係者へ変更の内容を伝えられる
- ビルドや公開の処理をトリガーできる
- より構造化されたコミット履歴を調査できるようにすることで、人々があなたのプロジェクトに貢献しやすくなる
良さそうだと感じた点
コミットメッセージからCHANGELOGを自動生成できる点
SemVerと強調してバージョニングを自動化できそうな点
コミットメッセージに制約が発生することでコミット粒度が意味のある単位になりそうな点
疑問だと思った点
コミットメッセージがフォーマット外のものが含まれると自動生成やバージョニングの恩恵の外になる
コミットメッセージがより重要視されるようになるが最初期は手に馴染むまで大変かもしれない
squash merge を推奨していそう(?)な点
貢献者全員が Conventional Commits の仕様を使用する必要がありますか?
個人的には squash merge は contributions を吹き飛ばす性質があるので自身のマインドにマッチしていない
https://qiita.com/wataash/items/ab7828a1bc452b665f94#squash-and-merge
Pull Requestベースの開発を行っている場合はPR名やマージ時点でメッセージを決定できるのでそれで回避できるならそれが良さそうと思った
Lintingでは人間のストレスを緩和できない
コミットメッセージの規約がここまで決まっているので Commitizen のようなメッセージをフォーマットに沿って生成する仕組みを使うと良さそう