【せまんてぃっくばーじょにんぐ】

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

💡 バージョン番号で「変更の大きさ」を伝える共通言語
📌 このページのポイント
セマンティックバージョニング(SemVer) v 2 . 5 . 3 メジャー (MAJOR) 後方互換性のない変更 マイナー (MINOR) 後方互換性のある機能追加 パッチ (PATCH) バグ修正のみ 例: 1.x → 2.0 例: 2.4 → 2.5 例: 2.5.2 → 2.5.3
セマンティックバージョニングのイメージ
ひよこ ひよこ

バージョン番号ってなんで3つの数字があるの?

ペンギン先生 ペンギン先生

それぞれ意味が違うからだよ。1.2.3なら「1」がメジャー(大きな変更)、「2」がマイナー(機能追加)、「3」がパッチ(バグ修正)。数字がどれ上がったか見るだけで、更新の規模と互換性の有無が分かるんだ。

ひよこ ひよこ

後方互換性って何?

ペンギン先生 ペンギン先生

古いバージョンで動いていたコードが、新しいバージョンでも動くかどうかだよ。互換性がある更新ならマイナーやパッチを上げるだけ。互換性が壊れる変更(APIの削除・引数の変更など)はメジャーバージョンを上げて、利用者に「気をつけて」と伝える。

ひよこ ひよこ

package.jsonの「^1.2.3」ってどういう意味?

ペンギン先生 ペンギン先生

「^(キャレット)」は「メジャーバージョンが同じなら更新可能」という指定だよ。「^1.2.3」なら1.x.xの範囲でアップデートを許可する。「~(チルダ)」はパッチバージョンだけ許可する(1.2.xの範囲)。これはSemVerの「メジャーが同じなら後方互換性がある」という前提に基づいている。

ひよこ ひよこ

「0.x.x」のバージョンって何が特別なの?

ペンギン先生 ペンギン先生

SemVerの仕様ではメジャーが0の間(0.y.z)はAPIが不安定な開発期間扱いで、マイナーバージョンが上がるだけでも後方互換性が壊れることがある。つまり「^0.1.0」が「0.1.xまで許容」になって「0.2.0」はインストールされない。ライブラリが「0.x台だから本番で使うのが怖い」と言われる理由がここにある。さらにSemVerはあくまでルールで、守るかどうかは開発者次第。実際には「メジャー据え置きで互換性を破った」リリースは珍しくなく、CHANGELOG・マイグレーションガイドを必ず確認する習慣が重要なんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
セマンティックバージョニングって出てきたら「バージョン番号で変更の互換性を伝えるルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Semantic Versioning(SemVer)」 = 意味のあるバージョニング
💬 「Semantic(意味論的)」なバージョニング。単なる連番ではなく、数字に「意味」を持たせる。Tom Preston-Wernerが提唱しsemver.orgに仕様が公開されている
← 用語集にもどる