UUID v1 v4 v7 の違いと選び方
UUID の主要バージョン v1(時刻+MAC)、v4(ランダム)、v7(時刻順ソート可能)の特徴と、どれをいつ使うべきかを実装視点で解説します。
公開 · 更新 · yuzlrin
主要バージョンの性質
・v1 (1988): 時刻 + ノード(MAC アドレス)。ノードを漏らすリスクあり。
・v3 (1998): 名前ベース MD5 ハッシュ。名前空間 + 名前が同じなら同 UUID。
・v4 (2005): 完全ランダム 122 bit。衝突確率は実質ゼロ。汎用。
・v5 (2005): 名前ベース SHA-1 ハッシュ。v3 の改良版。
・v7 (2024): 48 bit Unix time + 74 bit ランダム。時刻順ソート可、DB インデックスに最適。
DB インデックスでの v4 vs v7
PostgreSQL / MySQL の B-Tree インデックスは insert 順が連続的だとページ分割が少なく高速。v4 はランダムなので INSERT が散乱し、v7 は時刻プレフィックスで昇順に近く INSERT 効率が上がります。
特に大量レコードを INSERT するテーブル(ログ、トランザクション)で v7 は体感できるほど速くなります。
セキュリティ上の注意
v1 は MAC アドレスを含むので「誰がいつ発行したか」がバレます。公開 API の識別子には不適切。
v7 は時刻を露出するため「作成時刻が推測される」問題があります。ユーザー ID など推測不可性が必要なケースでは v4 を選ぶか、v7 を HMAC で暗号化します。
関連ツール
よくある質問
UUID の衝突確率は?
v4 は 122 bit ランダム。誕生日パラドックスで 50% の衝突が起きるのは約 2.71 × 10^18 個生成した時。地球上の全人類が 1 秒ごとに発行しても数百年は衝突しません。
ULID との違いは?
ULID は 48 bit 時刻 + 80 bit ランダムで 26 文字の Crockford's Base32。UUID v7 と思想はほぼ同じですが文字長が短く URL-safe、人間可読性が高いです。新規採用なら v7 or ULID が定番。
短縮 UUID は使っていい?
URL で見栄え優先なら Base62 / Base64url に短縮可。ただし短縮後の衝突耐性を必ず計算すること。8 桁 Base62 は 2.18 × 10^14 通りで、数億レコードの一意性は確保できません。