semverバージョン範囲チェッカー(^1.2.3 対応)

^1.2.3 や ~1.2、>=1.0.0 <2.0.0、1.x、ハイフン範囲、||などのバージョン範囲を「>=A <B」形式に展開し、指定バージョンが一致するかnpm(node-semver)準拠で一括判定します。

展開した範囲(>=A <B 形式)

—

npm(node-semver)の仕様に準拠しています。プレリリース版(例 1.2.3-beta.1)は、範囲側に同じ major.minor.patch のプレリリース指定がある場合だけ一致します。

^1.2.3 って結局どこまで許容されるんだっけ。 package.json に書いたバージョン範囲、このバージョンで本当に一致するのか不安になることはありませんか。 このツールは範囲を「>=A <B」の形に展開してから判定するので、曖昧さが残りません。

使い方

  1. 上の欄に範囲を入力する(^1.2.3、~1.2、>=1.0.0 <2.0.0、1.x、1.2.3 - 2.3.4 など)。
  2. 下のテキストエリアに判定したいバージョンを1行ずつ入力する。空行は無視され、複数バージョンをまとめて判定できる。
  3. 入力するたびに、展開した範囲と各バージョンの一致・不一致が即座に表示される。

仕組み・計算式

node-semver(npmがバージョン判定に使うライブラリ)と同じルールで、キャレット(^)・チルダ(~)・Xレンジ(1.x, *)・ハイフン範囲・OR(||)を「>=A =0.2.3 <0.3.0(マイナーまで固定)、^0.0.3は>=0.0.3 <0.0.4(パッチまで固定)になります。意外だったのは、^0.0.3のような0.0.x系だと、パッチが1つ上がっただけの0.0.4がもう範囲から外れることでした。プレリリース版(1.2.3-beta.1のような-付きバージョン)はsemverの仕様上、範囲側に同じmajor.minor.patchのプレリリース指定がある場合しか一致しません。

現場の落とし穴: ^1.2.3は1.2.3以上2.0.0未満に一致しますが、1.2.3-beta.1のような「同じバージョンのプレリリース」はこの範囲に含まれません。CIで「範囲的には対象のはずなのに落ちる」ときは、まずプレリリースタグの有無を疑ってください。

よくある質問

Q. ~1.2 と ^1.2 の違いは?

A. ~1.2はパッチだけ、^1.2はマイナーまで上げてよい範囲です。試すと、~1.2は>=1.2.0 <1.3.0、^1.2は>=1.2.0 <2.0.0に展開されました。

Q. || で複数の範囲を指定できますか?

A. はい。「^1.0.0 || ^2.0.0」のように書くと、どちらかに一致すれば判定は一致になります。

Q. ハイフン範囲の右側が不完全(1.2 - 2.3)だとどうなりますか?

A. 右側の未指定部分は繰り上がります。1.2 - 2.3は>=1.2.0 <2.4.0として扱われます。

関連ツール

最終更新・根拠の確認日: 2026-09-28 · カテゴリ: 開発・データ