UUIDとは
UUID(Universally Unique Identifier)は、550e8400-e29b-41d4-a716-446655440000 のような128ビット(16進数32桁)の識別子です。中央で番号を管理しなくても、世界中で重複しない ID を各自で作れるのが特徴です。Microsoft の環境では GUID とも呼ばれますが、同じものです。
v4 と v7 の違い
| バージョン | 中身 | 向いている用途 |
|---|---|---|
| v4 | 122ビットがランダム | 推測されたくない ID、一般的な用途 |
| v7 | 先頭48ビットがミリ秒単位の時刻+ランダム | データベースの主キー(作成順に並ぶ) |
| v1 | 時刻+MACアドレス | 古いシステム(MACアドレスが漏れるため非推奨) |
v4 は完全にランダムなため、データベースの主キーにするとインデックスの書き込み位置がばらつき、挿入性能が落ちることがあります。v7 は生成時刻の順に並ぶため、この問題を避けられます。v7 は2024年に RFC 9562 で標準化されました。
重複する可能性は?
v4 のランダム部分は122ビットあり、組み合わせは約5.3×1036通りです。1秒間に10億個を約85年間作り続けて、ようやく1組でも重複する確率が50%になる計算です。実用上は重複を心配する必要はありません。
各言語での生成方法
| 言語・環境 | コード |
|---|---|
| JavaScript | crypto.randomUUID() |
| Python | str(uuid.uuid4()) |
| Java | UUID.randomUUID() |
| PostgreSQL | gen_random_uuid() |
| MySQL | UUID()(v1) |
| Linux / macOS | uuidgen |
よくある質問
UUIDはパスワードやトークンに使えますか?
v4 は推測が困難ですが、用途によっては専用のトークン生成を使うべきです。v1 や v7 は時刻が含まれ一部を推測できるため、秘密の値には使わないでください。
大文字と小文字はどちらが正しいですか?
規格上は小文字で出力し、比較するときは大文字・小文字を区別しないことになっています。Windows のレジストリなど、大文字で表記される環境もあります。
v7 の UUID から作成日時がわかりますか?
わかります。上の「UUIDを判定する」に v7(または v1・v6)の UUID を貼り付けると、埋め込まれた生成日時を表示します。