SemVer規則でセマンティックバージョンを比較
2つのバージョンのどちらが本当に先かが分かります。数字の識別子は常に単語より下に並ぶため、1.0.0-alpha.1 は 1.0.0-alpha.beta より小さく、2.10.0 は正しく 2.9.0 より大きいと判定されます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 1つ目のバージョン
- 1.0.0-alpha.1
- 2つ目のバージョン
- 1.0.0-alpha.beta
- 比較
- less
- 優先順位
- -1
- 新しいほうのバージョン
- 1.0.0-alpha.beta
文字列順、浮動小数点への変換、パッケージマネージャー固有の簡略規則に頼らず、2つのセマンティックバージョン番号を比較できます。両方の入力をSemantic Versioning 2.0.0に照らして検証し、メジャー、マイナー、パッチ、プレリリースの各要素に公式の優先順位規則を適用します。第1バージョンが第2バージョンより低いか、高いか、同じ優先順位かを返し、ビルドメタデータは正しく比較対象から除外します。不正または不完全な文字列には、誤解を招く順序ではなく明確な入力エラーを返します。
実際のソフトウェアリリースに沿った規則で比較します
通常の文字列比較では、多くのバージョン番号について誤った結果になります。たとえば辞書順では、文字の1と9を比較するため、2.10.0が2.9.0より前に置かれる場合があります。一方、単純な数値変換では、メジャー、マイナー、パッチという各位置の独立した意味が失われます。
この比較機能は必須の各位置を個別に解析し、左から順番に比較します。また、パッチ要素の省略、先頭のv、数値のコア識別子に付いた先行ゼロなど、緩い形式は受け付けません。この厳格な検証により、デプロイスクリプト、パッケージレジストリ、更新サービス、CIチェックで、不正なデータが正規のリリースとして黙って通過することを防げます。
第1と第2のバージョンは公開された表記のまま送信してください。結果の符号付き優先順位は、-1なら第1が低く、0なら同等、1なら第1が高いことを示します。
プレリリースの順序とビルドメタデータを理解できます
単純な比較処理が特に誤りやすいのはプレリリース識別子です。プレリリース接尾辞を持つ版は、同じメジャー、マイナー、パッチで接尾辞のない版より優先順位が低いため、1.0.0-rc.1は1.0.0より低くなります。両方がプレリリースの場合、識別子を順番に比較します。
数値識別子は数値の大きさ、非数値識別子はASCIIの辞書順で比較し、数値識別子は常に非数値識別子より低くなります。共通部分がすべて一致する場合は、識別子がさらに続く版の方が高い優先順位になります。この規則により、特定の語に特別な意味を仮定せず、alphaからbeta、リリース候補への標準的な進行を再現できます。
プラス記号以降のビルドメタデータは検証されますが、優先順位には含まれません。そのため、文字列が異なる1.0.0+linuxと1.0.0+windowsも同等です。
厳格な比較を自動化で安全に利用できます
決定的な比較結果は、大きなシステムの中で小さく信頼できる判断点として機能します。リリースパイプラインでは、提案された版がデプロイ済みの版より高いことを必須にできます。アップデーターでは、取得したマニフェストがアップグレード、ダウングレード、同等ビルドのどれを表すか判断できます。
テストスイートでは、標準的なプレリリース系列を網羅し、成果物の公開前に不正なタグを拒否できます。実装はネットワーク要求を行わず、時刻も乱数も使用しないため、同じ入力から常に同じ出力が得られます。数値識別子はJavaScriptの数値に変換せず、数字の文字列として比較します。
このため、有効な識別子が安全な整数範囲を超えても正しい順序を維持します。処理量を限定するため入力長には上限があります。
活用例
リリースパイプラインを保護します
公開前に、提案されたパッケージ版がデプロイ済みの版より高い優先順位であることを確認できます。
更新マニフェストを評価します
メタデータに影響されず、遠隔リリースがアップグレード、ダウングレード、同等ビルドのどれかを判定できます。
プレリリース系列を検証します
alpha、beta、候補版、正式版の順序を確認し、不正なSemantic Versioning文字列を拒否できます。
よくある質問
比較値は何を意味しますか?
優先順位が-1なら第1バージョンが低く、0なら両者が同等、1なら第1バージョンが高いことを示します。
ビルドメタデータは結果に影響しますか?
いいえ。 メタデータは検証されますが、Semantic Versioningでは優先順位比較の対象外です。
プレリリースは対応する正式版より低くなりますか?
はい。 メジャー、マイナー、パッチが同じ場合、プレリリース識別子を持つ版は正式版より低くなります。
先行ゼロは使用できますか?
数値のメジャー、マイナー、パッチ、プレリリース識別子には、数字の0単独を除いて先行ゼロを使用できません。
先頭にvを付けたりパッチ番号を省略したりできますか?
いいえ。 入力は1.2.3や1.2.3-rc.1のような厳密なSemantic Versioning 2.0.0文字列である必要があります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev2/semver-compare \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first_version":"2.1.0-rc.1","second_version":"2.1.0"}'const res = await fetch("https://api.kit.forhosting.com/dev2/semver-compare", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first_version": "2.1.0-rc.1",
"second_version": "2.1.0"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/semver-compare",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first_version": "2.1.0-rc.1",
"second_version": "2.1.0"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/semver-compare", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first_version":"2.1.0-rc.1","second_version":"2.1.0"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first_version":"2.1.0-rc.1","second_version":"2.1.0"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/semver-compare", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"first_version": "2.1.0-rc.1",
"second_version": "2.1.0"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.semver_compare",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_chars_per_version | 1024 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
実際のソフトウェアリリースに沿った規則で比較します
説明的な比較フィールドも返すため、画面表示やワークフロー条件にもそのままお使いいただけます。
プレリリースの順序とビルドメタデータを理解できます
同順位ではどちらも上位ではないため、greater_versionはnullになります。
厳格な比較を自動化で安全に利用できます
対話的な確認にはブラウザー実行機能を、反復可能な処理には$0.002のAPIをご利用ください。invalid_inputは大小関係ではなく、修正が必要なデータ品質エラーとして扱ってください。
技術的な質問
料金はいくらですか?
APIは1回の比較につき$0.002です。対話的な確認にはブラウザー実行機能をご利用いただけます。