PythonでUUIDを生成する方法を解説

Python

本記事では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を活用しましょう!

タイトルとURLをコピーしました