セマンティックバージョニングの仕様と実践
Semantic Versioning(semver)はソフトウェアのバージョン番号に意味を持たせる標準仕様です。MAJOR.MINOR.PATCHの3番号で互換性の変化を伝え、依存関係の管理を安全にします。npm・pip・Cargo など主要パッケージマネージャーが採用されています。
MAJOR・MINOR・PATCH の意味
MAJOR(メジャー): 後方互換性のない変更(破壊的変更)。APIの削除・変更、動作の根本的な変化など。MINOR(マイナー): 後方互換性のある機能追加。新APIの追加、既存機能の拡張など。PATCH(パッチ): 後方互換性のあるバグ修正のみ。バージョン1.0.0から始め、MAJORが上がったらMINOR/PATCHは0にリセット、MINORが上がったらPATCHは0にリセットします。
プレリリース版とビルドメタデータ
ハイフン付きはプレリリース版: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-beta.2, 1.0.0-rc.1。プレリリース版は正式版より優先度が低く、1.0.0-alpha < 1.0.0-rc.1 < 1.0.0 となります。プラス記号後はビルドメタデータ: 1.0.0+20240101。ビルドメタデータはバージョン比較で無視されます。
npm の範囲指定記法
^1.2.3 はMAJORを固定してMINOR以上のアップデートを許可(>=1.2.3 <2.0.0)。~1.2.3 はMAJOR・MINORを固定してPATCHのみ許可(>=1.2.3 <1.3.0)。>=1.0.0 <2.0.0 のような明示的な範囲も使えます。* や latest は最新版。MAJORが0の場合(0.x.y)は開発中として扱われ、^0.2.3は>=0.2.3 <0.3.0と解釈されます。
バージョン管理のベストプラクティス
バージョン1.0.0を公開したら仕様変更を最小限に。破壊的変更がある場合は必ずMAJORを上げます。CHANGELOGを整備してバージョン間の差分を記録します。リリース前に0.x.yで実験的リリースを行い安定したら1.0.0に移行。Git タグとバージョンを一致させる(v1.2.3)と管理が楽になります。