UUID 生成ツール — v4、v7、ULID、NanoID、デコーダー付き

UUID v4 や時系列順の v7、ULID、NanoID を一括生成。ID を貼り付ければ、バージョンと埋め込まれたタイムスタンプも確認できます。

ID を検証・デコード

UUID バージョン 7(Unix 時刻順)

正規表記017f22e2-79b0-7cc3-98c4-dc0c0c07398f
バージョン7 — Unix 時刻順
バリアントRFC 9562 / RFC 4122
rand_a (12 bits)cc3
タイムスタンプ2022-02-22T19:22:22.000Z
Unix ミリ秒 1645557742000

ID は crypto.getRandomValues を使ってブラウザ内で生成されます。送信・保存されるものは何もありません。 すべての無料ツールを見る.

不具合や改善できそうな点を見つけましたか?いただいたメッセージはすべて読み、すぐに対応します。

この UUID 生成ツールは、ランダムなバージョン 4 の UUID、RFC 9562 で定義された時系列順のバージョン 7 の UUID、ULID、NanoID を、1 つずつ、または最大 10,000 個まとめて生成し、コピーやダウンロードができます。ランダムなビットはすべて、Math.random ではなく、ブラウザの暗号論的乱数生成器である crypto.getRandomValues から得ています。下のデコーダーは任意の UUID、GUID、ULID を受け取り、バージョンとバリアント、そして v1、v6、v7、ULID なら作成された時刻を表示します。

1 回の一括生成で作ったバージョン 7 と ULID は、何千個が同じミリ秒を共有していても厳密に増加していくので、データベースのキーにふさわしく作成順に並びます。バージョン 1 は提供していません。ブラウザは MAC アドレスや永続的なクロックシーケンスにアクセスできないので、Web ページで作った v1 UUID は形式を真似るだけになってしまうからです。v1 や名前ベースの v3/v5 の UUID が必要なら、お使いの言語の UUID ライブラリで生成してください。

使い方

  1. 種類を選びます。汎用のランダムな ID なら v4、データベースの主キーなら v7、スタックで使っているなら ULID や NanoID です。
  2. 必要な個数(最大 10,000)を設定し、「生成」を押します(または個数の欄で Enter)。
  3. 形式を選びます。大文字、ハイフンなし、または Windows レジストリや .NET 向けの波かっこ付きです。
  4. すべてをコピーするか、1 行に 1 つの ID のテキストファイル、または JSON 配列としてダウンロードします。
  5. 既存の ID を調べるには、デコーダーに貼り付けて、バージョン、バリアント、含まれているタイムスタンプを確認します。

よくある質問

UUID v4 と v7 の違いは何ですか?

v4 の UUID は構造のない 122 ビットのランダムな値です。v7 の UUID は先頭にミリ秒単位の 48 ビットの Unix タイムスタンプを置き、その後に 74 ビットのランダムなビットが続くので、v7 の値は作成時刻順に並びます。この順序のおかげで、v7 はデータベースの主キーとしてずっと扱いやすくなります。新しい行がインデックスのランダムな位置ではなく末尾に入るので、ページ分割が減り、挿入が速く保たれます。その代わり、v7 の ID は作成された時刻を明かしてしまいます。

2 つの UUID が同じになることはありますか?

良い乱数源から生成していれば、理論上はありえても実際にはありません。122 ビットのランダムなビットでは、1 回の衝突が起こる確率が 50% に達するまでに約 270 京(2.7 × 10^18)個の v4 UUID を生成する必要があります。実際の重複はバグから生まれます。弱い乱数生成器やシードの不適切な乱数生成器、コピーされた仮想マシンの状態、値を使い回すコードなどです。

GUID は UUID と同じものですか?

はい。GUID は同じ 128 ビットの識別子に対する Microsoft の呼び名で、現在の GUID は標準的な UUID(通常はバージョン 4)です。違いは表記だけで、Windows のツールでは GUID を {3F2504E0-4F89-41D3-9A0C-0305E82C3301} のように大文字で波かっこに囲んで表示することがよくあります。その形に合わせるには、大文字と波かっこのオプションを使ってください。

UUID v7 と ULID のどちらを使うべきですか?

どちらも 128 ビットで時系列順に並び、ミリ秒単位のタイムスタンプを持っています。UUID v7 は、PostgreSQL の uuid 型や Java の UUID クラスなど、UUID の列や型がすでにある場所ならどこにでも収まります。ULID はテキストとしては短く(36 文字ではなく 26 文字)、大文字・小文字を区別しませんが、専用のライブラリが必要で、テキストかバイナリとして保存します。データベースと言語がすでに UUID に対応しているなら、v7 のほうがシンプルな選択です。

NanoID はどのくらいの長さにすべきですか?

デフォルトの 64 文字の URL セーフなアルファベットで 21 文字なら 126 ビットのランダム性があり、UUID v4 の 122 ビットに匹敵します。ID の数が少なく、推測されても害がない場合(レート制限付きの短縮リンクなど)は、もっと短くてもかまいません。長さのスライダーの下に表示されるビット数で、何を手放しているかがわかります。64 種類の記号のアルファベットなら、1 文字ごとに 6 ビット増えます。

UUID がいつ作られたかわかりますか?

時刻ベースのバージョンだけです。ID をデコーダーに貼り付けてください。v7 と ULID は最初の 48 ビットに Unix ミリ秒を格納し、v1 と v6 は 1582 年 10 月 15 日からの 100 ナノ秒間隔の数を格納しています。v4 の UUID には時刻はまったく含まれず、ランダムなビットとバージョン・バリアントの印だけです。

UUID の読み方:バージョンとバリアント

UUID は 32 桁の 16 進数を 8-4-4-4-12 のグループに分けて書きます。2 つの位置で識別できます。3 つ目のグループの最初の桁がバージョンで、0190a3c4-1b2c-7d3e-8f40-0123456789ab なら 7 です。4 つ目のグループの最初の桁はバリアントを表し、8、9、a、b なら標準の RFC 9562 のレイアウトで、現在のほぼすべての UUID がこれを使っています。

• v1:グレゴリオ暦のタイムスタンプと、生成したマシンの MAC アドレス。両方が漏れるため、新しいシステムではほとんど使われません。

• v3 と v5:決定論的で、名前空間と名前から MD5(v3)または SHA-1(v5)で導出します。同じ入力からは常に同じ UUID になります。

• v4:ランダム。ほとんどのライブラリのデフォルトです。

• v6:並べ替えられるようタイムスタンプの順序を入れ替えた v1。v1 の利用者向けの移行手段です。

• v7:Unix ミリ秒のタイムスタンプとランダムなビット。新しいシステムに推奨される時系列順のバージョンです。

• v8:ベンダー定義のレイアウト。固定されているのはバージョンとバリアントのビットだけです。

ランダムな UUID がデータベースを遅くする理由と、v7 による解決

ほとんどのデータベースは主キーを B-tree インデックスに格納します。連番のキーなら、新しい行はインデックスの右端のページに入り、そのページはメモリ上にとどまります。ランダムな v4 UUID では、挿入のたびにランダムなページに入ります。インデックスがメモリより大きくなると、挿入のたびにディスクからページを読み込んで分割するようになり、書き込みのスループットが落ちます。テーブル全体を主キーでクラスタ化する MySQL の InnoDB で、これが最も顕著です。

UUID v7 は、UUID の利点(グローバルに一意、どのクライアントでもラウンドトリップなしで生成可能、外部に公開しても安全)を保ちながら、インデックス内ではほぼ自動採番の列のように振る舞います。2024 年 5 月に公開された RFC 9562 は、新しい時刻ベースの ID に v1 や v6 ではなく v7 を推奨しており、PostgreSQL 18 には組み込みの uuidv7() 関数が追加されました。

UUID は 36 文字の文字列ではなく、ネイティブの 16 バイト型(PostgreSQL の uuid、MySQL の BINARY(16))で保存しましょう。文字列ではインデックスのサイズが 2 倍以上になります。

UUID、ULID、NanoID の比較

• UUID v4:36 文字、122 ビットのランダム、あらゆるライブラリとデータベースが対応、並べ替え不可。

• UUID v7:36 文字、48 ビットのミリ秒時刻 + 74 ビットのランダム、並べ替え可能、UUID が使える場所ならどこでも対応。

• ULID:Crockford Base32 で 26 文字、48 ビットの時刻 + 80 ビットのランダム、並べ替え可能で大文字・小文字を区別しない、ライブラリが必要。

• NanoID:デフォルトで 21 文字、アルファベットと長さは自由、URL セーフでコンパクト、タイムスタンプも標準のバイナリ形式もなし。

関連する無料ツール

  • Unix タイムスタンプ変換 — エポックの秒、ミリ秒、マイクロ秒、ナノ秒を任意のタイムゾーンの日時に変換、その逆も。現在時刻の表示、一括変換、コードスニペット付き。
  • パスワード生成 — 強力なランダムパスワード、覚えやすいパスフレーズ、PIN を生成します。すべてブラウザ内で動作し、何も送信・保存されません。
  • ハッシュ生成 — テキストやファイルを MD5、SHA-1、SHA-256、SHA-384、SHA-512、CRC32 でハッシュ化し、チェックサムを検証したり HMAC を計算したりできます。ファイルは端末の外に出ません。
  • JSON 整形 — JSON を整形、圧縮(minify)、検証し、解析エラーは行と列で位置を示します。ブラウザ上で動作、アップロード不要。