こんな形式のコミットメッセージ見たことないでしょうか。
chore(deps): update all non-major dependencies
これはConventional Commitsに従ったものです。
多くのOSSや開発現場は、(明確に宣言していないものの)Conventional Commitsに影響を受け、PRタイトルやコミットメッセージを設定しています。
シンプルな仕様ですので、チームで開発する上で知っておくと良いと思います。
Conventional Commitsは、Gitのコミットメッセージの形式に関する仕様。 シンプルでドキュメントも分かりやすく、こちらのサマリと例から大体つかめる。
fix
:バグ修正feat
:機能追加BREAKING CHANGE: <description>
:破壊的変更を表すフッタ。commit type(scopeがある場合はscope)の後ろに!
をつけることでも表現可。両方の指定も可。<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
コミットメッセージに含める情報が、
fix
api
prevent racing of requests
Introduce a request id and a reference to latest request. Dismiss incoming responses other than from latest request.
BREAKING CHANGE: drop support for Node 6
Refs: #123
(※一般的なフッタ)だとすると、以下のようになる。
fix(api)!: prevent racing of requests
Introduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.
BREAKING CHANGE: drop support for Node 6
Refs: #123
commit typeは、前述のとおり、fix
とfeat
以外も使うことができる。
一般には、commitlintというツールの定義が普及している。
[
'build',
'chore',
'ci',
'docs',
'feat',
'fix',
'perf',
'refactor',
'revert',
'style',
'test'
]
特徴として、commit typeやfooterのBREAKING CHANGEが、SemVerと対応している。
BREAKING CHANGE
:MAJORfeat
:MINORfix
:PATCHそのため、
多くのOSSや開発現場は、明確に宣言していないものの、Conventional Commitsに影響を受け、PRタイトルやコミットメッセージを設定しています。
実際にJS界隈のOSSリポジトリを無作為に10個ほど調べたところ、7個がConventional Commits形式に従っていました。
以下に3つの例をまとめます。
Nuxtは、コントリビュータに対して、PRタイトルをConventional Commits形式で書くように明確に求めている。
https://v3.nuxtjs.org/community/contribution/#final-checklist
実際にこのルールは守られている模様。
https://github.com/nuxt/framework/pulls
一方で、上記ガイドラインにコミットメッセージについての言及はない。
実際にリポジトリをみてみると、PRはSquash & Mergeされている。Squash & Merge時、PRタイトルがコミットメッセージになるため、PRタイトルに関するルールだけで、ツリーがConventional Commitsに保たれているようである。
Fastifyは、明確にはConventional Commits採用を宣言していない模様。 https://github.com/fastify/fastify/blob/main/docs/Guides/Contributing.md#how-to-contribute
しかし、実際は大半のコントリビュータがConventional Commitsに倣っている。 https://github.com/fastify/fastify/pulls?q=is%3Apr+is%3Aclosed
Reactは、明確にはConventional Commits採用を宣言しておらず、Conventional Commitsに意図的に従っていない模様。 コントリビュータが作成するPRタイトルに一貫性がないように見える。
https://ja.reactjs.org/docs/how-to-contribute.html
https://github.com/facebook/react/pulls?q=is%3Apr+fix%3A+is%3Aclosed
先日、NuxtにPRを送るにあたって、NuxtのContribution guidelineを読んで、初めてConventional Commitsを知りました。 https://v3.nuxtjs.org/community/contribution/
副業先現場でも確認したところ、「無意識に従っていた」とのことでしたので、やはり多くのエンジニア・現場がどこかでConventional Commitsに触れて、影響を受けているようです。
仕様自体はシンプルだったのですが、採用状況や広まり方が興味深かったので、まとめることにしました。