セマンティックバージョニングとは何か?
セマンティックバージョニングとは、2.4.1 のようなバージョン番号が、それがどの種類の変更を表すかをエンコードするバージョニングスキームです。
バージョン番号は任意であることもできますが、意味を持たせることもできます。セマンティックバージョニング (SemVer) は番号に意味を持たせます。番号を読むことで、更新が安全なバグ修正か、後方互換の feature か、breaking change かが分かります。
major.minor.patch スキーム
SemVer のバージョンは 3 つの部分を持ちます: MAJOR.MINOR.PATCH。互換性のない breaking な変更には MAJOR を、後方互換の新しい feature には MINOR を、後方互換のバグ修正には PATCH を上げます。したがって 2.4.1 は、最後の minor 以降に 4 回の feature 追加と 1 回の patch がある major バージョン 2 を意味します。
各インクリメントが示すもの
- PATCH (2.4.0 -> 2.4.1): バグ修正、採用して安全。
- MINOR (2.4.1 -> 2.5.0): 新しい feature、依然として後方互換。
- MAJOR (2.5.0 -> 3.0.0): breaking change; アップグレード前にレビューする。
例
1.2.0 のライブラリがバグを修正して 1.2.1 をリリースします。ユーザーは何も考えずにアップグレードできます。次に新しいオプションの feature を追加して 1.3.0 をリリースします。依然として安全です。後に非推奨の関数を削除する breaking change を行うので、2.0.0 をリリースし、ユーザーがアップグレード前にコードをチェックすべきことを示します。
なぜ依存関係にとって重要か
プロジェクトが多くのライブラリに依存するとき、SemVer はどの更新を自動的に受け入れるかを表現できるようにします。「patch と minor は受け入れるが major は受け入れない」というルールは、ライブラリが SemVer を正直に守ることに完全に依存します。これが依存関係の自動更新を無謀ではなく安全にするものです。
自動化する
多くのチームは commit メッセージに基づいてバージョンのインクリメントを自動化します。fix の commit は patch を上げ、feature は minor を上げ、breaking change のマーカーは major を上げます。これは人間の推測を排除し、バージョンを正直に保ちます。それが下流の消費者が依存するものです。
重要なポイント
- SemVer は変更の種類を MAJOR.MINOR.PATCH としてエンコードする。
- major は breaking、minor は新しい feature、patch は修正を意味する。
- 依存関係ツールが安全な更新を自動的に受け入れられるようにする。