tomai
ログイン

UUID 解説:v1、v4、v7 と使い分け

UUID は 128-bit のラベルであり、32 桁の16進数を 8、4、4、4、12 の5グループで表記する。中央機関に問い合わせることなく誰でもどこでも発行できるよう設計されており、互いに通信しないシステム間でレコード、ファイル、セッション、API key を識別する。

1. v1:時刻とマシン

v1 はタイムスタンプとノード識別子を埋め込む。ノード識別子は通常ネットワークカードに由来する。ID は作成時刻順にほぼソートされるためデータベースとの相性は良いが、生成時刻と場所が漏れる。プライバシー上の匂いが、多くの新規システムを v1 から遠ざけた。

2. v4:純粋な乱数

v4 は 128 bit のうち 122 bit を暗号学的乱数源から埋め、4 bit をバージョン表示に固定する。衝突確率は馬鹿げているほど小さい。1秒に10億個を100年間生成し続けても、1件の重複が起きる確率はハードウェア故障率を大幅に下回る。ただしランダム性がデータベースのインデックスを散らすため、巨大テーブルの挿入は遅くなる。

3. v7:現代のデフォルト

v7 は先頭にミリ秒タイムスタンプを置き、残りを乱数で埋める。マシン身元を漏らさず時刻順の ID を得られる。ソート可能でインデックスに優しい識別子が必要な新規プロジェクトは v7 を選ぶべきである。our UUID generator は古典的な v4 と並行して v7 を生成する。

4. UUID を使うべきでない場合

人間が目にする短いコード、請求書番号、手入力するものはカウンタやコンパクトな符号化が適する。UUID は長く、発音できず、転記ミスを誘う。UUID を秘密情報として使ってはならない。一意であることと推測不能であることは別であり、v1 と v7 はタイムスタンプを含み、v4 は乱数だがログや URL に露出していることが多い。