UUID 生成ツールの使い方
- 汎用の ID なら「v4 ランダム」、データベースの主キーなら「v7 時系列」を選びます。
- 「個数」を 1〜100 で指定すると、自動で生成し直します。
- 必要に応じて「大文字」「ハイフンなし」をオンにします。ID は作り直さず表記だけを変えます。
- 「すべてコピー」または「.txt をダウンロード」で保存します。UUID を調べたいときは「UUID を解析」欄に貼り付けます。
UUID とは
UUID(Universally Unique Identifier)は、中央で管理しなくても世界中で重複しない ID を作るための 128 ビットの識別子で、RFC 9562 で定められています。919108f7-52d1-4320-9bac-f847db4148a8 のように 16 進数 32 桁を 8-4-4-4-12 の 5 つに区切って表記し、3 つ目のブロックの先頭の数字がバージョンを表します。
Microsoft の製品では GUID と呼ばれますが中身は同じです。Windows や .NET、SQL Server では {3F2504E0-4F89-41D3-9A0C-0305E82C3301} のように大文字で波かっこ付きで表示されることが多く、このツールの解析欄はその形式や urn:uuid: 付きの形式もそのまま読み取れます。
v4 と v7 の使い分け
v4 は 122 ビットがすべて乱数で、いつどこで作られたかの情報を含みません。API キーやセッション ID、ファイル名など、利用者の目に触れる ID に向いています。
v7 は 2024 年の RFC 9562 で追加された形式で、先頭 48 ビットにミリ秒単位の Unix 時刻が入ります。新しい ID ほど後ろに並ぶため、PostgreSQL や MySQL の主キーに使うとインデックスの末尾に追加される形になり、v4 より挿入が速く断片化も起きにくくなります。ただし、UUID から生成時刻が読み取れる点には注意してください。
UUID が重複する確率
v4 は 122 ビットの乱数なので、重複する確率が 50% に達するには約 2.7 × 10 の 18 乗個(270 京個)を生成する必要があります。1 秒に 10 億個作り続けても約 86 年かかる計算で、実用上は重複しないと考えて問題ありません。実際の重複は、乱数生成器の不具合や ID のコピーミスが原因です。
このページはブラウザの crypto.randomUUID() と crypto.getRandomValues()(暗号論的に安全な乱数)を使い、すべて端末内で生成しています。
プログラムで UUID を生成するには
JavaScript は crypto.randomUUID()、Python は uuid.uuid4()(Python 3.14 以降は uuid.uuid7() も可)、Java は UUID.randomUUID()、C# は Guid.NewGuid()(.NET 9 以降は Guid.CreateVersion7())、PostgreSQL は gen_random_uuid()(PostgreSQL 18 以降は uuidv7())で生成できます。macOS や Linux では uuidgen コマンドでも作れます。
よくある質問
UUID と GUID の違いは何ですか?
同じものです。GUID は Microsoft での呼び方で、表記が大文字だったり波かっこで囲まれていたりするだけです。「大文字」をオンにすると GUID でよく使われる表記になります。
生成した UUID が他と重複することはありませんか?
実用上はありません。v4 は暗号論的に安全な乱数を 122 ビット使っているため、重複の確率は無視できるほど小さくなっています。
データベースの主キーには v4 と v7 のどちらがいいですか?
v7 がおすすめです。v4 はランダムなためインデックスのあちこちに挿入されて性能が落ちやすいのに対し、v7 は時刻順に並ぶので連番に近い性能で使えます。
UUID から作成日時はわかりますか?
時刻を含むバージョン(v1・v6・v7)ならわかります。解析欄に貼り付けると、端末のタイムゾーン(日本なら日本時間)で表示します。v4 には時刻の情報は含まれていません。
UUID をパスワード再設定用のトークンに使っても安全ですか?
安全な乱数で作った v4 なら推測は困難ですが、v7 は一部が予測可能な時刻なので向いていません。秘密の値には専用のランダムトークンを使うのが確実です。
生成した UUID はどこかに保存されますか?
いいえ。ブラウザ内で生成され、サーバーに送信されることはありません。端末に保存されるのは表示形式などの設定だけです。
最終更新: ソースコードを見る