LoginSignup
14
6

More than 1 year has passed since last update.

セマンティックバージョニング(ほぼ)理解した

Last updated at Posted at 2022-08-18

毎度調べては忘れるセマンティックバージョニング。
忘備録の意味も兼ねてまとめてみた。

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

ソフトウェアのバージョンをどう管理するかについての決めごと。
具体的には、メジャーバージョン マイナーバージョン パッチバージョン の3パートから構成され、それぞれを x, y, z とすると x.y.z と表記される。
メジャーバージョン は、後方互換性のないAPIを変更した場合
マイナーバージョン は、後方互換性を保ちつつAPIを変更・追加した場合
パッチバージョン は、APIに影響を及ぼさないバグを修正した場合
にそれぞれバージョンアップされる。
「どのバージョンを上げるかを意識するのは API 提供側のため、単に API を利用するのみの場合は、続けて記載するバージョン指定方法を理解した上で適切なバージョンを指定して開発を進めていくことになる」 と認識している。

npm におけるパッケージのバージョン指定

npm install <package> により npm パッケージをインストールすると、package.json ファイルにインストールしたパッケージ名とセマンティックバージョンが追記される。

package.json
  ...
  "dependencies": {
    "hoge": "^1.2.3"
  },
  ..

この時、多くのパッケージに対して ^(キャレット)~(チルダ) がバージョンの前に付与されていることがわかる。
これは、単に指定されたバージョンをインストールするのではなく、以下のルールに従うことを意味する。

  • ^: 一番最初のゼロでないバージョンを固定し、それ以下は指定されたバージョン以上が対象となる。
  • ~:
    • メジャーバージョンのみ指定されている場合: マイナーバージョン以下は、それらより大きなものが対象となる(メジャーバージョンのみ固定)。
    • マイナーバージョン以下も指定されている場合: パッチバージョンは指定したものより大きなものが対象となる。

^~ を伴うバージョン指定によりインストールされることが想定される例をいくつか示す。

バージョン指定 想定インストールバージョン 備考
1.2.3 1.2.3 ^~ がない場合は単一バージョンが対象
^1.2.3 1.y.z(y>=2, z>=3) で一番大きいの メジャーバージョン 1 が固定、マイナー以下は任意
^0.2.3 0.2.z(z>=3) で一番大きいの マイナーバージョン 2 が固定、パッチは任意
^0.0.3 0.0.3 パッチバージョン 3 固定
^1.2 1.y.z(y>=2, z>=0) で一番大きいの ^1.2.0 と同義。マイナーバージョン以下は任意
^1 1.y.z(y>=0, z>=0) で一番大きいの ^1.0.0 と同義。マイナーバージョン以下は任意
^0.2 0.2.z(z>=0) で一番大きいの ^0.2.0 と同義。パッチバージョンは任意
~1.2.3 1.2.z(z>=3) で一番大きいの パッチバージョンは任意
~0.2.3 0.2.z(z>=3) で一番大きいの パッチバージョンは任意
~0.0.3 0.0.z(z>=3) で一番大きいの パッチバージョンは任意
~1.2 1.2.z(z>=0) で一番大きいの ~1.2.0 と同義。パッチバージョンは任意
~1 1.y.z(y>=0, z>=0) で一番大きいの ~1.0.0 と同義。マイナーバージョン以下は任意
~0.2 0.2.z(z>=0) で一番大きいの ~0.2.0 と同義。パッチバージョンは任意

npm install によるパッケージのインストールの結果、package.json では特に ^ によるバージョン指定が多いが、これは 「後方互換性のないAPIを変更するメジャーバージョンアップ」を避ける範囲において最新のバージョンにするという挙動となっており、make sense である。

ツールによる確認

なお、指定したセマンティックバージョンでどのバージョンが対象となるかは、こちらのサイトで確認できる。

例1)lodash: ^1.1.1

image.png

例2)lodash: ^4.3

image.png

例3)lodash: ~4.3

image.png

参考にさせていただいたページ

  1. 本家: https://semver.org/lang/ja/

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6