PythonでUUIDを生成する方法

Pythonの標準ライブラリuuidモジュールによるUUID生成方法を解説。uuid4()、uuid1()、uuid5()、uuid3()、Python 3.14の新機能uuid7()をコード例付きで紹介します。

Usage

詳細な説明

Pythonの標準ライブラリには包括的な uuid モジュールが含まれており、サードパーティの依存関係なしに主要なUUIDバージョンすべてをサポートしています。

UUID v4(ランダム):

import uuid

id = uuid.uuid4()
print(id)            # e.g., 7c2d9e8a-3f4b-4a1c-9d5e-6f7a8b9c0d1e
print(id.hex)        # 7c2d9e8a3f4b4a1c9d5e6f7a8b9c0d1e (no hyphens)
print(id.bytes)      # b'|-.\x8a?K....' (16 bytes)
print(id.int)        # Integer representation
print(id.version)    # 4

UUID v1(タイムスタンプ + MAC):

id = uuid.uuid1()
print(id.time)       # 100-ns intervals since 1582-10-15
print(id.node)       # MAC address as integer

UUID v3とv5(名前ベース):

# v5 (SHA-1, recommended)
id = uuid.uuid5(uuid.NAMESPACE_DNS, "example.com")
# cfbff0d1-9375-5685-968c-48ce8b15ae17

# v3 (MD5, legacy)
id = uuid.uuid3(uuid.NAMESPACE_DNS, "example.com")
# 9073926b-929f-31c2-abc9-fad77ae3e8eb

# Available namespaces:
# uuid.NAMESPACE_DNS, uuid.NAMESPACE_URL,
# uuid.NAMESPACE_OID, uuid.NAMESPACE_X500

UUID v7(Python 3.14以降): Python 3.14(2025年10月リリース予定)から、uuid モジュールにネイティブのUUID v7サポートが含まれます:

id = uuid.uuid7()  # Time-ordered, database-friendly

それ以前のバージョンのPythonでは、PyPIの uuid7 または uuid-utils パッケージを使用してください:

# pip install uuid-utils
from uuid_utils import uuid7
id = uuid7()

UUIDの操作:

# Parse from string
id = uuid.UUID('550e8400-e29b-41d4-a716-446655440000')

# Compare UUIDs
uuid.uuid4() == uuid.uuid4()  # False (virtually always)

# Sort UUIDs (works correctly for v7)
ids = [uuid.uuid4() for _ in range(5)]
ids.sort()  # Sorts by internal integer value

# Convert to/from bytes (for database storage)
raw = id.bytes           # 16 bytes
restored = uuid.UUID(bytes=raw)

# Nil UUID
nil = uuid.UUID(int=0)

Django連携:

from django.db import models

class MyModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    # Note: pass uuid.uuid4 (the function), not uuid.uuid4() (a value)

SQLAlchemy連携:

from sqlalchemy import Column
from sqlalchemy.dialects.postgresql import UUID
import uuid

class User(Base):
    __tablename__ = 'users'
    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)

パフォーマンス: Pythonの uuid.uuid4() は最新のハードウェアで毎秒約50万個のUUIDを生成します。より高いスループットが必要な場合は、Rustで書かれた uuid-utils パッケージが2〜5倍高速な生成を実現します。

ユースケース

PythonでのUUID生成は、DjangoやFastAPIのWebアプリケーションで主キーを作成する際や、データエンジニアリングパイプラインでETLバッチレコードに一意の識別子を割り当てる際に広く使われています。

試してみる — UUID Generator

フルツールを開く