UUID とは
UUID (Universally Unique Identifier) は RFC 4122 で定義された 128 bit の識別子で、16 進 8-4-4-4-12 形式で 32 文字表記。UUID v1 は時間ベース、v4 はランダムベースで実用上 v4 が最も普及しています。
v4 のランダム性
UUID v4 は 122 bit の強乱数で埋め、先頭 6 bit がバージョン/バリアント。例:
550e8400-e29b-41d4-a716-446655440000
1B 個/秒生成しても 50% 衝突は約 82 年後(数学的証明)。
Nano ID とは
Nano ID は Andrey Sitnik が 2017 年に作った ~130 B の軽量ライブラリ。UUID v4 より 4 倍短く、デフォルト文字は A-Za-z0-9_-。
推奨用途
- DB 主キー — BINARY(16) で省スペース化。
- 分散トレース — UUID v4 が OpenTelemetry 標準。
- API トークン/短リンク — Nano ID + HMAC 署名を推奨。
- ファイル名 — Nano ID は URL でそのまま使える。
性能
スループット: UUID v4 ≈ 1.3M/s、Nano ID ≈ 1.8M/s。バッチ生成 (>1000) では Nano ID がやや優位。
「生成」を押して 100 個のユニーク ID をミリ秒で取得する体験を試してみてください。
UUID v7 — 時系列順序
UUID v7 は RFC 9562(2024)で定義されています。最初の 6 バイトに 48 ビットの Unix ミリ秒タイムスタンプを配置し、残りは乱数です。ID が時系列順に生成されるため自然にソートでき、B-tree インデックスを持つデータベース主キーに最適です。新しい行はインデックスの「末尾」に追加され、v4 の「ホットページ問題」(分散書き込み)を回避します。本ツールは同一ミリ秒内でも単調カウンターで一括出力を厳密に増加させます。主要な環境でネイティブ対応:PostgreSQL 18 の uuidv7()、Python 3.13 の uuid.uuid7()、Go google/uuid の NewV7()、Node uuid v10。