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

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

最終更新:
💡 バージョン番号で、公開APIの互換性を伝える

バージョン番号をMAJOR.MINOR.PATCHで表し、公開APIの変更と後方互換性を伝えるルール。1.0.0以降は、互換性を壊す変更、互換性を保つ機能追加、バグ修正で上げる番号を区別する。

📌 このページのポイント
公開APIの変更を、番号で伝える MAJOR . MINOR . PATCH 2 メジャー MAJOR 互換性を壊す 公開API変更 3.0.0 5 マイナー MINOR 互換性を保つ 機能追加など 2.6.0 3 パッチ PATCH 互換性を保つ バグ修正 2.5.4 . . 2.5.3から更新する例 上位を上げたら、下位は0へ SemVerに従う1.0.0以降のルール
公開APIの互換性が基準です。マイナーには公開APIの非推奨化も含まれます。0.y.zは初期開発用として扱います。
ひよこ ひよこ
バージョン番号ってなんで3つの数字があるの?
ペンギン先生 ペンギン先生
それぞれ意味が違うからだよ。SemVerに従う1.0.0以降のリリースでは、公開APIの互換性を壊す変更はメジャー、互換性を保つ機能追加はマイナー、互換性を保つバグ修正はパッチを上げる。変更した行数の大小ではなく、利用者に公開するAPIへの影響が中心なんだ。
ひよこ ひよこ
後方互換性って何?番号はどう上げるの?
ペンギン先生 ペンギン先生
以前の公開APIを使っていたコードが、新しい版でもその契約どおりに使えることだよ。2.5.3から、APIを壊す変更なら3.0.0、互換性を保つ機能追加なら2.6.0、バグ修正なら2.5.4にする。上位の番号を上げたら下位を0に戻す。公開APIを非推奨にしたときもマイナーを上げるんだ。
ひよこ ひよこ
package.jsonの「^1.2.3」ってどういう意味?
ペンギン先生 ペンギン先生
npmの通常のバージョン範囲では、^1.2.3は1.2.3以上2.0.0未満、~1.2.3は1.2.3以上1.3.0未満を許す指定だよ。単に「1.xなら全部」ではなく、下限もある。これらの範囲ではプレリリースは通常除外される。許すバージョンの範囲と、更新後に自分のコードが動く保証は別なので、変更内容も確認しよう。
ひよこ ひよこ
「0.x.x」のバージョンって何が特別なの?
ペンギン先生 ペンギン先生
SemVerでは0.y.zは初期開発用で、公開APIが安定しているとは扱わず、何でも変わりうる段階だよ。npmのキャレットも0.xでは範囲が狭くなり、^0.1.0は0.1.0以上0.2.0未満を許す。メジャーが同じだから互換性が保たれる、と一律に判断できないんだ。
ひよこ ひよこ
「-beta」や「+build」も番号の一部?
ペンギン先生 ペンギン先生
1.2.3-beta.1のようなプレリリースは、通常版の1.2.3より低い優先順位になるよ。+build.7のようなビルド情報は、バージョンの優先順位の比較に影響しない。すべてのソフトウェアがSemVerに従うとは限らないので、番号の意味を確かめ、CHANGELOGや移行ガイドと必要なテストで更新の影響を確認しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「セマンティックバージョニング」って出てきたら「公開APIの互換性や変更内容をバージョン番号で伝えるルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Semantic Versioning(SemVer)」 = 意味のあるバージョニング
💬 「Semantic(意味論的)」なバージョニング。単なる連番ではなく、数字に「意味」を持たせる。Tom Preston-Wernerが提唱しsemver.orgに仕様が公開されている

参考資料

← 用語集にもどる