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バッチレコードに一意の識別子を割り当てる際に広く使われています。