UUID 生成ツール

UUID v4 と時刻順の v7 をまとめて生成します。

このツールについて

ブラウザーの暗号論的に安全な乱数生成器を使って、ランダムな UUID v4 や時刻順の UUID v7 を 1 個から 100 個まで一度に生成します。

使い方

  1. 完全にランダムな ID なら v4、作成時刻順に並ぶ ID なら v7 を選びます。
  2. 必要な数を指定します(最大 100 個)。
  3. システムが必要とする場合は、大文字やハイフンなしを選びます。
  4. 1 つまたはすべてをコピーします。

よくある質問

UUID v4 と v7、どちらを使うべきですか?
v7 はタイムスタンプで始まるため、新しい ID は古い ID の後に並びます。これによりデータベースのインデックスがコンパクトで高速に保たれるため、主キーには v7 がよい選択です。作成時刻を見られたくない場合は v4 を使ってください。
2 つの UUID が衝突することはありますか?
実際にはありません。v4 UUID には 122 ビットのランダムな値があり、衝突の可能性が出てくるまでには、毎秒数十億個を何年も生成し続ける必要があります。
これらの UUID はトークンとして安全に使えますか?
ブラウザーの暗号論的に安全な乱数生成器で生成されますが、UUID は識別子であって秘密情報ではありません。セッショントークンや API キーには、より長いランダムな値を使ってください。
JavaScript、Python、シェルで UUID を生成するには?
ブラウザーと Node.js では、crypto.randomUUID() が v4 を返します。Python では uuid.uuid4() を、Python 3.14 以降なら uuid.uuid7() も使えます。macOS と Linux では uuidgen がランダムな UUID を出力します。macOS では大文字で出力されます。v7 の ID を手早く生成したい場合や、一度に最大 100 個まとめて生成したい場合は、このページを使ってください。
UUID v7 のキーは SQL Server で正しく並びますか?
デフォルトでは並びません。SQL Server の uniqueidentifier 型は最後の 6 バイトから先に比較するため、時刻順の UUID でもクラスター化インデックスの末尾には追加されません。SQL Server 独自の連番方式としては NEWSEQUENTIALID() があります。PostgreSQL や、BINARY(16) を使った MySQL はバイトを先頭から比較するため、v7 は正しく並びます。
nil UUID とは?
すべてがゼロの値 00000000-0000-0000-0000-000000000000 で、「ID なし」を表すプレースホルダーとして使われます。RFC 9562 では、すべての桁が f の Max UUID も定義されています。どちらもランダムではないため、実際の識別子として使わず、本物の ID が想定される場所では拒否してください。

UUID とは? 構造と仕組み

UUID は 128 ビットの識別子で、32 桁の 16 進数を 8-4-4-4-12 の 5 つのグループに分けて書きます。3 つ目のグループの最初の桁がバージョンなので、v4 の UUID では必ずそこが 4、v7 では 7 になります。4 つ目のグループの最初の桁は 8、9、a、b のいずれかで、標準のバリアントであることを示します。GUID は同じ形式に対する Microsoft の呼び名です。

UUID v7 では最初の 48 ビットがミリ秒単位の Unix 時間なので、先頭の 12 桁の 16 進数から作成日時がわかります。基数変換ツールで 10 進数に変換し、その結果を Unix タイムスタンプ変換ツールに貼り付けてください。残りの 74 ビットはランダムです。ここでは、同じミリ秒内に作られた ID 同士は順序付けされませんが、異なるミリ秒の ID は必ず時刻順に並びます。

データベースに UUID を保存する方法

ネイティブの型があればそれを使いましょう。PostgreSQL には uuid 型があり、16 バイトで、大文字と小文字のどちらも、ハイフンの有無にかかわらず受け付けます。gen_random_uuid() はデータベース内で v4 を生成し、PostgreSQL 18 では uuidv7() が追加されています。MySQL では、CHAR(36) ではなく、UUID_TO_BIN() と BIN_TO_UUID() を使って BINARY(16) で保存してください。CHAR(36) は 2 倍以上の容量を使い、すべてのインデックスが大きくなります。

標準のテキスト形式はハイフン付きの小文字で、RFC 9562 は読み取る側が大文字も受け付けるべきだとしています。大文字や、ハイフンなしの 32 桁を想定するシステムもあるため、ここではどちらのオプションも用意しています。どちらにしても値は同じです。コードやログで UUID を文字列として比較するときは、先に大文字・小文字を統一してください。そうしないと、Windows のツールから取得した GUID が、小文字で書かれた同じ ID と一致しません。

UUID と自動採番 ID の違い

自動採番の整数は小さく、高速で、読みやすいものの、データベースが割り当てるため、挿入するまで ID がわかりません。また、行数が推測できてしまい、URL の中の隣接するレコードを誰でも推測できます。UUID はブラウザー内、複数のサーバー上、オフラインなど、どこででも生成でき、後で衝突なしにマージできます。

代償はサイズです。すべてのインデックスと外部キーで、4 バイトや 8 バイトではなく 16 バイトを使います。UUID v7 では新しい値がインデックスの末尾に追加されるため、ランダムなキーの主なパフォーマンス上の問題が解消されます。ULID も似た考え方で、タイムスタンプの後にランダムなビットが続く 26 文字のテキスト形式ですが、UUID v7 には標準の形式があり、多くのデータベースにネイティブの列型があります。

うまく動かない、または結果がおかしいですか? このツールの問題を報告