ndテスト。
クイック回答
UUID と GUID は同じもので、8-4-4-4-12 パターンの 32 桁の 16 進数として記述された 128 ビットの一意の識別子です。 「GUID」は Microsoft の用語です。 「UUID」は、RFC 標準の用語です。ほとんどのアプリケーションでは、UUID バージョン 4 (ランダム) が必要です。
UUIDとGUIDは同じものですか?
はい。 UUID (Universally Unique Identifier) と GUID (Globally Unique Identifier) は、同じ 128 ビット値を指します。 GUID という名前は Microsoft の世界に由来しており、.NET、SQL Server、COM、および Windows レジストリではすべて GUID と呼ばれています。一方、UUID は正式な仕様 (当初は RFC 4122、2024 年に RFC 9562 によって更新) および PostgreSQL、Java、Python、JavaScript などのエコシステムで使用される名前です。
日常の仕事では、これらの言葉を交換可能なものとして扱うことができます。 C# で生成された GUID と Python で生成された UUID は同じ形式を持ち、同じデータベース列に存在できます。唯一の違いは表面的なものです。Microsoft ツールでは、値が {xxxxxxxx-...} のように中かっこで囲まれることがあります。また、歴史的に、いくつかの Microsoft API では、値の一部が異なるバイト順序で格納されていました。正規のテキスト形式はどこでも同じです。
UUID/GUID の見本
UUIDは128ビットで、通常はハイフンで区切られた5つのグループに分割された32桁の16進数で表されます。おなじみの8-4-4-4-12のレイアウトです。
UUIDの例(v4)
3f2504e0-4f89-41d3-9a0c-0305e82c3301
その文字列のうち、2つの位置はランダムではありません。3番目のグループの最初の桁はバージョン(上記の4)を表し、4番目のグループの最初の桁はバリアント(通常は8、9、a、またはb)を表します。v4 UUIDのそれ以外の部分はすべてランダムです。
UUIDバージョンの概要
この規格では複数のバージョンが定義されており、それぞれ異なる方法で生成されます。複数のバージョンが必要になることは稀ですが、どのようなバージョンが存在するかを知っておくことは役立ちます。
- v1 - 時間ベース:現在のタイムスタンプとマシンのMACアドレスから構築されます。作成時刻でソートできますが、MACアドレスと作成時刻が漏洩する可能性があります。
- v3 - 名前ベース (MD5): 名前空間と名前の決定論的な MD5 ハッシュなので、同じ入力に対しては常に同じ UUID が生成されます。
- v4 - random: 122ビットの乱数。これはほとんどのアプリケーションのデフォルト設定であり、このサイトの乱数生成器が生成するバージョンです。
- v5 - 名前ベース (SHA-1): v3と同様ですが、SHA-1を使用します。決定論的なIDが必要な場合は、v3よりも推奨されます。
- v6 / v7 / v8 - 新しい (RFC 9562、2024): v7 は時間順でデータベースに適しており、新しい主キーとして急速に推奨される選択肢になりつつあります。
バージョン 4 が主力製品です。 122 ビットのランダム性により、現実的な数の ID に対して偶発的な衝突は事実上不可能になります。何年にもわたって 1 秒あたり数十億の ID が生成される可能性があり、重複はまったく期待できません。中央コーディネーターが必要ないため、どのサービス、デバイス、テスト実行でも独自の ID をオフラインで作成できます。
定量的を使用する場合と使用しない場合
まとめて設定をリンクするために使用できる一意の ID。
宛先データベースはプライマリキーをサポートしていません。
文字列
登録と承認依頼
REST および GraphQL API の公開 ID は、UUID に最適です。これらは非シーケンシャルであるため、クライアントは /users/1 から /users/2 を推測できません。また、各クライアントまたはサービスは、サーバーとの往復を行わずに独自のリクエスト ID と冪等キーをローカルに生成できます。
テストとUAT
自動テスト、シード データ、およびロード スクリプトでは、UUID によりカウンターを維持せずに衝突のない識別子が得られます。実行ごとに新しいバッチを生成するため、並列テスト スイート間でレコードが衝突することはありません。
単純な自動増加整数で十分な場合は、UUIDをスキップします。小さな内部ルックアップテーブル、または人間に優しい短いIDは、グローバルな一意性よりも便利です。UUIDを秘密として扱わないでください。v 4 UUIDは推測できませんが、署名されたトークンや暗号キーの代わりではありません。
MongoDB、Java、PythonのUUID
すべての主要なスタックは UUID をネイティブに生成して保存できます。クイック リファレンスは次のとおりです。
- MongoDB: デフォルトの _id は UUID ではなく ObjectId ですが、BSON UUID (バイナリ サブタイプ 4) を使用して _id または任意のフィールドに UUID を格納できます。ドライバーは UUID() などのヘルパーを公開するため、値は 36 文字の文字列ではなく 16 バイトのままになります。
- Java: java.util.UUID.randomUUID() は v4 UUID を返し、UUID.fromString() はそれを解析します。 Hibernate/JPA はそれをネイティブ uuid または binary(16) 列にマップします。
- Python: 組み込みの uuid モジュールにより、ランダム ID (さらに uuid1 と uuid5) の uuid.uuid4() が提供されます。テキスト形式の場合は str() を呼び出し、16 バイト値の場合は .bytes を呼び出します。
- .NET / C#: Guid.NewGuid() によって GUID が作成され、SQL Server の uniqueidentifier 列にそれが格納されます。これは古典的な "GUID" です。
- JavaScript: crypto.randomUUID() は、ライブラリを必要とせずに、最新のブラウザーおよび Node.js で標準に準拠した v4 UUID を生成します。
よくある質問
GUID は UUID と同じですか?
はい。これらは同じ 128 ビット識別子を記述します。 GUID は、Microsoft が .NET、SQL Server、および Windows で使用する名前です。 UUID は、公式 RFC 標準および他のほとんどのエコシステムにおける用語です。形式は同一であるため、GUID と UUID を同じ意味で保存および比較できます。
どの UUID バージョンを使用すればよいですか?
汎用の一意の ID にはバージョン 4 (ランダム) を使用します。これが最も一般的であり、調整の必要はありません。大規模で書き込み負荷の高いデータベースの主キーを選択する場合は、時間順でインデックスがより効率的に作成されるバージョン 7 を検討してください。常に同じ ID を生成するために同じ入力が必要な場合は、v5 を使用します。
2 つの UUID が衝突することはありますか?
理論的にはイエスですが、実際にはノーです。 v4 UUID には 122 のランダム ビットがあるため、重複が生成される確率は天文学的に小さくなります。衝突が発生する可能性が高くなるまで、何年もかけて 1 秒あたり数十億の UUID を作成する必要があります。すべての実用的な目的において、それらはユニークです。
UUID は安全ですか、それとも秘密ですか?
ランダムな v4 UUID を推測することは事実上不可能ですが、これは識別子であり、資格情報ではありません。パスワード、セッション シークレット、またはリソースを保護する唯一のものとして使用しないでください。セキュリティが重要な場合は、適切な認証と署名付きトークンを組み合わせてください。
GUID に中括弧が付いているのはなぜですか?
Microsoft ツールでは、GUID が {3F2504E0-4F89-41D3-9A0C-0305E82C3301} のように中かっこで囲まれ、場合によっては大文字で表示または保存されることがよくあります。中かっこと大文字小文字は単なるフォーマットです。中かっこを削除し、値を小文字にして、他の場所で使用される正規の UUID 形式を取得します。
UUID v4 を即座に生成する
無料の UUID ジェネレーターを使用して、ブラウザーで 1 つまたは複数の標準準拠の UUID v4 (GUID) 値を作成します。サインアップは必要なく、デバイスから何も出ません。