🖊️

Git tag タグ名の一般的なルール(命名規則)と例

2024/09/04に公開

Gitでtagを使ってバージョン名を付けようとして、名前に迷った人向け。

セマンティックバージョニング

バージョンの付け方で調べてまず出てくるものといえばセマンティックバージョニングです。Gitのtagにもこの考え方が適用できるでしょう。

概要:

  1. 1.0.0 のように <メジャーバージョン>.<マイナーバージョン>.<パッチバージョン> とします
  2. 開発版は 0.1.0 から、正式版は 1.0.0 から始めます
  3. バグ修正ではパッチバージョンを、機能性の追加ではマイナーバージョンを、後方互換性を持たない変更ではメジャーバージョンを上げます
  4. プレリリースバージョンは 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92 のように -<ドットで区切られた識別子> を付加します。これらの例は 1.0.0 よりも前のバージョンであることを表します。プレリリースバージョンは早い順に 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0 のようになります

詳細:セマンティック バージョニング 2.0.0

タグ名の付け方

タグは、1.0.0 のようにセマンティックバージョンにするか、「v」を付けて v1.0.0 のようにすることが一般的かと思います。

『v1.2.3』はセマンティック バージョンでしょうか?

いいえ、『v1.2.3』はセマンティック バージョンではありません。しかしながら、セマンティック バージョンに接頭辞の『v』を付けるのは英語ではバージョン番号であることを示す一般的な方法です。バージョン管理では、『バージョン』を『v』と略すことがよくあります。たとえば git tag v1.2.3 -m "Release version 1.2.3" では『v1.2.3』はタグ名であり、セマンティック バージョンは『1.2.3』です。

セマンティック バージョニング 2.0.0

タグ名の例

いくつかのGitHubリポジトリで使用されているタグを例示します。

git

v2.46.0
v2.46.0-rc2
v2.46.0-rc1
v2.46.0-rc0
v2.45.2
v2.44.2
v2.43.5

https://github.com/git/git/tags

vscode

1.92.2
1.92.1
1.92.0
1.91.1
1.91.0

https://github.com/microsoft/vscode/tags

python/cpython

v3.12.5
v3.13.0rc1
v3.13.0b4
v3.13.0b3
v3.12.4
v3.13.0b2
v3.13.0b1
v3.13.0a6
v3.12.3

https://github.com/python/cpython/tags

rails

v7.1.2
v7.1.1
v7.1.0
v7.1.0.rc2
v7.1.0.rc1
v7.1.0.beta1
v7.0.8
v7.0.7.2
v7.0.7.1
v6.1.7.6

https://github.com/rails/rails/tags

nodejs/node

v21.7.3
v20.12.2
v18.20.2
v21.7.2
v20.12.1

https://github.com/nodejs/node/tags

tensorflow

v2.17.0
v2.17.0-rc1
v2.16.2
v2.17.0-rc0
v2.15.1
v2.16.1

https://github.com/tensorflow/tensorflow/tags

kubernetes

v1.31.0
v1.31.0-rc.1
v1.32.0-alpha.0
v1.31.0-rc.0
v1.27.16
v1.31.0-beta.0
v1.30.3

https://github.com/kubernetes/kubernetes/tags

余談:beta1よりbeta.1が良い?

少し細かい話ですが、セマンティックバージョニングの例では 1.0.0-beta1 ではなく 1.0.0-beta.1 が使用されています。ピリオドはあった方が良いのでしょうか?

ピリオドを入れる理由には以下の2つが挙げられると思います。

  1. 方針的な問題として、ピリオドが識別子を区切るので、beta.1 と書くことによって beta というカテゴリの1番であることを示したいため。一方で beta1beta1 というカテゴリであり、beta2 とは異なるカテゴリのような表現になる
  2. beta2beta10 では順番が機械的に正しく評価できないため

優先度は、各識別子を左から右に比較して最初の違いによって評価します。

セマンティック バージョニング 2.0.0

逆に言えば、数字が1桁を超えないならば beta1 でも実害はなさそうです。

Discussion