ビルドメタデータ (+) は優先順位で無視される

1.0.0+20230101や1.0.0+build.42のようなSemVerビルドメタデータはバージョン比較時に無視されます。その理由と使い時を解説。

Pre-release

詳細な説明

SemVerにおけるビルドメタデータ

ビルドメタデータは、+記号の後にドット区切りの識別子を付けてバージョンに追加されます。

フォーマット

MAJOR.MINOR.PATCH[-prerelease][+build]

例:

  • 1.0.0+20230101 — ビルド日
  • 1.0.0+build.42 — ビルド番号
  • 1.0.0-beta.1+exp.sha.5114f85 — Git SHA付きプレリリース

黄金ルール

ビルドメタデータはバージョン優先順位の決定時に無視されなければなりません。

つまり:

  • 1.0.0+build.1 = 1.0.0+build.2(比較目的)
  • 1.0.0+build.1 = 1.0.0(比較目的)

ビルドメタデータが存在する理由

ビルドメタデータは情報提供目的のみで存在します:

ユースケース
Gitコミット SHA 1.0.0+sha.a1b2c3d
ビルド日時 1.0.0+20230615.143022
CIビルド番号 1.0.0+build.1234
プラットフォーム 1.0.0+linux.amd64

実際の使用

ほとんどのパッケージマネージャー(npm、Cargo、pub)は解決時にビルドメタデータを除去または無視します。主に内部追跡やデプロイアーティファクトのデバッグに有用です。

ユースケース

CI/CDパイプラインで追加メタデータ(Git SHA、ビルド番号、日付)をタグ付けしつつ、パッケージ解決のための正しいバージョン順序を維持する場合。

試してみる — Semver Calculator

フルツールを開く