バージョンバンプ計算

Major
1.0.0 → 2.0.0
破壊的変更。API非互換。
Minor
1.4.0 → 1.5.0
新機能追加。後方互換あり。
Patch
1.4.2 → 1.4.3
バグ修正。新機能なし。

バージョン範囲チェッカー

よく使う範囲:
^1.0.0 ~1.4.2 >=1.0.0 <2.0.0 1.x * (すべて)

バージョン履歴 — バンプシミュレーション

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

セマンティックバージョニング(SemVer)は、MAJOR.MINOR.PATCH(例: 2.4.1)という3つの数字形式を使用するバージョニング仕様です。各リリースの変更内容を標準的な方法で伝え、依存関係を更新する際に何を期待すべきかを開発者が理解できるようにします。

SemVer仕様(semver.org)では明確なルールが定義されています:破壊的変更にはMAJORを、後方互換のある新機能にはMINORを、後方互換のあるバグ修正にはPATCHをそれぞれインクリメントします。

各バージョンパートをバンプするタイミング

  • MAJOR(破壊的変更): パブリックAPIメソッドの削除、関数シグネチャの変更、非推奨機能の削除、認証フローの変更。
  • MINOR(新機能): 新しいエンドポイントの追加、既存関数へのオプショナルパラメータの追加、新しい設定オプションの追加。
  • PATCH(バグ修正): クラッシュの修正、不正な動作の修正、APIに変更のないパフォーマンス改善、ドキュメントの修正。

npmバージョン範囲構文

  • ^1.2.3 — 1.2.3と互換。MINORとPATCHのアップデートを許可(>=1.2.3 <2.0.0)
  • ~1.2.3 — ほぼ等価。PATCHアップデートのみ許可(>=1.2.3 <1.3.0)
  • >=1.2.3 <2.0.0 — 明示的な範囲、意図が非常に明確
  • 1.x — メジャーバージョン1のすべてのバージョン
  • * — すべてのバージョン(本番環境では危険)
  • 1.2.3 — 完全一致のみ(アップデートなし)

実践的なセマンティックバージョニング:理論を超えて

セマンティックバージョニング(SemVer)は、各リリースでどのような変更が予想されるかについて、ライブラリの作者と利用者の間に明確な契約を提供します。しかし、現実世界のバージョニング判断は、シンプルなMAJOR.MINOR.PATCHの公式が示すよりも微妙なことが多いです。

各バージョン番号をいつ上げるか

  • MAJOR(破壊的変更): パブリックAPIの削除、関数シグネチャの変更、エクスポートモジュールの名前変更、ランタイムバージョンのサポート終了(Node.js 16 → 18最小要件)、既存ユーザーが依存するデフォルト動作の変更。
  • MINOR(新機能、後方互換性あり): 新しい関数、エンドポイント、オプションの追加。既存関数へのオプションパラメータの追加。既存APIの非推奨化(削除ではなく)。新しいイベントタイプや列挙値の追加。
  • PATCH(バグ修正のみ): 不正な動作の修正、セキュリティパッチ、APIを変更しないパフォーマンス改善、ドキュメントの修正、パブリックAPIに影響しない依存関係の更新。

package.jsonのバージョン範囲戦略

  • ^1.2.3(キャレット — npmのデフォルト): MINORとPATCHの更新を許可:≥1.2.3 <2.0.0。ほとんどの依存関係に最適 — ライブラリがSemVerに正しく従っていることを信頼します。
  • ~1.2.3(チルダ): PATCHの更新のみ許可:≥1.2.3 <1.3.0。より保守的 — マイナーバージョンでの破壊的変更の履歴がある依存関係に使用します。
  • 1.2.3(正確): このバージョンに正確にロック。最も保守的 — 変更がリスキーな重要な依存関係(データベースドライバ、認証ライブラリ)に使用します。

プレリリースバージョンとビルドメタデータ

SemVerはプレリリース識別子(1.0.0-alpha.12.0.0-beta.31.0.0-rc.1)をサポートしています。プレリリースバージョンはリリースバージョンより低い優先度を持ちます:1.0.0-alpha < 1.0.0。ビルドメタデータ(1.0.0+20260314)はバージョン優先度比較では無視されますが、ビルド情報の追跡に有用です。

セマンティックバージョニングに関するよくある質問

npmの ^1.0.0 と ~1.0.0 の違いは?

キャレット(^)は同じメジャーバージョン内の互換性のあるアップデートを許可します。^1.0.0>=1.0.0 かつ <2.0.0 のバージョンを受け入れ、minorとpatchの両方のアップデートを許可します。チルダ(~)はより厳密で、~1.0.0>=1.0.0 かつ <1.1.0 にマッチし、patchアップデートのみ許可します。npmはデフォルトでキャレット(^)を使用します。インストールされるバージョンをより厳密に制御したい場合はチルダを使用してください。

メジャーバージョン番号を上げるべきタイミングは?

メジャーバージョン(例: 1.x.x → 2.0.0)を上げるのは、前バージョンとの後方互換性がない破壊的変更がある場合のみです。これには、パブリックAPIメソッドの削除や名前変更、関数のパラメータシグネチャの変更、以前サポートしていたランタイムや環境のサポート終了、既存の統合を壊すデフォルト動作の変更が含まれます。破壊的でない追加は常にminorに、バグ修正は常にpatchに含まれます。

0から始まるバージョン番号の意味は?

0から始まるバージョン(例: 0.x.x)は、ソフトウェアが初期開発段階にあり、パブリックAPIがまだ安定していないことを示します。SemVerの仕様では、0.x開発中はいつでも何でも変更される可能性があります — minorバージョンのバンプ(0.1.0 → 0.2.0)でも破壊的変更が含まれることがあります。後方互換性を維持する安定した文書化されたパブリックAPIをコミットする準備ができたら1.0.0に上げてください。

SemVerでプレリリースバージョンをリリースするには?

ハイフンの後にプレリリース識別子を追加します:1.0.0-alpha.11.0.0-beta.21.0.0-rc.1。プレリリースバージョンはリリースより優先度が低くなります:1.0.0-alpha < 1.0.0-beta < 1.0.0-rc.1 < 1.0.0。npmでは npm publish --tag next を使ってパブリッシュすることで、デフォルトではインストールされなくなります。キャレットやチルダの範囲セレクタはプレリリースバージョンに自動的にはマッチしません。

関連する開発者ツール