約2分で読めます
UUIDとは?v4の仕組み・一意性・使いどころ・ULIDとの違い
UUIDとは
UUID(Universally Unique Identifier)は、世界中で重複しないことを目的とした128ビットの識別子です。550e8400-e29b-41d4-a716-446655440000 のように、ハイフンで区切られた32桁の16進数で表されます。
連番のID(1, 2, 3…)と違い、中央のサーバーに問い合わせなくても、各端末が勝手に生成しても重複しないのが最大の特徴です。
バージョンの種類
UUIDにはいくつかのバージョンがあります。
| バージョン | 生成方法 | 特徴 |
|---|---|---|
| v1 | 時刻+MACアドレス | 生成時刻が分かる |
| v4 | 乱数 | 最も広く使われる |
| v7 | 時刻+乱数 | 時系列ソート可能(新しい) |
最も一般的なのはv4で、ほぼすべてがランダムに決まります。
v4の仕組みと一意性
v4 UUIDは128ビットのうち、バージョンとバリアントを示す数ビットを除いた約122ビットがランダムです。これは取りうる値が約5.3×10の36乗通りという天文学的な数です。
そのため、毎秒10億個のUUIDを100年間生成し続けても、衝突する確率は無視できるほど小さく、実用上「重複しない」と扱えます。実際にUUID生成ツールで何度も生成しても、同じ値が出ることはまずありません。
使いどころ
- データベースの主キー — サーバーに採番を頼らず、クライアント側でID発行できる
- 分散システム — 複数サーバーが同時にレコードを作っても衝突しない
- ファイル名・トークン — 推測されにくい一意な名前が必要なとき
一方で、連番に比べてインデックスの効率が落ちやすい、見た目が長いといった欠点もあります。
ULIDとの違い
UUID v4は完全ランダムなため、IDの順序が作成順とは無関係です。これがデータベースのインデックスでは不利になることがあります。
そこで登場したのがULIDです。ULIDは先頭にミリ秒精度のタイムスタンプを含むため、生成順におおよそソートされ、文字列としても26桁で扱いやすくなっています。時系列順が重要ならULIDやUUID v7、純粋なランダム性が欲しければv4、と使い分けるとよいでしょう。
まとめ
- UUIDは128ビットの世界で一意な識別子
- v4は約122ビットの乱数で、実用上衝突しない
- 分散システムやクライアント側採番に向く
- 作成順ソートが欲しいならULIDやv7を検討
- UUID生成ツールで手軽に生成できる