UUIDとは? 世界で重複しないIDの仕組み 基本ガイド

UUIDは、複数のシステムがそれぞれ別々にIDを発行しても、ほとんど重複が起きないように設計された長い英数字の文字列です。

見た目は32桁の16進数をハイフンで区切った形式

UUIDは通常、32桁の16進数をハイフンで5つのグループに区切って「123e4567-e89b-12d3-a456-426614174000」のように表記されます。これは128ビットの数値を、人が読みやすい形式にしたものです。

中央の管理者が不要

単一のデータベースが発行する連番のIDとは異なり、UUIDはどの端末やプログラムでも、中央の管理者に確認を取ることなく独立して生成できます。そのため、多数の機器が同時にレコードを作成する分散システムでよく使われています。

バージョン4:ランダムなUUID

最も広く使われているのがバージョン4で、128ビットのほぼすべてをランダムなデータで埋めます(バージョンとバリアントを示すために一部のビットは予約されています)。一意性は、構造ではなく単純に組み合わせの数の多さによって保たれています。

他の目的で使われるバージョンもある

バージョン1は、生成した機器のネットワーク識別子とタイムスタンプを組み込みます。バージョン3と5は、名前とネームスペースからハッシュを使って決定的にUUIDを生成するため、同じ入力からは常に同じUUIDが得られます。特定の理由がない限り、ツールやライブラリは通常バージョン4を標準として使用します。

「GUID」はほぼ呼び方の違い

GUID(Globally Unique Identifier)は、UUIDと基本的に同じ概念・形式を指す用語で、主にMicrosoft系のプラットフォームを通じて広まりました。実際には両者はほぼ同じ意味で使われています。

衝突がほぼ起こり得ないとされる理由

バージョン4のUUIDは約122ビット分のランダムな要素を持っており、取り得る値の数は膨大です。よく引き合いに出される例え話として、1秒間に何十億ものUUIDを生成し続けるシステムを何年も稼働させて初めて、偶然の重複が無視できないレベルの確率になる、というものがあります。実際のアプリケーションでは、これに近づくことすらまずありません。

UUIDは利便性と引き換えにサイズが大きい

UUIDは単純な連番の整数IDに比べてかなり長いため、データベースの保存容量やインデックスの効率という面では多少のコストがかかります。それでも多くのシステムがこのトレードオフを受け入れているのは、ID発行のたびにサービス間で調整を取る必要がなくなるためです。

よくある質問

UUIDはセッションIDのようなセキュリティトークンとして安全に使えますか?

適切に生成されたランダム(バージョン4)なUUIDは推測されにくいだけのエントロピーを持っていますが、暗号学的な秘密情報として設計されたものではありません。そのため、セキュリティ上重要な用途では、暗号学的に安全な専用の乱数生成関数から作られた識別子の方が好まれることが多いです。

UUIDから、それが紐づけられているデータを逆算できますか?

いいえ、ランダムなUUIDはそれが指すレコードについての情報を一切含んでいません。単なる一意のラベルであり、UUIDと実際のデータとの対応関係は、それを保存しているデータベースやシステム側にのみ存在します。