UUID生成ツール(v4)

ブラウザ内で暗号論的乱数を使い、v4形式のランダムなUUIDを1個または複数個生成 — サーバーへは何も送信されません。

1,054回閲覧

v4 UUIDを一意にしているもの

UUID(汎用一意識別子)は128ビットの数値で、慣例的に16進数で8-4-4-4-12桁に分けた36文字として、例えばf47ac10b-58cc-4372-a567-0e02b2c3d479のように表記されます。この128ビットのうち、このツールが生成するバージョン4では、122ビットが暗号論的に安全な乱数生成器からの出力で埋められます。残りの6ビットはまったくランダムではありません: UUIDをバージョン4として識別し、その「バリアント」を示す固定マーカーであり、これが2番目のハイフンの直後の文字が常に4であり、次のグループの最初の文字が常に89abのいずれかである理由です。

122ビットのランダム性は途方もなく広大な空間です: 2^122通り、約5.3×10³⁶の可能な値があります。具体的にイメージすると、地球上のすべてのデバイスが継続して毎秒10億個のUUIDを生成し続けたとしても、たった1回の偶発的な重複が起きる確率が50%に達するまでに、合計で数百億年規模の生成時間がかかることになります。だからこそ、分散システム — 互いに調整を行わない数百台の独立したサーバー上で動作するサービス群 — は、中央のレジストリを確認することなく、それぞれが自分自身でUUIDを発行し、2つが決して衝突しないと信頼できるのです。これがこのフォーマットの存在意義そのものです: データベースへの問い合わせなしに一意の識別を行うことです。

ここでの生成は、すべてブラウザ内でWeb Crypto APIのcrypto.randomUUID()関数を使って行われます — ブラウザがセキュリティに関わる処理で使用しているのと同じ暗号論的な乱数源です。サーバーには何も送信されず、シードも記録されず、生成する各UUIDは他のすべてから独立しています。

UUIDを使う前に知っておくべきこと

v4だけがバージョンではありません。v1とv6はタイムスタンプと生成元マシンのネットワークアドレスを埋め込んでおり、そのため並べ替え可能になる一方で、いつどこで作成されたかという情報も漏らしてしまいます。v5は指定した名前をハッシュ化し、同じ入力に対して常に同じUUIDを生成します — ランダムなものではなく決定的な識別子が必要なときに便利です。より新しい規格であるv7は、タイムスタンプの接頭辞とランダムなビットを組み合わせ、一意性と自然な時系列順序の両方を提供します。単にランダムで推測不可能、衝突のない識別子が必要で、時刻や名前をエンコードする必要がない場合は、v4が引き続き正しい既定の選択肢です。

実用上の注意点が1つあります: v4の値は完全にランダムであるため、これをデータベースの主キーとして使うと、B-treeインデックスを持つテーブルの挿入性能を損なう可能性があります。新しい行がインデックスの片端に整然と追加されるのではなく、予測不能な位置に入るためです。大規模な環境で挿入スループットが重要な場合、UUIDv7やULIDのような時系列順の代替形式であれば、同じ128ビットの一意性保証を保ちながらインデックスに優しい構造を維持できます。

よくある質問

生成した2つのUUIDが衝突することはありますか?

理論上はあり得ますが、実際にはほぼ起こりません: 2^122通りの可能性があるため、毎秒10億個のUUIDを85年間生成し続けても、たった1回の衝突が起きる確率は約50%にとどまります。世界中のシステムがこの性質に依存しています。

UUIDをデータベースの主キーとして使うべきですか?

分散環境での生成や推測不可能なIDには強みがありますが、ランダムなv4はB-treeインデックスを断片化させます。挿入性能が重要な場合は、時系列順のUUIDv7やULIDを検討してください — サイズは同じでインデックスに優しい形式です。

v4以外のバージョンもありますか?

あります — v1/v6はタイムスタンプとMACアドレスを埋め込み、v5は名前をハッシュ化して常に同じ結果を生成し、v7はタイムスタンプとランダム性を組み合わせたより新しい形式です。単にランダムで一意なIDが必要な場合は、v4が既定の選択肢です。

v4 UUIDの固定ビットは何のためにありますか?

128ビットのうち、ランダムなのは122ビットだけです。残りの6ビットはフォーマット自体を示すために予約されています — 1つのニブルは「バージョン4」を示すために固定され、もう1つは「バリアント」を示すために小さな値の集合(8、9、a、b)に制限されます。だからこそ、いくつ生成しても、すべてのv4 UUIDには2番目のハイフンの直後に4が入ります。

パスワードリセットリンクのようなセキュリティトークンとしてUUIDを使えますか?

v4 UUIDは暗号論的に安全な乱数源から生成されるため、推測することは現実的ではありません — しかしこれは秘匿性ではなく一意性のために設計されたものです。セキュリティに関わる用途では、UUID単体に頼るのではなく、適切な有効期限、使い捨て運用、サーバー側の検証と組み合わせてください。

コメント

まだコメントはありません — 最初のコメントを書いてみましょう!

関連ツール