UUID ジェネレーターについて
この無料の UUID ジェネレーターは、ランダムなバージョン 4 の UUID(GUID とも呼ばれます)を生成します。UUID は、データベース、API、ログファイル、分散システムで使われる汎用一意識別子です。1 個だけでもまとめて大量でも生成でき、クリックひとつでコピーできます。
UUID は、暗号鍵にも使われる暗号学的に安全な乱数源である crypto.getRandomValues を用いて、お使いのブラウザー内で生成されます。サーバーには何も要求しないため、ここに表示される UUID はどこにも存在したことがありません。
UUID とは
UUID は 128 ビットの数値で、32 桁の 16 進数をハイフンで区切った 5 つのグループとして表記されます。
f47ac10b-58cc-4372-a567-0e02b2c3d479
区切り方は 8-4-4-4-12 で、ハイフンを含めた全体の長さは常に 36 文字です。
その目的は、誰にも問い合わせずに一意の ID を生成することです。データベースは次に何が来るかを決める唯一の権威なので、1, 2, 3… と割り当てられます。しかし、2 台のスマートフォンがオフラインでレコードを作成している場合、12 台のサーバーが同時に行を挿入している場合、あるいは行が存在する*前*に ID が必要な場合には、問い合わせるべき権威が存在しません。UUID は、衝突を考える必要がないほど巨大でランダムであることによって、この問題を解決します。
バージョン 4 と、それを示す 2 つの桁
UUID にはいくつかのバージョンがあります。バージョン 4 がランダムなもので、ほとんどの人が「UUID」と言うときに指しているのはこれです。
バージョンは文字列から直接読み取れます。f47ac10b-58cc-4372-a567-0e02b2c3d479 の場合は次のとおりです。
- 3 番目のグループの最初の桁がバージョンです。ここでは 4 です
- 4 番目のグループの最初の桁がバリアントです。常に 8、9、a、b のいずれかです
この 2 か所は固定されているため、実際のランダム性は 128 ビットではなく 122 ビットになります。
出会う可能性のある他のバージョン: v1 はタイムスタンプとマシンの MAC アドレスを符号化するため、並べ替えは可能ですが、どこでいつ作られたかが漏れます。2024 年に標準化された v7 が現代的な答えです。先頭にタイムスタンプ、その後にランダム性を置くため、ハードウェアの詳細を漏らさずに ID が作成時刻順に並びます。今から選ぶのであれば、そしてデータベースでの並び順が重要であれば、v7 を知っておく価値があります。
本当に一意なのか
保証されてはいませんが、数字が桁外れなので気にする必要はありません。
122 ビットのランダム性は、約 5.3 × 10³⁶ 通りの値を生みます。1 回の衝突が起こる確率が 50% に達するには、およそ 2.7 × 10¹⁸ 個、つまり 270 京個の UUID を生成する必要があります。
具体的に言えば、毎秒 10 億個の UUID を生成し続けた場合、集合全体のどこかで 1 件の重複が生じる確率が 50% に達するまで約 85 年かかります。現実のどのアプリケーションでも、このリスクはストレージが値を静かに破損させるリスクより小さいものです。
唯一の本当の注意点は乱数の品質です。弱い乱数源から生まれた UUID は、数学が約束するような一意性を持ちません。予測可能な生成器が重複を生み出した実際の不具合も存在します。このツールは Math.random() ではなく、ブラウザーの暗号用乱数生成器を使用しています。
UUID は秘密情報ではありません
両方向で誤用されるため、はっきり述べておく価値があります。
v4 UUID は予測不可能なので、推測できない URL — 共有リンクやパスワード再設定用トークン — として使うのは妥当です。しかし、セキュリティの基本要素として設計されたものではなく、有効期限も持たず、ログに記録され、キャッシュされ、分析ツールに入り、チャットに貼り付けられることが頻繁にあります。たまたま推測しにくい識別子として扱い、資格情報としては扱わないでください。
そして逆もまた然りです。UUID が何かを隠していると思い込まないでください。v1 UUID には、タイムスタンプと MAC アドレスがそのまま含まれています。どこかから引き継いだ ID がバージョン 1 で始まっているなら、それを読む人すべてに、いつどこで作られたかを伝えていることになります。
どこで使うか
- データベースの主キー — 特に複数のマシンで同時に行が作成される場合
- オフラインファーストのアプリ — 接続がなくてもスマートフォンでレコードを作成し、後から採番し直さずに同期できます
- API リクエスト ID — ログの中で、1 つのリクエストを多数のサービスにわたって追跡します
- ファイル名やアップロード名 — ユーザーのファイル名を信用せずに衝突を避けられます
- メッセージの重複排除 — 再送されたリクエストが二重に処理されないようにする冪等性キーとして
- 共有リンク — ドキュメントや招待用の、推測できない URL
- テストデータ — 実データと決して衝突しない一意の値
使い方
- 必要な個数を選びます
- 生成します — 新しい UUID が表示されます
- コピーします — 1 個ずつでも、リスト全体でもコピーできます
知っておくとよいこと
- 大文字か小文字かは問題になりませんが、小文字が慣例であり、このツールもそれを生成します。一部のシステムは UUID を単なる文字列として比較するため、そこでは A と a は別物です。表記を統一してください。
- ハイフンは書式上のものです。 多くのシステムは 32 桁をハイフンなしで、あるいは 16 バイトの生データとして保存します。値は同じで、見せ方が違うだけです。
- データベースのキーとしては相応のコストがあります。 UUID は整数の 4 バイトや 8 バイトに対して 16 バイトあり、ランダムな値は書き込みを末尾に追加するのではなく B ツリーインデックス全体に散らばらせます。大きく書き込みの多いテーブルでは、これは測定できるほどの差になります。まさにこれが v7 の解決しようとした問題です。
- パスワードとして使わないでください。 予測はできませんが、これは識別子であり、ログやブラウザーの履歴に残ります。
- 「GUID」は同じものに対する Microsoft の呼び名です。 .NET や SQL Server では GUID と表記されますが、同じ 128 ビットの値です。
- nil UUID はすべてがゼロです — 00000000-0000-0000-0000-000000000000。通常は「なし」または「未設定」を意味するので、見分けられるようにしておくと役立ちます。
よくある質問
UUID とは何で、何のためのものですか?
UUID は 36 文字で表記される 128 ビットの識別子で、たとえば f47ac10b-58cc-4372-a567-0e02b2c3d479 のようになります。その目的は、中央のカウンターに問い合わせることなく、どんなものでも自力で一意の ID を生成できるようにすることです。これは、複数のサーバーで同時にレコードが作られるとき、オフラインのスマートフォン上で作られるとき、あるいはデータベースに行が存在するより前に ID が必要なときに重要になります。
UUID は一意であることが保証されていますか?
いいえ。ただし衝突する確率は無視できるほど小さいものです。バージョン 4 の UUID は 122 ビットのランダム性を持ち、およそ 5.3 × 10³⁶ 通りの可能性があります。1 件の重複が生じる確率が 50% に達するには、約 270 京個を生成する必要があります。毎秒 10 億個のペースでも、これはおよそ 85 年に相当します。
UUID と GUID の違いは何ですか?
実務上は違いはありません。GUID は同じ 128 ビット識別子に対する Microsoft の呼び名で、.NET や SQL Server の随所で目にします。唯一の細かな点として、一部の Microsoft 製ツールは {f47ac10b-...} のように GUID を波かっこで囲んで表示し、古い一部の API は生のバイナリへ変換する際に一部のバイト順を入れ替えます。
どの UUID バージョンを使うべきですか?
一般的な用途にはバージョン 4 を使ってください。完全にランダムで、どこでいつ作られたかを一切明かしません。これらの ID をデータベースの主キーにするのであれば、バージョン 7 を検討してください。先頭にタイムスタンプを置くため、値が作成時刻順に並び、インデックスの効率がはるかに良くなります。公開されるものにはバージョン 1 を避けてください。MAC アドレスとタイムスタンプが埋め込まれているためです。
UUID をセキュリティトークンとして使えますか?
推測できないリンクとしてなら許容できます。v4 UUID は現実的には予測できないからです。ただし、それは資格情報ではなく識別子です。期限切れになることはなく、単体で失効させることもできず、サーバーのログ、分析ツール、ブラウザーの履歴に残りがちです。本格的な認証には、有効期限を備えた専用のトークンを使ってください。
これらの UUID は御社のサーバーで生成されているのですか?
いいえ。あらゆる最新ブラウザーに組み込まれた暗号学的に安全な生成器である crypto.getRandomValues によって、お使いのブラウザー内で作られます。リクエストは送信されず、何も記録されないため、接続を切った状態でも生成できます。
関連ツール
- パスワードジェネレーター — 同じ安全な乱数源を、識別子ではなく秘密情報のために
- ハッシュジェネレーター — データの指紋をとるための MD5、SHA-1、SHA-256
- 乱数ジェネレーター — 指定した範囲のランダムな数値
- タイムスタンプ変換ツール — v1 や v7 の UUID に含まれるタイムスタンプを読み取る