RevealTheme logo

UUIDジェネレーター

UUID v4(ランダムな汎用一意識別子)を生成します。クリックするたびに新しいものが生成されます。

このツールの使い方

  1. 1

    Click the Generate UUID button to produce a fresh random v4 UUID.

  2. 2

    Read the 36-character identifier shown in the canonical 8-4-4-4-12 format below the button.

  3. 3

    Click Copy to put the UUID on your clipboard for pasting into code, a database, or a config file.

  4. 4

    Click Generate UUID again whenever you need another one — every click replaces the value with a brand-new random UUID.

UUIDとは何か、そしてなぜソフトウェアはそれを使うのか?

UUID(Universally Unique Identifier、Microsoftの文脈ではGUIDと呼ばれることもあります)は、システム間の調整を必要とせずにエンティティを識別するために使われる128ビットの値です。UUIDの考え方は、互いを知らない2台の別々のマシン上で動作する2つの別々のプログラムが、それぞれUUIDを生成し、それらが決して衝突しないと確信を持って想定できる、というものです。この性質が分散システムの設計を可能にします。中央のカウンターなしに任意のサービスがローカルで識別子を発行できるようにしたり、行を振り直すことなくデータベースを統合したり、サーバーがリクエストを目にする前にクライアント側で識別子を事前生成したりできます。UUIDにはRFC 4122で定義された5つの正式なバージョンがあります。v1(時刻 + MACアドレスベースで、作成時刻とマシンのアイデンティティが漏れる)、v3(名前空間 + 名前のMD5ハッシュ)、v4(ランダム、最も一般的)、v5(名前空間 + 名前のSHA-1ハッシュ)です。RFC 9562ではv6(時刻順、v1のようだがMACが漏れない)とv7(Unixタイムスタンプ + ランダムで、時系列順に並ぶためデータベースの主キー向けに特別に設計されている)が追加されました。このツールはcrypto.randomUUID()を使ってUUID v4を生成します。これはブラウザの基盤となるオペレーティングシステムの暗号学的に堅牢なランダム性を利用しており、これはTLSの鍵が生成されるのと同じ供給源です。出力はPythonのuuid.uuid4()、Nodeのcrypto.randomUUID()、Goのgoogle/uuid.NewRandom()と1バイト単位で同一です。

よくある活用例

  • データベースの主キー:データベースを統合する必要があるときや、クライアント側で識別子を生成する必要があるときに、自動増分の整数を置き換えます。

  • クッキー内のセッション識別子:有効なセッションIDを総当たりで推測することが計算上現実的でないほど十分に長いものです。

  • APIリクエストのべき等性キー:リクエストを安全に再送できます。サーバーはUUIDで重複を排除します。

  • アップロードされたファイルの識別子:パスの衝突を避け、元の名前を露出させないために、アップロードされたファイルにUUIDで名前を付けます。

  • 分散トレーシングの識別子:各リクエストにUUIDが割り当てられ、ログを関連付けるためにサービス間を伝播します。

  • テストデータの識別子:ケース間で識別子を調整することなく、テストデータに対して予測可能なランダム性を得られます。

よくある質問

v4とは何を意味しますか?
バージョン4のことです。122ビットのランダム性に6ビットの固定されたバージョン/バリアントを加えて生成されます。その他のバージョン:v1はタイムスタンプ + MACベース(使わないでください。マシンのアイデンティティと時刻が漏れます)、v3/v5は名前空間 + 名前の決定論的ハッシュ(安定した派生識別子に便利)、v7はタイムスタンプを接頭辞に持つランダム(時系列順に並ぶためデータベースに最適)です。ほとんどのケースでは、v4が正しいデフォルトの選択肢です。
UUIDは実際にどれくらい一意なのですか?
UUID v4には実質122ビットのランダム性があり、5.3×10^36通りの値が可能です。衝突確率が50%に達するには、2.71×10^18個のUUIDを生成しなければなりません。文脈を示すと、毎秒10億個のUUIDを生成したとしても、その閾値に達するには85年かかります。優れた乱数生成器を使えば、現実的な衝突は起こりません。
データベースの主キーにはv4とv7のどちらを使うべきですか?
データベースにはv7の方が適しています。UUID v4はランダムなので、新しい行がB-treeインデックス全体にランダムに分散し、インデックスの肥大化と大規模での挿入の低速化を引き起こします。v7はタイムスタンプを前に付けるため、新しいUUIDは常に古いものより後ろに並び、シーケンシャルな挿入パターンを維持します。PostgreSQL、MySQL、SQL Serverはv7の恩恵を受けます。お使いのライブラリがまだv7に対応していない場合、ULIDが同じ性質を持つ人気の代替案です。
crypto.randomUUID()を使うのは安全ですか?
はい。これはWHATWGで仕様が定められており、オペレーティングシステムの暗号学的乱数生成器(TLSの鍵が生成されるのと同じ供給源)を通じてすべての最新ブラウザに実装されています。出力は予測不可能で、UUID v4の空間全体に一様に分布します。
UUIDとGUIDの違いは何ですか?
機能的には同一です。GUIDは同じ概念を指すMicrosoftの用語です。一部のMicrosoft APIではバイト形式が異なります(.NETのGuid.ToByteArray()は最初の3つのフィールドで混在したバイト順を使います)。そのため相互運用性が重要な場合は、バイト順に注意してください。正式な文字列形式(8-4-4-4-12)は同一です。
UUIDをURL用に短縮できますか?
はい。正式な16進数形式の代わりに、128ビットをBase62やBase64でエンコードします。Base62では22文字になります。Base64ではパディング付きで22文字、またはURLセーフな変種で22文字になります。一部のライブラリは「短縮UUID」形式も使います。基盤となるビットは変わりません。表示用のエンコーディングが異なるだけです。
なぜ私のUUIDは別のものと同じ文字で始まるのですか?
偶然です。UUID v4はランダムです。合計36個の16進数文字のうち、ランダムなのは22個の16進数文字だけ(4つはバージョン/バリアント用に予約され、4つはハイフン)なので、たくさん生成すると、ある程度の接頭辞の一致は避けられません。接頭辞が一致しても、UUID全体は一意です。

関連ツール