無料UUID生成ツール - V1 & V4 UUIDをすぐに作成
バージョン1(時刻ベース)とバージョン4(ランダム)のUUIDをその場でオンラインに生成する無料ツールです。UUIDの形式や生成アルゴリズム、RFC 4122の規格を解説し、データベースの主キーやAPIでの具体的な利用例も紹介しており、開発者が手軽に使えます。
UUIDジェネレーター
ドキュメンテーション
UUIDジェネレーター
UUIDジェネレーターは、汎用一意識別子(UUID)を作成するツールです。UUIDは、データの一部にラベルを付けるために使われる128ビットのコードで、世界中の他の項目が同じラベルを持つ可能性をほぼなくします。このページでは、バージョン1(時刻ベース)とバージョン4(ランダム)のUUIDを生成します。
UUIDとは?
UUIDは 128 ビットの数値で、十六進数の 32 桁(文字 0-9 とa-f)で表記されます。ハイフンで区切られた五つのグループに分かれ、パターンは 8-4-4-4-12 で、合計 36 文字になります。UUIDの例を次に示します。
1550e8400-e29b-41d4-a716-446655440000
2UUIDは、Internet Engineering Task Force(IETF)の標準で定義されています。この標準の最初のバージョンであるRFC 4122 は、2005年7月 に公表されました。2024年5月 には、RFC 9562 がRFC 4122 を廃止し、新しいバージョンが追加されました。ソフトウェアは、番号を割り当てる中央の管理者を必要とせずに、データベースの行、ファイル、その他のレコードを識別するためにUUIDを使います。取りうるUUIDの空間は非常に大きいため、二台のコンピューターが同時に、互いに独立してUUIDを生成しても、同じものができることはほとんどありません。
UUIDの形式と構造
UUIDの128ビットは、名前付きフィールドに分割されます。各フィールドが占めるビット数は固定されています。
time_low- 32ビットtime_mid- 16ビットtime_hi_and_version- 16ビットclock_seq_hi_and_reserved- 8ビットclock_seq_low- 8ビットnode- 48ビット
time_hi_and_version 内の四ビットがUUIDのバージョン番号を示し、clock_seq_hi_and_reserved 内の二ビットがバリアントを示します。バリアントは、残りのフィールドをソフトウェアがどう読み取るかを伝えるものです。
このツールでUUIDを生成する方法
- バージョンを選択します。バージョン1(時刻ベース)またはバージョン4(ランダム)です。
- 「生成」を選びます。ツールはすぐに新しい 128 ビットのUUIDを作成します。
- 「コピー」を選んで、結果をクリップボードにコピーします。
- UUIDをコード、データベース、または設定ファイルに貼り付けます。
バージョン 4 は、いつどこで作られたかという情報を持たないため、データベースのキーなど、ほとんどの用途に向いています。バージョン 1 は作られた時刻を記録するため、レコードがいつ作成されたかを知りたいときに役立ちます。
UUIDバージョン1とバージョン4の比較
バージョン 1 は、現在のタイムスタンプに加えて、クロックシーケンスとノード値を符号化します。元の標準では、ノード値にコンピューターの実際のネットワーク(MAC)アドレスを使えました。新しい標準は、MACアドレスにはプライバシー上のリスクがあるため使うべきではないとし、代わりにランダムなノード値を使うことを認めています。このツールはノードに常にランダムなビットを使うので、バージョン 1 のUUIDが実際のMACアドレスを読み取ったり公開したりすることはありません。ランダムなノードに対する標準の要件に従い、このツールはノードの先頭オクテットの最下位ビット(マルチキャストビット)を 1 に設定します。これにより、そのノードが実際のネットワークアドレスではなくランダムな値であることが示されます。このツールのクロックは時刻をミリ秒単位で読み取るため、タイムスタンプの最も細かい刻みは常にゼロです。
バージョン 1 のUUIDは、テキストとして並べても作成時刻順になりません。タイムスタンプのうち最も速く変化する部分の time_low が先頭に来るため、後から作られたUUIDが先に作られたものより前に並ぶことがあります。RFC 9562 は、データベースでの順序を改善するためのバージョン 1 の並べ替え形式としてバージョン 6 を追加し、可能な場合は新しいシステムでバージョン 1 や 6 の代わりにバージョン 7 を使うべきだとしています。
バージョン4は、バージョンとバリアントを示すために一部のビットを固定し、残りをランダムビットで構成します。タイムスタンプもマシン固有のデータも含まないため、いつどこで作成されたかは分かりません。作成順に並べ替えることもできません。
標準にはほかのバージョンもありますが、このツールでは生成しません。バージョン 2 はDCEセキュリティ用に予約されています。バージョン 3 と 5 は、名前空間と名前を MD5 またはSHA-1 でハッシュして作られるため、同じ入力からは常に同じUUIDができます。バージョン 6、7、8 は、RFC 9562 で追加されました。
UUIDの計算方法(式)
バージョン4:
- 128 個のランダムなビットを生成します。ツールはこれらのビットを、暗号学的に安全なWeb Crypto API(
crypto.getRandomValues)から取得します。このAPIがない場合にのみ、Math.randomに切り替えます。 - 四つのバージョンビット(第三グループの最初の十六進数字)を
0100(十六進数4)に設定します。 - 第四グループの上位二ビットを
10に設定します。これにより、そのグループの最初の十六進数字は8、9、a、またはbになります。
128 ビットのうちランダムなのは 122 ビットだけです。6 ビットは手順 2 と 3 で固定されるためです。その結果、取りうるバージョン 4 のUUIDは 2^122 個、約 5.3 × 10^36 個になります。
バージョン1:
- 現在時刻を、グレゴリオ暦の改暦日である1582年10月15日 からの 100 ナノ秒間隔の数として取得します。これにより、
time_low、time_mid、およびtime_hi_and_versionの一部が埋まります。 - ランダムな 14 ビットのクロックシーケンスを生成します。システムクロックが過去に戻された場合に、重複を避けるために使われます。
- ランダムな 48 ビットのノード値を生成し、マルチキャストビット(先頭バイトの最下位ビット)を 1 に設定します。クロックシーケンスとノードは、バージョン 4 と同じWeb Cryptoの乱数取得から得られ、同じ
Math.randomへの切り替えが行われます。 - バージョンビットを
0001に、バリアントビットを10に設定します。
すべてのUUIDバージョンを通じて、128 ビットの空間全体には 2^128 個、約 3.4 × 10^38 個の値が入ります。
計算例
先ほどの例のUUID 550e8400-e29b-41d4-a716-446655440000 を取り上げます。
- 3番目のグループ
41d4では、最初の数字が4であり、これがバージョン4 UUIDであることを示します。 - 第四グループ
a716では、最初の数字a(二進数1010)が10で始まっており、必要なバリアントビットになっています。 - 残りの十六進数字はランダムなペイロードです。
このUUIDを読み取るプログラムは、4 と 10 のパターンを確認して形式を判断し、残りは意味を持たない値として扱います。
UUIDの一般的な用途
- データベースの主キー。特に、複数のサーバーが互いに確認せず同時にレコードを作成する場合に使われます。
- マイクロサービスなどの分散システムにおけるファイル、イベント、リソースの識別子。
- 大規模なネットワークの機器ID。各機器がオフラインで自分のIDを生成できます。
UUIDは、パスワード、セッションの秘密情報、APIキーとして使ってはいけません。標準は、実装がUUIDをセキュリティケイパビリティ、つまり知られているだけでアクセス権を与えるIDとして使ってはならないと定めています。
主なトレードオフはサイズです。UUIDは 16 バイトの記憶領域を使いますが、単純な整数カウンターは 4 バイトまたは 8 バイトです。バージョン 4 のようなランダムなUUIDは、データベースインデックスの局所性も低く、新しい値がインデックス内のランダムな位置に入るため、挿入が遅くなることがあります。
UUIDの代替
自動採番の整数は小さくて単純ですが、複数のサーバーが独立してIDを割り当てる必要が出てくると、うまく機能しません。並べ替えの問題を解決するために、時刻順のID方式がいくつも作られており、RFC 9562 は背景情報として、TwitterのSnowflakeやULIDなどを挙げています。ULIDはUUIDと同じ 128 ビットで、辞書順に並べ替えられる、つまりテキストとして並べると作成順になります。新しいシステムでは、UUIDバージョン 7 が、UUID標準の中で同じ利点を提供します。
UUID標準の歴史
UUIDは、最初にApollo Network Computing Systemで使われ、その後、Open Software Foundationの分散コンピューティング環境、さらにMicrosoft Windowsで使われました。Internet Engineering Task ForceはRFC 4122 を 2005年7月 に公表し、2024年5月 にRFC 9562 に置き換えました。
よくある質問
UUIDジェネレーターは何に使いますか? データベース、分散システム、機器IDのための一意の識別子を作成します。これにより、二つのレコードが同じ識別子を共有する必要がなくなります。
UUID v1とv4の違いは何ですか? バージョン 1 はタイムスタンプを符号化します。バージョン 4 は、バージョンとバリアントのビットを除いてランダムで、タイムスタンプを持ちません。このツールのバージョン 1 の出力は、実際のMACアドレスではなくランダムなノード値を使うため、機器を特定できる情報を公開しません。
バージョン 1 はMACアドレスを公開しますか? このツールでは公開しません。元の標準では、バージョン 1 のUUIDのノードフィールドに実際のMACアドレスを入れることが認められていましたが、このジェネレーターは代わりに常にこのフィールドをランダムなビットで埋め、ランダムであることを示すためにマルチキャストビットを設定します。
UUIDは一意であることが保証されていますか? どの識別子方式も絶対的な一意性を保証することはできませんが、バージョン 4 のUUIDには約 5.3 × 10^36 通りのランダムな値があります。乱数の質が良ければ、重複する確率はほとんどあらゆる実用上無視できるほど小さくなります。
UUIDをデータベースの主キーとして使えますか? はい。どのノードも中央のサーバーに問い合わせることなくUUIDを生成できるため、分散システムでは主キーとしてうまく機能します。代償として、キー一つあたり 16 バイトの記憶領域が必要になり、ランダムなバージョンでは非常に大きなテーブルへの挿入が遅くなります。
UUIDとGUIDは同じものですか? はい。RFC 9562 は、UUIDはGUID(Globally Unique IDentifiers)とも呼ばれ、Microsoftのプラットフォームで使われる名称だと述べています。
バージョン 1 やバージョン 4 のUUIDは作成時刻で並べ替えられますか? テキストとしては並べ替えられません。バージョン 4 はランダムで、バージョン 1 はタイムスタンプのうち最も速く変化する部分を先頭に置きます。作成順に並ぶIDが必要な場合は、UUIDバージョン 7 かULIDを使ってください。
参考文献
- Internet Engineering Task Force. RFC 9562: Universally Unique IDentifiers (UUIDs). RFC 9562 — RFC 4122 を廃止(2024年5月)。バージョン 4 の 122 ビットのランダムビット。バージョン 6 と 7、およびバージョン 7 を優先する推奨。MACアドレスは使うべきでないこと。UUIDをセキュリティケイパビリティにしてはならないこと。バージョン 4 のインデックス局所性の低さ。Apollo NCS、OSF DCE、Microsoftの歴史。別名としてのGUID。
- Internet Engineering Task Force. RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122 — 2005年7月 に公表。バージョン 1 のタイムスタンプは、1582年10月15日 からの 100 ナノ秒間隔の数。
- ULID project. Universally Unique Lexicographically Sortable Identifier. ULID specification — 128 ビットでUUIDと互換であること、および辞書順での並べ替え。