SemVer範囲チェッカー
package.jsonで使うnpm形式のバージョン範囲(^、~、比較演算子、||、ハイフン範囲)と候補バージョンを入力し、それぞれが範囲に含まれるかを判定するツールです。0.x系やプレリリースの扱い、範囲を展開した条件も確認でき、latestなどのタグやGit URLは範囲と区別して表示します。レジストリへの問い合わせは行わず、すべてブラウザ内で処理されます。
判定結果
バージョン範囲と候補バージョンを入力すると、範囲に含まれるかが表示されます。
使い方
- バージョン範囲(例: ^1.2.0)を入力します。展開した条件(>=1.2.0 <2.0.0-0 など)が表示されます。
- 判定したい候補バージョンを1行に1つ入力します。
- 候補ごとに「範囲に含まれる」「範囲外」「不正なバージョン」が表示されます。
- プレリリースを常に含めたい場合は、--include-prerelease 相当のチェックを入れます。
このツールについて
package.jsonの依存関係のバージョン指定によって、npm install や更新でどのバージョンが入りうるかが決まります。このツールでは、^1.2.0 に 1.9.0 や 2.0.0 が含まれるかといった判定を、npmと同じ semver ライブラリで確認できます。
^ は0以外の最も左の桁を固定するため、^0.2.3 は 0.2.x の範囲だけ、^0.0.3 は 0.0.3 だけを含みます。プレリリース(1.3.0-beta.1 など)は、範囲の条件に同じ major.minor.patch のプレリリースが書かれている場合だけ含まれます。
latest や next などのdist-tag、Git URL、ローカルパスは、指すバージョンがレジストリや外部の状態で決まるため、範囲として判定しません。入力した候補バージョンだけを判定し、レジストリへの問い合わせは行いません。
範囲に ~1.2.3、候補に1.2.9と1.3.0を1行ずつ入力すると、1.2.9は範囲内、1.3.0は範囲外になります。次に範囲を ^1.2.3 へ変えると1.3.0も含まれ、依存設定を変更した際に許容する更新範囲を比較できます。
候補一覧は利用者が与えるもので、公開済みバージョンを自動取得するものではありません。範囲内という結果も、その版の存在や動作互換性を保証しません。ネットワーク照会なしで条件を評価するため、実際の更新候補を貼り付けて確認してください。
よくある質問
^ と ~ の違いは何ですか?
^1.2.3 はメジャーバージョンが同じ範囲(>=1.2.3 <2.0.0)、~1.2.3 はマイナーバージョンまで同じ範囲(>=1.2.3 <1.3.0)を許可します。
1.10.0-beta.1 が ^1.2.0 の範囲外になるのはなぜですか?
npmでは、範囲の条件に同じバージョンのプレリリースが書かれていない限り、プレリリースは含まれません。含めたい場合はプレリリースを含めるオプションを有効にします。
latest を入力するとどうなりますか?
dist-tagとして表示し、範囲としては判定しません。タグが指すバージョンはレジストリの状態で決まるためです。