UUID生成
UUID生成ツールは、ブラウザーの暗号APIを使い、ランダムなv4、時刻順に並べやすいv7、グレゴリオ暦に基づく時刻を含むv1をまとめて作成します。既存のUUIDのバージョン、バリアント、埋め込まれた時刻も調べられます。識別子はサーバーに送信されません。
UUIDとは? v1・v4・v7の違い
UUID(汎用一意識別子、GUIDとも呼ばれます)は、中央の発行機関を使わずに分散システムのデータを識別できる128ビットの値です。一般的な文字列表記は32桁の16進数字と4つのハイフンで構成されます。
長年使われてきたRFC 4122は、2024年5月にRFC 9562へ更新されました。新しい規格には、先頭に時刻を置くv7なども含まれます。
128ビットUUIDの構造
標準的な表記では32桁の16進数字を8-4-4-4-12の5組に分けます。ハイフンを含めて36文字です。1桁がバージョンを、2ビットがバリアントを示します。
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
time_low time_mid time_hi clock_seq node
M = 4ビットのバージョン(1、4、7)
N = RFC 4122 / RFC 9562のバリアント(8、9、a、b)
UUID v4:暗号学的乱数
v4では4ビットをバージョン、2ビットをバリアントに使い、122ビットが乱数になります。可能な値は2¹²² ≈ 5.3 × 10³⁶通りです。ブラウザーの暗号学的乱数源から値を取得します。
n個のUUIDで少なくとも1回衝突する確率の近似値は p ≈ 1 − exp(−n² / (2 × 2¹²²)) です。通常の規模では極めて低い一方、無作為な主キーはデータベースの索引効率に影響することがあります。
UUID v7とデータベース索引(RFC 9562)
B-tree索引では、新しいv4キーがさまざまなページに挿入されます。索引がメモリーに収まりきらないと、ランダムな読み取りやページ分割が増える可能性があります。時刻で並ぶキーなら、連続した挿入を近いページに配置しやすくなります。
v7の先頭48ビットはUnix時刻のミリ秒値です。残りの可変ビットには、実装に応じて乱数やカウンターを使えます。中央の採番サービスなしで、概ね生成時刻順に並べられます。
- 48ビット:Unixエポックからのミリ秒。西暦10889年まで表現できます。
- 12ビットのrand_a:乱数、ミリ秒未満の時刻、または同一ミリ秒内の順序を決めるカウンター。
- 62ビットのrand_b:追加の乱数または連番。具体的な方式は生成器によります。
UUID v1:従来の時刻ベース方式
v1は1582年10月15日からの100ナノ秒単位の経過時間を記録します。従来は末尾48ビットに機器のMACアドレスを含む場合がありました。このツールではランダムなノード識別子を使います。
時刻フィールドの配置上、v1の文字列はバイトを並べ替えないと時系列に整列しません。新しい設計で時刻順が必要な場合、v7ならこの配置を避けられ、MACアドレスも不要です。
- フィールド順:下位の時刻ビットを含むtime_lowが文字列の先頭にあります。
- プライバシー:古い実装では実際のMACアドレスを含み、機器の情報が漏れる可能性がありました。
使えるキーボードショートカット
よくある質問
データベースの主キーにv4よりv7が向くのはなぜですか?
v4は挿入先が索引全体に散らばります。v7は時刻から始まるためキーが概ね順に並び、ページ分割を抑えられる場合があります。同じミリ秒内の順序は実装によります。
v4が衝突する確率は?
乱数は122ビットで、n個について p ≈ 1 − exp(−n² / (2 × 2¹²²)) です。衝突確率がおよそ10億分の1になるには、103兆個を超える値が必要です。
サーバーに接続せずに生成できるのはなぜですか?
ブラウザーのcrypto.randomUUIDとcrypto.getRandomValuesがOSの暗号学的乱数源を利用します。生成と検査はローカルで行われ、ツールはUUIDを送信しません。
v1はどの時刻を記録し、なぜ置き換えられたのですか?
1582年10月15日から100ナノ秒単位で数えます。古い方式はMACアドレスを含む場合があり、文字列も時刻順に並びません。v7はUnixミリ秒と可変の乱数ビットを使います。
テストデータ用に大量生成できますか?
はい。1回で最大5,000件生成できます。大文字、ハイフン、引用符、波括弧、改行・カンマ・JSON配列などの出力形式を選べます。
UUIDをセキュリティートークンに使えますか?
v4には122ビットの乱数がありますが、UUIDはURLやログに残ることがあります。セッションやパスワード再設定には、サーバーが発行して失効できるトークンを使ってください。v1とv7は生成時刻も示します。