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、というように使い分けるのが一般的です。