概要
- UUID v4の重複発生という極めて稀な現象
- npmパッケージ「uuid」を利用した純粋なUUID生成
- 15,000件中1件の衝突という統計的にほぼ不可能な事象
- 原因の推測と一般的な再現性の有無
- 対策や今後の注意点
UUID v4重複の事例とその不可解さ
- UUID v4 は理論上、 重複の確率が極めて低い 識別子生成手法
- 利用している npmパッケージ「uuid」 は広く使われる標準的実装
- 15,000件程度のデータベース で1件のUUID重複が発生
- 生成方法は import { v4 as uuidv4 } from "uuid"; const document_id = uuidv4(); のシンプルな呼び出し
- UUIDの手動編集や加工は一切なし
UUID v4の重複確率と理論
- UUID v4は 128ビット(約3.4×10^38通り) のランダム値
- 15,000件程度での衝突確率 はほぼゼロ(誤差レベル)
- 「誕生日のパラドックス」でも 10億件超で初めて現実的な衝突確率
- 理論上、 この規模での衝突は「ありえない」 とされる
可能性のある原因
- バグや実装ミス (パッケージ側、依存モジュール、乱数生成器の不具合)
- 環境依存の問題 (OSレベルの乱数ソース不具合、仮想化・コンテナ環境のエントロピー不足)
- キャッシュやプロセス間の状態共有 によるUUIDの再利用
- 運用・デプロイ時の何らかの副作用 (例:UUID生成をラップしている自作コードのバグ)
- npmパッケージのバージョン不整合 や古いバージョン利用
実際に同様の事例はあるのか
- 世界的にも極めて稀な報告
- GitHub issueやStack Overflowでも ほぼ前例なし
- 一部、 乱数ソースの初期化失敗 や Dockerコンテナの複製 で似た現象の報告あり
- npm「uuid」パッケージのissue で過去に乱数生成関連のバグ報告が存在
今後の対応・確認事項
- uuidパッケージのバージョン確認 と最新版へのアップデート
- 乱数ソースのエントロピー や システム依存性 の確認
- UUID生成直後に重複チェック を一時的に導入
- 同一タイムスタンプ/プロセス/初期化条件 での再現テスト
- 同様の事象が継続する場合は、OSやNode.jsの乱数生成器の不具合も疑う
まとめ・今後の注意点
- UUID v4の重複は理論上ほぼ不可能 だが、現実には「絶対」は存在しない
- 乱数生成の信頼性 や パッケージの健全性 を常に監視
- 再発時はシステム全体の乱数初期化や依存環境の見直し が必要
- 万一の衝突検出ロジック を設けることで、予期せぬ事態への備えが可能