ソフトウェアがセマンティックバージョニング(以下SemVer)を採用している時、公開APIの互換性を保たれない変更がされるのであれば、メジャーバージョン番号を上げなければならない。
jshint-stylishというJavaScriptライブラリでは実際にメジャーバージョン番号が 1.y.z
から 2.y.z
にインクリメントされた。
この時の変更は、第三者からのP-Rを受け入れて、ライブラリが提供するコードの大半が stylish.js
から index.js
に移されたものだった(バージョン間の差分)。
変更の結果、jshint-stylishを利用しているユーザーは、次のように利用コードを変更する必要があった。変更しないでバージョンアップした場合は ビルドが破壊される からである。
# jshint-stylish 1.0.2を利用するコード
$ jshint --reporter=node_modules/jshint-stylish/stylish.js file.js
# jshint-stylish 2.0.0を利用するコード
$ jshint --reporter=node_modules/jshint-stylish file.js
npmに登録される多くのライブラリではSemVerが採用されており、利用者は ^1.0.0
のように宣言しておくことで 1.y.z
のメジャーバージョンをまたがない最新バージョンを安全に使い続けられる。jshint-stylishのように破壊的な変更がメジャーバージョン番号の更新で通知されれば、ライブラリ利用者は慎重にバージョンアップを検討することが可能になる。
よくある勘違いの一つに、次のような理由からメジャーバージョン番号を上げてしまうケースがある。
確かに商用ソフトウェアでこのようなメジャーバージョンアップが行われることはあるが、こういった商用ソフトウェアは最初からSemVerを採用していない点に注意が必要である。利用者がSemVerを期待している時に、商用ソフトウェアの真似をしてはならない。利用者が混乱するからである。