v1からv8までのすべてのUUIDバージョン——構造図、ユースケース、衝突リスク、JavaScriptコード例付き。
構造
timestamp (60-bit) + clock seq (14-bit) + MAC (48-bit)
衝突リスク
Very low
利点
欠点
最適な用途
Legacy systems. Avoid in new projects due to MAC address exposure.
構造
MD5(namespace UUID + name) → UUID
衝突リスク
MD5 collision risk (low for UUIDs)
利点
欠点
最適な用途
Generating UUIDs from URLs, email addresses, or other stable identifiers. Use v5 instead.
構造
122 random bits + 4-bit version + 2-bit variant
衝突リスク
Negligible (2^122 possibilities)
利点
欠点
最適な用途
Default choice for most applications. IDs for records, sessions, tokens.
構造
SHA-1(namespace UUID + name) → UUID (top 128 bits)
衝突リスク
SHA-1 — extremely low for UUID purposes
利点
欠点
最適な用途
Deterministic IDs from a namespace + name. Example: UUID for 'https://example.com' is always the same.
構造
Unix ms timestamp (48-bit) + version (4-bit) + random (74-bit)
衝突リスク
Very low (74 random bits)
利点
欠点
最適な用途
Database primary keys where sort order matters. Replaces v1 for time-ordered UUIDs.
構造
128 bits, content defined by the implementation
衝突リスク
Depends on implementation
利点
欠点
最適な用途
Experimental or vendor-specific use cases where v1–v7 don't fit.
| Version | Method | Sortable | Privacy-safe | Deterministic |
|---|---|---|---|---|
| v1 | Time + MAC | ✅ | ❌ (MAC leak) | ❌ |
| v3 | MD5 hash | ❌ | ✅ | ✅ |
| v4 | Random | ❌ | ✅ | ❌ |
| v5 | SHA-1 hash | ❌ | ✅ | ✅ |
| v7 | Time + Random | ✅ | ✅ | ❌ |
| v8 | Custom | — | — | — |
// JavaScript / Node.js (built-in, Node 15+)
import { randomUUID } from 'crypto';
const v4 = randomUUID(); // → "550e8400-e29b-41d4-a716-446655440000"
// Browser
const v4 = crypto.randomUUID();
// UUID v7 (npm: uuid package v10+)
import { v7 as uuidv7 } from 'uuid';
const v7 = uuidv7(); // → "018f0b2d-4c9e-7abc-89de-f012345678ab"
// Python
import uuid
v4 = str(uuid.uuid4()) # Random
v5 = str(uuid.uuid5(uuid.NAMESPACE_URL, 'https://example.com'))
# PostgreSQL
SELECT gen_random_uuid(); -- v4 (pg 13+)
SELECT uuid_generate_v4(); -- v4 (uuid-ossp extension)
SELECT gen_random_uuid()::text; -- as textUUID(Universally Unique Identifier)はRFC 4122で標準化された128ビット識別子です。ハイフンで区切られた8-4-4-4-12の16進文字としてフォーマットされます。中央機関なしに時間と空間を越えて一意になるよう設計されています。
一般的な目的にはv4を使用してください——ランダムに生成され、衝突確率が非常に低いです。データベースの主キーに時刻順UUIDが必要な場合はv7を使用してください。namespace+nameペアから決定論的UUIDが必要な場合はv5を使用してください。v1は新しいプロジェクトでは避けてください(MACアドレスが露出します)。
UUID v4は純粋にランダム(122ランダムビット)です。UUID v7は最初の48ビットにUnixタイムスタンプをエンコードし、その後にランダムビットが続きます。これによりv7 UUIDは作成時刻でソート可能になり、データベースのB-treeインデックスパフォーマンスが大幅に向上します。
実用的にはYes。UUID v4は122ランダムビットを持ち、2^122≈5.3×10^36の可能な値があります。50%の衝突確率を持つには約2.7×10^18個のUUIDを生成する必要があります。