UUIDとは?
UUID(Universally Unique Identifier、汎用一意識別子)は、データベースの行、ファイル、APIリクエスト、デバイスなどに付ける128ビットの数値で、中央のサーバーに次の空き番号を問い合わせる必要がありません。16進数32桁を 8-4-4-4-12 の5つのグループに分けて表記します。例:f47ac10b-58cc-4372-a567-0e02b2c3d479。
UUIDはRFC 9562(2024年)で定義されています。これは従来のRFC 4122を置き換え、バージョン6、7、8を追加した仕様です。3つ目のグループの最初の16進数がバージョン(上の例では 4372 の 4)を、4つ目のグループの最初の桁がバリアント(標準的なUUIDでは 8、9、a、b のいずれか)を表します。

UUIDのバージョンの違い
どのバージョンも、同じ128ビットを異なる方法で埋めています。実際によく目にするのは次のバージョンです。
122ビットがランダムです。中身に意味はなく、漏れる情報もありません。ほとんどの言語のデフォルトです(crypto.randomUUID()、uuid.uuid4()、Guid.NewGuid())。
ミリ秒単位の48ビットのUnixタイムスタンプの後にランダムなビットが続くため、新しいIDは古いIDより後ろに並びます。RFC 9562はv1やv6よりもv7を推奨しています。
60ビットのタイムスタンプ、クロックシーケンス、48ビットのノードIDで構成されます。ノードIDは本来、コンピューターのMACアドレスでした。このツールでは代わりにランダムなノードを使います。
名前空間UUIDと名前を、SHA-1(v5)またはMD5(v3)でハッシュします。同じ入力からは常に同じUUIDが得られます。v5の使用をおすすめします。
バージョン1のフィールドを並べ替えて、IDが時刻順に並ぶようにしたものです。主に、すでにv1を使っているシステムの橋渡し役です。
すべて0(00000000-0000-0000-0000-000000000000)、またはすべて f のUUIDです。「値なし」や「範囲の終わり」を表すプレースホルダーとして使われます。
Advertisement
UUIDを生成する方法
ランダムなIDなら v4、データベースのインデックスに入れるIDや作成順に並べたいIDなら v7、同じ名前を常に同じUUIDに対応させたいなら v5 を選びます。
1個、10個、100個、最大1,000個まで一度に生成できます。どれもブラウザの暗号論的に安全な乱数生成器で作られます。
標準の小文字、Windows形式のGUID向けの波括弧付きと大文字、ハイフンなしの32文字、urn:uuid: 形式のURNから選べます。
UUIDを1つずつ、またはリスト全体をコピーするか、.txtファイルとしてダウンロードできます。設定はページのURLに保存されるので、ブックマークしておけます。
UUIDとGUIDの違いは?
GUID(Globally Unique Identifier)は、同じものを指すMicrosoftの呼び名です。.NETの Guid.NewGuid() やPowerShellの New-Guid で作られるGUIDは、標準的なバージョン4のUUIDです。
目に見える違いは、ふだんの表記方法です。Windowsのツールでは、GUIDが {F47AC10B-58CC-4372-A567-0E02B2C3D479} のように大文字で波括弧に囲まれて表示されることがよくあります。形式を「波括弧付きGUID」にして「大文字」にチェックを入れれば、まさにその形になります。内部的には、Windowsと.NETは最初の3つのグループをリトルエンディアンのバイト順で保存するため、テキスト表記が同じでも、生の16バイトはUUIDのバイト順とは異なります。ごく古いCOMのGUIDの一部はMicrosoft独自のバリアントビットを使っており、上のデコーダーではそれもラベルで表示されます。
Advertisement
UUID v4とv7、どちらを使うべき?
どちらも一意なIDとして安全に使えます。違いが出るのは、データベースのインデックスに何百万件も保存したときです。
主キーにはv7を使う。 新しいv7 UUIDは常に前のものより大きいため、挿入がB-treeインデックスのランダムな位置ではなく末尾に入り、PostgreSQLやMySQLではインデックスがコンパクトに保たれ、挿入も高速になります。例外はSQL Serverで、
uniqueidentifierの値を最後の6バイトから先に比較して並べるため、v7によるこの利点は得られません。IDから何も読み取られたくないならv4を使う。 v7 UUIDには作成時刻がミリ秒単位で含まれており、UUIDを見た人は誰でも上のデコーダーでその時刻を読み取れます。
名前から安定したIDを作るならv5を使う。 たとえばドメイン名やURLごとに1つのUUIDを割り当てれば、テーブルを共有しなくても、どのシステムでも同じ値を計算できます。
新しい用途ではv1を避ける。 従来のv1にはマシンのMACアドレスと作成時刻が埋め込まれます。RFC 9562は代わりにv7を推奨しています。
2つのUUIDが重複することはある?
理論上はありえますが、実際にはまず起きません。バージョン4のUUIDには122ビットのランダムなビットがあり、取りうる値は約5.3 × 10^36通りです。重複が1つでも生じる確率が50%に達するには、約270京個(2.7 × 10^18)を生成する必要があります。これは毎秒10億個のUUIDを約86年間作り続ける量です。
現実のリスクは数学ではなく、壊れた乱数生成器です。このツールは、ブラウザの暗号論的に安全な乱数源である crypto.getRandomValues() を使っています。また、v7はカウンターを持つため、同じミリ秒内に作られたUUIDも正しい順に並び、重複することはありません。
Advertisement
UUIDをデコード:バージョン、バリアント、タイムスタンプ
デコード タブを開き、1行に1つずつUUIDを貼り付けます。標準形式、波括弧付き、urn:uuid: 付き、32文字形式のいずれにも対応しています。それぞれについて、有効かどうか、バージョンとバリアント、さらにv1、v6、v7では作成された日時が表示されます。
v1とv6のUUIDでは、ノードIDと、それが実際のMACアドレスらしいかランダムな値かも表示されます。システム内の古いIDがハードウェアのアドレスを漏らしていないか、すばやく確認できます。
プログラムでUUIDを生成する
主要な言語やデータベースの多くは、追加のパッケージなしでUUIDを作成できます。バージョン7への対応は比較的新しく、Python 3.14、PostgreSQL 18、.NET 9、Go 1.27で追加されました。
crypto.randomUUID()
// 'f47ac10b-58cc-4372-a567-0e02b2c3d479' (バージョン4)import uuid
uuid.uuid4() # ランダム
uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com') # 名前ベース、常に同じ値
uuid.uuid7() # Python 3.14以降SELECT gen_random_uuid(); -- バージョン4 (PostgreSQL 13以降)
SELECT uuidv7(); -- バージョン7 (PostgreSQL 18以降)Guid.NewGuid() // バージョン4
Guid.CreateVersion7() // バージョン7 (.NET 9以降)
# PowerShell
New-Guiduuidgen # ランダムなUUID (macOSは大文字で出力)
uuidgen --time # バージョン1 (util-linux)
cat /proc/sys/kernel/random/uuid # LinuxカーネルUUID.randomUUID() // Java、バージョン4
uuid.NewV4() // Go 1.27以降の標準ライブラリ、バージョン4
uuid.NewV7() // Go 1.27以降、バージョン7
// 古いGo: github.com/google/uuid (uuid.New、uuid.NewV7)Advertisement
その他の開発者ツール
開発者やシステム管理者向けのその他の無料ツールです。すべてブラウザ内で動作します。