ルーズなバージョン文字列を有効なSemVerに変換

v2.1、3、1.2.3.4のようなルーズなバージョン文字列を有効なsemverに変換します。変換ルールと自動変換が安全な場合を解説。

Validation

詳細な説明

ルーズなバージョン文字列の変換

実世界のバージョン文字列は混沌としています。アプリケーション、API、レガシーシステムは有効なSemVerではないフォーマットを使用することが多いです。変換(coercion)は、これらのルーズな文字列から有効なsemverを抽出するプロセスです。

よくあるルーズなフォーマット

ルーズな文字列 変換後のSemVer 適用ルール
v2.1.0 2.1.0 "v"プレフィックスを除去
2.1 2.1.0 欠けているPATCHを0として追加
3 3.0.0 欠けているMINORとPATCHを追加
1.2.3.4 1.2.3 余分なコンポーネントを削除

変換が安全な場合

変換がうまく機能する場合:

  • バージョンの表示: ユーザー表示のためにGitタグ(v1.2.3)を変換
  • 混在フォーマットのソート: 異なるソースからのバージョンリストを正規化
  • ルーズな入力フィールド: SemVerに「十分近い」ユーザー入力を受け入れる

変換が危険な場合

変換を避けるべき場合:

  • パッケージの公開: パッケージレジストリには常に厳密なSemVerを要求
  • 等価比較: 1.21.2.0に変換しても作者の意図と異なる可能性
  • 4部構成バージョン: 1.2.3.4は.NETアセンブリバージョンで4番目が重要な場合がある

npmのアプローチ

npmのsemver.coerce()関数は、文字列内の最初の数値出現をスキャンし、そこからバージョンを構築しようとします。これは散文やファイル名に埋め込まれたバージョン文字列を処理するため意図的に積極的です。

ユースケース

Gitタグ、Dockerイメージタグ、APIヘッダー、厳密なSemVerに準拠しないユーザー提供文字列など、異種ソースからの入力を受け入れるバージョンパーサーを構築する場合。

試してみる — Semver Calculator

フルツールを開く