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 v4 | ULID |
|---|---|---|
| フォーマット | 36文字 (16進数 + ハイフン) | 26文字 (Crockford Base32) |
| ソート | 完全ランダム (ソート不可) | 時系列順にソート可能 (先頭48bitがミリ秒タイムスタンプ) |
| DB主キー適性 | RDBのB-Treeインデックスが断片化しやすい | インデックス順序が保たれ高速 |
5. 注意点(ハマりどころ)
- 非セキュア環境 (HTTP) での動作不可
crypto.randomUUID()は Secure Context 専用 API です。HTTP 環境のテストサーバーではundefinedエラーとなるため、HTTPS 化するかフォールバックライブラリ(uuidnpm パッケージ)を用意してください。
- ログ検索・ソートの制限
- ログの主キーやソートキーとして使う場合、生成順にソートできない点に注意が必要です。