UUID(Universally Unique Identifier)は、分散システム・データベース・APIで一意なIDを生成するための標準的な手段です。中央集権的な調整なしに、グローバルな一意性が設計によって保証されています。

今すぐUUIDを生成 →

UUIDとは

UUIDは128ビットの数値で、通常はハイフンで区切られた5グループの16進数として表現されます:

550e8400-e29b-41d4-a716-446655440000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
  • M — バージョン番号(1、3、4、または5)
  • N — バリアントビット(8、9、a、またはb)

標準フォーマットは8-4-4-4-12:ハイフンを含む36文字、16進数32文字。

UUIDのバージョン

バージョン生成方法用途
v1タイムスタンプ + MACアドレス時刻順ソート可能だがMACアドレスが漏洩する可能性
v3名前空間 + 名前(MD5)決定論的 — 同じ入力は常に同じUUIDを生成
v4ランダム最も一般的 — 純粋にランダムで情報漏洩なし
v5名前空間 + 名前(SHA-1)v3より安全な決定論的ID

圧倒的多数のユースケースではv4が正しい選択です。

UUID v4の衝突確率

毎秒10億個のUUIDを生成し続けた場合、1つの衝突が50%の確率で発生するまでに約85年かかります。実用上、UUIDは無限に一意と言えます。

オンラインでUUIDを生成

ZeroTool UUID ジェネレーター →

  • 単発または一括生成
  • ワンクリックコピー
  • ブラウザ上で完全動作 — サーバーには何も送信されない

コードでUUIDを生成する

JavaScript(Node.js 18+)

import { randomUUID } from 'crypto';

const id = randomUUID();
// 'f47ac10b-58cc-4372-a567-0e02b2c3d479'

Node.js 14.17+ではcrypto.randomUUID()としても利用可能です。

JavaScript(ブラウザ)

const id = crypto.randomUUID();
// すべてのモダンブラウザで対応(Chrome 92+、Firefox 95+、Safari 15.4+)

uuidライブラリを使う(レガシーサポート)

npm install uuid
import { v4 as uuidv4 } from 'uuid';

const id = uuidv4();

Python

import uuid

# v4(ランダム)
id = uuid.uuid4()
print(str(id))  # 'f47ac10b-58cc-4372-a567-0e02b2c3d479'

# v5(名前空間ベース、決定論的)
id = uuid.uuid5(uuid.NAMESPACE_URL, 'https://zerotool.dev')

Go

import "github.com/google/uuid"

id := uuid.New()
fmt.Println(id.String())

SQL(PostgreSQL)

-- UUIDを生成
SELECT gen_random_uuid();

-- UUIDを主キーとして使用
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name TEXT NOT NULL
);

UUIDをデータベースの主キーとして使う

メリット

  • グローバルな一意性 — 複数のサービスやデータベースをまたいで衝突しない
  • 中央シーケンス不要 — データベースに書き込む前にクライアント側でIDを生成できる
  • 情報漏洩なし — 自動インクリメントIDと違い、行数を推測されない

デメリット

  • インデックスの断片化 — ランダムなUUIDはB木の断片化を引き起こし、連番整数より挿入が遅くなる
  • ストレージサイズ — 整数の4〜8バイトに対して16バイト
  • 自然な順序なし — v4 UUIDには時刻ベースのソート順がない

解決策:UUID v7(ドラフト)

UUID v7は上位ビットにタイムスタンプを配置し、一意性と単調増加の順序を兼ね備えます。データベースの主キーに最適で、すでに対応しているライブラリもあります:

// Node.js
import { v7 as uuidv7 } from 'uuid';
const id = uuidv7();
// '017f22e2-79b0-7cc3-98c4-dc0c0c07398f'
// 先頭セグメントはミリ秒精度のタイムスタンプ — 自然にソート可能

フォーマットの変種

標準:          550e8400-e29b-41d4-a716-446655440000
ハイフンなし:  550e8400e29b41d4a716446655440000
大文字:        550E8400-E29B-41D4-A716-446655440000
URN:           urn:uuid:550e8400-e29b-41d4-a716-446655440000

データベースに保存する場合、VARCHARよりもネイティブのUUID型(PostgreSQL、MySQL 8.0+)を推奨します。ストレージを節約し、比較が高速になります。

UUIDの検証

// JavaScript
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
UUID_REGEX.test('550e8400-e29b-41d4-a716-446655440000'); // true
# Python
import uuid

def is_valid_uuid(val):
    try:
        uuid.UUID(str(val))
        return True
    except ValueError:
        return False

まとめ

目的推奨アプローチ
素早く生成ZeroTool UUID ジェネレーター
ブラウザ / Node.jscrypto.randomUUID()
Pythonuuid.uuid4()
DB主キー(順序付き)UUID v7 または ULID
決定論的IDUUID v5

UUID v4は圧倒的多数のユースケースで機能します。データベースフレンドリーな順序付きIDが必要な場合は、UUID v7またはULIDを検討してください。

ZeroTool UUID ジェネレーターで今すぐ生成 →