UUID v1 とは
UUID v1 は 1582 年 10 月 15 日からの経過時間を100 ナノ秒単位で表した値と、ノード識別子を組み合わせます。伝統的にその識別子はネットワークカードの MAC アドレスでしたが、現在の実装ではハードウェアを漏らさないよう乱数を使うことが多くなっています。
先頭のタイムスタンプはビットが反転した形で格納されるため、同時に生成した v1 の値は先頭の多くの桁が一致します。文字列として並べても時刻順にはならない — これが v6 が生まれた理由です。
使い方
- 生成する件数を選びます。
- 大文字を受け付けるシステムなら大文字を有効にします。
- 生成を押して必要な値をコピーします。
用途
- v1 を要求する古いシステムやライブラリ。
- タイムスタンプとノードで追跡する相関識別子。
- UUID v1 を読んで時刻を取り出すソフトウェアのテスト。
UUID v1 の位置づけ
| 選択肢 | 使う場面 |
|---|---|
v1 | 原型。依然として既存システムに残っています |
v6 | 同じ情報を持ちながら時刻順に並べ替えられます |
v4 | 生成時刻も生成元のマシンも漏らしません |
UUID の各バージョン早見表
| バージョン | 並べ替え可能 | 基になる情報 | 向いている用途 |
|---|---|---|---|
| v1 | 不可 | タイムスタンプ + MAC アドレス | v1 に依存したままの既存システム |
| v3 | 不可 | 名前の MD5 ハッシュ | MD5 を使わざるを得ない場面の決定的な識別子 |
| v4 | 不可 | 122 ビットの乱数 | 一般的な識別子のほとんど |
| v5 | 不可 | 名前の SHA-1 ハッシュ | 同じ名前から常に同じ識別子を得たいとき |
| v6 | 可 | 並べ替えたタイムスタンプ | 乱数性を保ったまま並べ替えたいとき |
| v7 | 可 | ミリ秒精度の Unix 時刻 | データベースの主キーやイベント識別子 |
| v8 | 不可 | 独自のビット配置 | 独自形式や実験的な用途 |
7 つのバージョンはいずれも 128 ビットで、同じ 8-4-4-4-12 の形式で表記します。違うのはビットの意味だけです。
よくある質問
UUID v1 はなぜ避けるよう言われるのですか?
理由は 2 つあります。1 つ目は、ノード欄の MAC アドレスによってどのマシンが値を生成したか追跡できてしまうこと。2 つ目は、文字列として比較しても時刻順に並ばないため、インデックス付きの主キーに適さないことです。
このツールは実際の MAC アドレスを埋め込みますか?
いいえ。ノード欄は乱数で埋めるため、値からお使いのハードウェアが分かることはありません。
v1 はまだ使われていますか?
はい、後方互換性が必要な場面で使われています。RFC 9562 もv1 を仕様に残していますが、新しい設計では v7 のほうが合理的な選択です。