UUIDとは

UUID(Universally Unique Identifier)とは、ソフトウェアで使われる128ビットの識別子です。「汎用一意識別子」とも呼ばれ、世界中のどのコンピューターで生成しても、実質的に重複しないことが保証されています。

UUIDは次のような形式で表現されます。

550e8400-e29b-41d4-a716-446655440000

32桁の16進数を5つのグループに分け、ハイフンで繋いだ計36文字の文字列です。

UUIDのバージョン

UUIDにはv1〜v5までのバージョンがあり、それぞれ生成方法が異なります。

  • v1:タイムスタンプとMACアドレスを組み合わせて生成。時系列に並べられるが、MACアドレスが露出するセキュリティ上の問題がある。
  • v4:ランダムな値で生成。最も広く使われており、予測不可能なため安全性が高い。
  • v5:名前空間とURLなどの文字列からSHA-1ハッシュを使って生成。同じ入力からは常に同じUUIDが得られる。

現代の開発では、シンプルで安全なUUID v4が最もよく使われます。

UUIDが使われる場面

UUIDは以下のような場面で活躍します。

  • データベースの主キー:連番(1, 2, 3...)の代わりにUUIDを主キーにすることで、複数DBのマージや分散システムでの衝突を防げます。
  • セッションID:ユーザーのログインセッションを管理するIDとして使用。予測不可能なため、セッションハイジャックのリスクを下げられます。
  • APIキー:外部サービスとの連携に使う認証キーの生成に利用されます。
  • ファイル名の衝突回避:複数ユーザーが同名ファイルをアップロードしても、UUIDをプレフィックスにすることで衝突を防げます。

UUID v4の衝突確率

UUID v4はランダムな128ビットの値(実際には122ビット)で構成されます。10億個のUUIDを毎秒生成し続けた場合でも、最初の重複が発生するまでに約85年かかると計算されています。実用上、衝突は「起こらない」と考えて問題ありません。

連番IDとUUIDの使い分け

連番IDは視認性が高くデバッグしやすい反面、レコード数が外部に推測されてしまいます。UUIDは予測不可能ですが、文字列が長くインデックス効率がやや低下します。

重要なリソース(ユーザー、注文など)にはUUID、内部的な補助テーブルには連番ID、というように使い分けるのが一般的です。