SemVer バージョン範囲テスター
開発ツール
読み込み中
ツールを読み込んでいます
ツールのコードは開いたときにのみ読み込まれます。
このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。
このツールについて
npm 形式のバージョン範囲と、1 行に 1 つのバージョンを入力して、手元の一覧を照合します。内蔵の node-semver 7.8.5 を loose: false で使用し、一致する有効な版、範囲外の有効な版、無効な入力を区別します。正規化した比較式のグループ、一致した版の昇順一覧、その一覧の最小・最大バージョンを確認できます。同じグループの比較式は AND、グループ間は OR です。プレリリーススイッチで includePrerelease を明示的に切り替えます。処理はブラウザー内で完結し、パッケージレジストリへの問い合わせやパッケージコードの実行は行いません。
主な用途
- 依存関係の宣言を編集する前に、既知のバージョン一覧で ^、~、ハイフン、ワイルドカード、比較演算子の範囲を比べる。
- 0.x やプレリリースが除外される理由を確認し、includePrerelease を切り替えて照合規則の違いを調べる。
- 形式が無効な入力を有効な不一致バージョンから分け、ビルドメタデータを新しい版とみなさず SemVer の優先順位を確認する。
使い方
- 1.^0.2.3、~1.2.3、1.2.3 - 2.0.0、>=1.2.3 <2.0.0 などの範囲を入力します。代替条件は || でつなぎます。空の範囲はワイルドカード * と同じです。
- 2.完全なバージョンを 1 行ずつ貼り付け、プレリリースを含めるか選びます。前後の空白は除去し、空白行はスキップします。各バージョンには major.minor.patch が必要です。
- 3.チェックを実行し、各行の状態、正規化したグループ、一致一覧を確認し、必要なら JSON レポートをコピーまたはダウンロードします。範囲・一覧・プレリリース設定を変更すると結果は消去されます。最小・最大は入力内で一致した版だけから選びます。
npm SemVer の具体例
1.0.0 より前のキャレット範囲
{
"range": "^0.2.3",
"versions": "0.2.3\n0.2.9\n0.3.0\n0.2.4-beta.1",
"includePrerelease": false
}{
"matches": [
"0.2.3",
"0.2.9"
],
"unmatched": [
"0.3.0",
"0.2.4-beta.1"
],
"invalid": [],
"minimum": "0.2.3",
"maximum": "0.2.9"
}^0.2.3 は 0.3.0-0 より小さいリリースを許可します。0.2.4-beta.1 の数値部分が安定版の境界内でも、既定のプレリリース条件で除外されます。最大値が 0.2.9 なのは、入力の一致項目で最も大きい版だからです。
同じ数値の組だけプレリリースを許可
{
"range": ">=1.2.3-beta.2 <1.3.0",
"versions": "1.2.3-beta.4\n1.2.4-beta.1\n1.2.3",
"includePrerelease": false
}{
"matches": [
"1.2.3-beta.4",
"1.2.3"
],
"unmatched": [
"1.2.4-beta.1"
],
"invalid": [],
"minimum": "1.2.3-beta.4",
"maximum": "1.2.3"
}範囲に 1.2.3 のプレリリースを明記しているため、1.2.3-beta.4 は一致できます。includePrerelease が false なら、別の組である 1.2.4-beta.1 は除外されます。安定版の 1.2.3 は、そのプレリリースの後に並びます。
プレリリースを含めても境界は有効
{
"range": "^1.2.3",
"versions": "1.2.3\n1.3.0-beta.1\n2.0.0-beta.1",
"includePrerelease": true
}{
"matches": [
"1.2.3",
"1.3.0-beta.1"
],
"unmatched": [
"2.0.0-beta.1"
],
"invalid": [],
"minimum": "1.2.3",
"maximum": "1.3.0-beta.1"
}includePrerelease が true なら 1.3.0-beta.1 は ^1.2.3 に一致します。ただし展開後も 2.0.0-0 より小さい必要があるため、2.0.0-beta.1 は不一致のままです。
ワイルドカード、無効な行、ビルド情報の安定順序
{
"range": "",
"versions": "1.2.3+build.2\n\n1.2.3+build.1\n1.2\n01.2.3\n=1.2.3\n v1.2.4 ",
"includePrerelease": false
}{
"matches": [
"1.2.3+build.2",
"1.2.3+build.1",
"1.2.4"
],
"unmatched": [],
"invalid": [
"1.2",
"01.2.3",
"=1.2.3"
],
"minimum": "1.2.3+build.2",
"maximum": "1.2.4"
}空の範囲は * と同じです。空白行はスキップし、前後の空白と許可される v 接頭辞は正規化で除去します。不完全な版、ゼロ埋め、= 付きのバージョン行は無効です。ビルド接尾辞は保持し、同順位は入力順を保つため build.2 が build.1 より先になります。
OR で 1 つの版を除外
{
"range": "<1.2.3 || >1.2.3",
"versions": "1.2.2\n1.2.3+build.7\n1.2.4",
"includePrerelease": false
}{
"matches": [
"1.2.2",
"1.2.4"
],
"unmatched": [
"1.2.3+build.7"
],
"invalid": [],
"minimum": "1.2.2",
"maximum": "1.2.4"
}非対応の != を使わず、2 グループで除外を表します。1.2.3+build.7 は 1.2.3 と同順位なので、これも除外します。出力は入力した版の要約であり、パッケージレジストリの検索結果ではありません。
よくある範囲テストの誤り
- 範囲演算子に != を使う:<1.2.3 || >1.2.3 のように 2 つの比較式グループで除外を表してください。
- 一覧にパッケージ名、latest などのタグ、カンマ区切りや不完全な版を貼り付ける:完全なバージョンを 1 行ずつ入力してください。
- プレリリースのハイフンを範囲と混同する:ハイフン範囲は 1.2.3 - 2.0.0 のように前後へ空白を置きます。
- includePrerelease がすべての境界を無視する、または ^ が 0.x と 1.x で同じだと思い込む:正規化した比較式を確認してください。
- 最大の一致入力をレジストリ検索結果、互換性保証、安全性の推奨と考える:このツールはそれらを確認しません。
制限と注意事項
- 固定した node-semver 7.8.5 を loose: false で使い、バージョンの自動補完は行いません。^、~、<、<=、>、>=、=、ハイフン範囲、x/X/*、|| に対応します。npm の厳密モードは SemVer 仕様だけの検証ではありません。バージョン行の先頭 v は許可されますが、先頭 = は範囲の比較演算子としてのみ許可され、バージョン行では無効です。範囲には部分バージョンを使えますが、一覧の各行には使えません。!= は非対応です。1.2.3 を除外する場合は <1.2.3 || >1.2.3 とします。
- includePrerelease が無効な場合、プレリリースが一致するには、該当グループ内に同じ major.minor.patch のプレリリースを指定した比較式が必要です。有効にするとこの既定の除外を解除しますが、範囲の境界は引き続き適用されます。すべてのプレリリースが一致するわけではなく、比較式の正規化結果が変わる場合もあります。
- 範囲の上限は 2,000 文字、32 個の || グループ、空白区切りの 128 トークンです。バージョン入力は 100,000 文字、空白行を含む 1,000 物理行までです。前後の空白を除いた各バージョンは 256 文字までとし、超過した行は無効になります。範囲が無効な場合や範囲・一覧全体の上限を超えた場合はチェックを中止し、部分的な一致結果は返しません。
- 並べ替えは SemVer の優先順位に従い、正規化した一致結果にビルドメタデータを保持します。重複や異なる +build 接尾辞など、優先順位が同じ項目は入力順を保ちます。最小・最大は入力内で一致した行だけから選び、レジストリの公開版や範囲の理論上の境界を示しません。一致行がなければ両方とも null です。
- ページと内蔵コードを読み込んだ後は、ブラウザー内でオフライン照合できます。パッケージレジストリ、インストール済みの依存ツリー、パッケージコードは参照・実行しません。一致しても API 互換性、依存解決、保守状況、安全性は保証されません。出力 JSON には入力範囲と前後の空白を除いたバージョン行が無効な行も含めて入るため、共有前に非公開情報を確認してください。コピーやダウンロード後のレポートはページでは管理できません。
よくある質問
^0.2.3 が 0.3.0 を拒否するのはなぜですか?
完全なキャレット範囲では、最も左にある非ゼロ要素より右の要素を変更できます。^0.2.3 は >=0.2.3 <0.3.0-0、^0.0.3 は >=0.0.3 <0.0.4-0 に展開されます。これは範囲の規則であり、許可された版の互換性を保証しません。
数値が十分大きいプレリリースも不一致になるのはなぜですか?
既定のプレリリース条件は、通常の数値比較とは別に適用されます。たとえば >=1.2.3-beta.2 <1.3.0 は 1.2.3-beta.4 を含みますが、includePrerelease が無効なら 1.2.4-beta.1 を除外します。スイッチで比較式の境界は無効にならないため、設定と正規化したグループを両方確認してください。
無効と不一致はどう違いますか?
無効な行は、この npm の厳密規則で完全なバージョンとして解析できないか、1 バージョンの長さ上限を超えています。不一致の行は有効なバージョンですが、範囲またはプレリリース規則を満たしません。たとえば 1.2 と 01.2.3 は一覧では無効です。2.0.0 は有効ですが ^1.2.3 には一致しません。
ビルドメタデータは順序や最小・最大に影響しますか?
影響しません。1.2.3+build.2 と 1.2.3+build.1 の優先順位は同じなので、両方を入力順に保持します。最小は並べ替え後の最初の一致行、最大は最後の一致行です。同順位での安定した入力順も含め、手元の一覧だけを表し、最初や最新の公開リリースは検索しません。