UUID v4の生成と衝突確率(Web API・DB主キー設計)

開発 バックエンド
結論:30秒でUUID v4を使う
  • 推奨生成コード: crypto.randomUUID() (Modern JS / Web API 標準)
  • 衝突率: 実質 0(毎秒10億個を100年作って確率50%)
  • DB主キー注意: 時系列ソートやB-Treeインデックス保持が必要なら ULID を検討

1. オンライン UUID v4 生成ツール

ワンクリックで RFC 4122 準拠の UUID v4 を生成し、クリップボードにコピーできます。

🆔 この場でUUIDを生成する

生成数
生成結果

2. JavaScript / Node.js での生成手順

Web Standard API の crypto.randomUUID() を使用するのが最も安全で最速です。

// ブラウザ(HTTPS/localhost)および Node.js 16.7.0+
const id = crypto.randomUUID();
console.log(id); 
// 出力例: "550e8400-e29b-41d4-a716-446655440000"

3. 衝突確率(Collision Probability)

UUID v4は128ビットのうち、バージョン表記等を除く122ビットが完全な乱数です。

  • 総組み合わせ数: $2^122 \approx 5.3 \times 10^36$ 通り
  • 衝突リスク: 毎秒10億個のUUIDを100年間生成し続けて、ようやく1個衝突する確率が約50%です。実質的に単一システム内で衝突を考慮する必要はありません。

4. UUID v4 vs ULID の選択基準

項目UUID v4ULID
フォーマット36文字 (16進数 + ハイフン)26文字 (Crockford Base32)
ソート完全ランダム (ソート不可)時系列順にソート可能 (先頭48bitがミリ秒タイムスタンプ)
DB主キー適性RDBのB-Treeインデックスが断片化しやすいインデックス順序が保たれ高速

5. 注意点(ハマりどころ)

  1. 非セキュア環境 (HTTP) での動作不可
    • crypto.randomUUID() は Secure Context 専用 API です。HTTP 環境のテストサーバーでは undefined エラーとなるため、HTTPS 化するかフォールバックライブラリ(uuid npm パッケージ)を用意してください。
  2. ログ検索・ソートの制限
    • ログの主キーやソートキーとして使う場合、生成順にソートできない点に注意が必要です。