本記事ではPythonでUUIDを生成する方法を解説します。具体的にはuuidモジュールの使い方を解説します。
uuidモジュールの基本的な使い方
uuidモジュールはその名の通りuuidを扱うための機能を提供します。Pythonの標準ライブラリであるためすぐにimportして使えます。
以下のように簡単にUUIDを生成できます。(UUIDオブジェクトが作成される。)
import uuid
# ランダムなUUIDを生成(UUID4を使用)
guid = uuid.uuid4()
print(guid) # 例: 6fa459ea-ee8a-3ca4-894e-db77e160355e
print(type(guid)) # <class 'uuid.UUID'>
UUIDのバージョン
uuidモジュールでは、いくつかのUUIDのバージョンを作成できます。
バージョン | 説明 |
---|---|
UUID1 | 現在の時間とMACアドレスを基に生成 |
UUID3 | 名前空間(DNSなど)とMD5ハッシュを基に生成 |
UUID4 | ランダム値を基に生成 |
UUID5 | 名前空間(DNSなど)とSHA-1ハッシュを基に生成 |
例:
print(uuid.uuid1()) # UUID1
print(uuid.uuid3(uuid.NAMESPACE_DNS, 'example.com')) # UUID3
print(uuid.uuid4()) # UUID4
print(uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com')) # UUID5
どれを使うべきか
UUIDのバージョンは用途に応じて使い分ける必要があります。
- UUID1: MACアドレスと現在のタイムスタンプを基に生成されるため、
- メリット: 高い一意性を保証
- デメリット: MACアドレスが埋め込まれるため、プライバシーの懸念がある
- 用途: 一意性が求められるが、外部からの識別が不要なシステム
- UUID3 / UUID5: 名前空間とハッシュ関数(MD5 / SHA-1)を用いる
- メリット: 同じ入力値から常に同じUUIDを生成
- デメリット: ハッシュ化されるためランダム性がない
- 用途: 例えば、ドメインやユーザーIDから一貫したUUIDを作成したい場合
- UUID4: 完全にランダムな値から生成される
- メリット: 衝突の可能性が低く、プライバシーも確保
- デメリット: 乱数生成のため、一定の計算コストがかかる
- 用途: ほとんどの一般的な用途に適しており、推奨される
結論として、 ランダム性が求められるならUUID4、決まった入力から同じUUIDを生成したいならUUID5(またはUUID3) を使うのがベストです。UUID1はコンピュータのネットワークアドレスを含む UUID を生成するため、使用の際はプライバシーリスクがあることに注意してください。
UUIDを文字列として扱う
UUIDはデフォルトでは uuid.UUID 型のオブジェクトとして生成されますが、str() を使うことで文字列として扱えます。
import uuid
uuid_obj = uuid.uuid4()
print(uuid_obj) # UUIDオブジェクト(例: 6fa459ea-ee8a-3ca4-894e-db77e160355e)
print(str(uuid_obj)) # 文字列として出力
データベースに保存する場合や、APIレスポンスで扱う場合は、通常この str(uuid_obj) を使用します。
まとめ
- uuidモジュールを使えば簡単にUUID(GUID)を生成できる
- UUIDにはいくつかのバージョンがあり、用途に応じて選ぶ必要がある
- 一般的な用途ではuuid.uuid4()が推奨される
- UUIDはstr()で文字列化でき、比較や変換も容易
Pythonで一意の識別子を生成する際には、UUIDを活用しましょう!