コンテンツにスキップ

無料UUID生成ツール - V1 & V4 UUIDをすぐに作成

バージョン1(時刻ベース)とバージョン4(ランダム)のUUIDをその場でオンラインに生成する無料ツールです。UUIDの形式や生成アルゴリズム、RFC 4122の規格を解説し、データベースの主キーやAPIでの具体的な利用例も紹介しており、開発者が手軽に使えます。

UUIDジェネレーター

UUIDバージョン
生成されたUUID
ローディング計算機...
📚

ドキュメンテーション

UUIDジェネレーター

UUIDジェネレーターは、汎用一意識別子(UUID)を作成するツールです。UUIDは、データの一部にラベルを付けるために使われる128ビットのコードで、世界中の他の項目が同じラベルを持つ可能性をほぼなくします。このページでは、バージョン1(時刻ベース)とバージョン4(ランダム)のUUIDを生成します。

UUIDとは?

UUIDは、32個の十六進数(文字0–9およびa〜f)で表される128ビットの数値です。ハイフンで区切られた5つのグループに分かれ、形式は8-4-4-4-12で、合計36文字です。UUIDの例は次のようになります。

1550e8400-e29b-41d4-a716-446655440000
2

UUIDはRFC9562で定義されています。これはインターネット技術タスクフォース(IETF)が2024年五月に公開したもので、2005年の旧RFC4122に取って代わりました。両文書は同じ128ビット形式を説明しています。ソフトウェアは、中央機関から番号の割り当てを受けることなく、データベースの行、ファイル、ユーザーセッションなどのレコードを識別するためにUUIDを使います。UUIDの可能な空間は非常に大きいため、2台のコンピューターが同じ時刻に独立して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ビット
UUIDフィールドの配置 time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

time_hi_and_version内の4ビットはUUIDのバージョン番号を保持し、clock_seq_hi_and_reserved内の2ビットはバリアントを保持します。バリアントは、ソフトウェアが残りのフィールドをどのように読み取るかを示します。8つのバージョンが定義されています。

上記のフィールド名はバージョン1に由来し、このバージョンでは実際に時刻とノードの値を保持します。他のバージョンも同じ8-4-4-4-12の配置とフィールド境界を使いますが、ビットの大部分にはランダムデータが入ります。バージョン4のUUIDでは、time_lowと表示されるグループも時刻ではなくランダムです。

このツールでUUIDを生成する方法

  1. バージョンを選択します。バージョン1(時刻ベース)またはバージョン4(ランダム)です。
  2. 結果ボックスでUUIDを確認します。ページの読み込み時またはバージョン変更時に新しいUUIDが表示されます。
  3. 別のUUIDを生成するには「生成」を選択します。
  4. 結果をクリップボードにコピーするには「コピー」を選択し、その後コード、データベース、または設定ファイルに貼り付けます。

結果の下にあるパネルでは、UUIDを5つのフィールドに分割してそれぞれの名前を示すため、バージョンの数字とバリアントの数字を簡単に見つけられます。

バージョン4は、データベースキーやセッショントークンなど、ほとんどの用途に適しています。作成時刻や作成場所に関する情報を持たないためです。バージョン1は、ログエントリなど、識別子自体から作成時刻を復元する必要があるレコードに適しています。

UUIDバージョン1とバージョン4の比較

バージョン1は、現在のタイムスタンプに加え、ランダムに選ばれたクロックシーケンスとノード値を符号化します。標準では、ノード値にコンピューターの実際のネットワーク(MAC)アドレスを使えますが、プライバシー保護の代替としてランダムに生成したノード値を使うことも認めています。このツールは常にランダムな方式を使います。つまり、バージョン1のUUIDが実際のMACアドレスを読み取ったり公開したりすることはありません。また標準では、ランダムなノード値の場合、ノードフィールドの先頭バイトの最下位ビットを1に設定する必要があり、このツールもそのように設定します。実際のネットワークカードではこのビットが設定されないため、ランダムなノードが実際のノードと間違われることはありません。そのため、このページのバージョン1 UUIDでは、第五グループの二番目の十六進数字が常に奇数になります。値は1、3、5、7、9、b、d、またはfです。

バージョン1のUUID内のタイムスタンプは読み戻せるため、レコードを作成順に並べられます。ただし、UUID文字列自体を並べ替えてもそうはなりません。最初のグループにはタイムスタンプの下位32ビットが入り、約7分ごとに桁あふれするためです。RFC9562で追加されたバージョン6は、同じタイムスタンプを上位ビットから格納するため、通常のテキストの並べ替えが機能します。

バージョン4は、バージョンとバリアントを示すために一部のビットを固定し、残りをランダムビットで構成します。タイムスタンプもマシン固有のデータも含まないため、いつどこで作成されたかは分かりません。作成順に並べ替えることもできません。

標準には他にも6つのバージョンがありますが、このツールでは生成しません。バージョン2(DCEセキュリティ、ほとんど使われない)、名前空間と名前をMD5またはSHA-1でハッシュ化して作成するバージョン3および5(同じ入力から常に同じUUIDが生成される)、そしてRFC9562が (24,300 cm)2024年に追加した、並べ替え可能でカスタム用途にも使えるバージョン6、7、8です。

UUIDの計算方法(式)

バージョン4:

  1. 128個のランダムビットを生成します。
  2. 四つのバージョンビット(第三グループの最初の十六進数字)を0100(十六進数4)に設定します。
  3. 第四グループの上位二ビットを10に設定します。これにより、そのグループの最初の十六進数字は8、9、a、またはbになります。

128ビットのうち実際にランダムなのは122ビットだけです。手順2と3によって6ビットが固定されるためです。したがって、可能なバージョン4 UUIDは2^122個、約5.3 × 10^36個です。

バージョン1:

  1. グレゴリオ暦改暦の日付である1582年10月15日からの100ナノ秒間隔の数として現在時刻を取得します。実際には、通常のUnix時刻(ミリ秒)に12,219,292,800,000を加え、全体を10,000倍します。
  2. その60ビットの数を3つのフィールドに分割します。下位32ビットをtime_lowに、次の16ビットをtime_midに、上位12ビットをtime_hi_and_versionに入れます。
  3. システム時刻が後戻りした場合の衝突を避けるため、14ビットのクロックシーケンスを生成します。
  4. 48ビットのノード値を生成し、その先頭バイトの最下位ビットを1に設定します。
  5. バージョンビットを0001に、バリアントビットを10に設定します。

すべてのUUIDバージョンを合わせると、完全な128ビット空間には2^128個、約3.4 × 10^38個の値があります。この数は非常に大きいため、ランダムな衝突は実用上考慮する必要がありません。

計算例

**バージョン4 UUIDの読み取り。**先ほどの例550e8400-e29b-41d4-a716-446655440000を使います。

  • 3番目のグループ41d4では、最初の数字が4であり、これがバージョン4 UUIDであることを示します。
  • 第四グループa716では、最初の数字a(二進数1010)が10で始まっており、必要なバリアントビットになっています。
  • 残りの十六進数字はランダムなペイロードです。

このUUIDを読み取るプログラムは、形式を確認するために4と10のパターンを検査し、残りを不透明なランダム値として扱います。

**バージョン1 UUIDの構築。**時計がUnix時刻で1,700,000,000,000ミリ秒を示しているとします。これはUTCで2023年11月14日、22:13:20です。

  1. オフセットを加えます。1,700,000,000,000 + 12,219,292,800,000 = 13,919,292,800,000ミリ秒。
  2. 10,000を掛けて100ナノ秒間隔にすると、139,192,928,000,000,000になります。十六進数では01EE833B04AFC000です。
  3. 分割します。time_low = 04AFC000(下位8個の十六進数字)、time_mid = 833B(次の4個)、上位12ビットは1EEです。
  4. バージョン数字1を1EEの前に置くと、time_hi_and_version = 11EEになります。

UUIDは04afc000-833b-11ee-に続いてクロックシーケンスとノード値を置いたものになります。ソフトウェアはこの4段階を逆にたどり、識別子から2023年11月14日を復元できます。

UUIDの一般的な用途

  • データベースの主キー。特に、複数のサーバーが互いに確認せず同時にレコードを作成する場合に使われます。
  • セッショントークンやAPIキー。通常はプライバシーを保護できるバージョン4を使います。
  • マイクロサービスなどの分散システムにおけるファイル、イベント、リソースの識別子。
  • 大規模なIoTネットワークのデバイスID。各デバイスがオフラインで独自のIDを生成できます。

主なトレードオフはサイズです。UUIDは16バイトのストレージを使いますが、単純な整数カウンターは4または8バイトです。また、一部のデータベースでは、連番整数よりUUIDのインデックス作成が遅くなります。

UUIDの代替

自動インクリメント整数は小さく単純ですが、複数のサーバーが独立してIDを割り当てる必要がある場合には適しません。Twitterが開発したSnowflake IDは、タイムスタンプとワーカーIDを組み合わせ、分散システム全体でコンパクトかつ並べ替え可能な識別子を生成します。ULID(汎用一意辞書順ソート可能識別子)は、標準のバージョン4 UUIDとは異なり、ランダム性と作成時刻によるソート性を両立するよう設計された新しい形式です。

UUID標準の歴史

UUIDの概念は、Apollo Computerでネットワークコンピューティングシステムの一部として1980年代に始まりました。その後、Open Software Foundationが分散コンピューティング環境向けにこの形式を採用しました。IETFは (10,500 cm)2005年にRFC4122を公開し、2024年五月にRFC9562へ置き換えました。RFC9562は以前のすべてのバージョンを変更なく動作させ、バージョン6、7、8を追加しています。

よくある質問

UUIDジェネレーターは何に使われますか? データベース、分散システム、セッショントークン、APIキー、デバイスID用の一意な識別子を作成し、2つのレコードが同じ識別子を共有する必要がないようにします。

UUID v1とv4の違いは何ですか? バージョン1は、ソフトウェアが読み戻して作成時刻を復元できるタイムスタンプを符号化します。バージョン4は完全にランダムで、タイムスタンプを持ちません。このツールのバージョン1の出力は、実際のMACアドレスではなくランダムに生成されたノード値を使うため、マシンを特定する情報も公開しません。

バージョン1はMACアドレスを公開しますか? このツールでは公開しません。標準では、バージョン1 UUIDのノードフィールドに実際のMACアドレスを入れられますが、このジェネレーターは常にそのフィールドをランダムビットで埋め、実際のネットワークアドレスではないことを示すビットを設定します。

UUIDは一意であることが保証されますか? 絶対的な一意性を保証できる識別子方式はありません。しかし128ビットの空間には約3.4 × 10^38個の値があり、バージョン4 UUIDにも約5.3 × 10^36個のランダム値があります。重複の可能性は、ほとんどすべての実用用途で無視できるほど小さいものです。

UUIDをデータベースの主キーとして使えますか? はい。UUIDは、中央サーバーに確認せずどのノードでも生成できるため、分散システムの主キーとして適しています。代償は、キーごとに16バイトのストレージを使うことです。一般的な整数より大きく、非常に大きなテーブルではインデックス性能が低下する可能性もあります。

UUIDはGUIDと同じものですか? はい。GUID(グローバル一意識別子)は、RFC4122でUUIDとして定義された同じ概念に対するMicrosoftの名称です。

バージョン4 UUIDは作成時刻で並べ替えられますか? いいえ。バージョン4 UUIDはランダムなので、いつ作成されたかの記録を持ちません。バージョン1 UUIDにはその記録がありますが、まずデコードする必要があり、文字列を並べ替えても作成順にはなりません。バージョン6、バージョン7、ULIDは、テキストとして直接並べ替えられるよう設計されています。

参考文献

  1. Davis, K., Peabody, B., & Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. Universally unique identifier. Wikipedia掲載。https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID。Wikipedia掲載。https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID仕様。GitHub。https://github.com/ulid/spec