UUID v7生成
作成時刻の順に並ぶバージョン7のUUIDを作成します。データベースの主キーに最適です。
生成したUUID
UUIDを検査
時刻順に並ぶUUID v7を生成
UUID v7は2つの長所を兼ね備えています。ランダムなUUIDと同じく調整なしで一意になり、しかも連番IDのように作成時刻の順に並びます。そのため、多くのデータベースやORMがいま主キーとして推奨しているバージョンです。
このページは、バージョン7を選択した状態でUUID生成ツールを開きます。先頭の48ビットは端末の時計から、残りはブラウザーの安全な乱数生成器から取得します。
データベースで順序が重要な理由
ほとんどのリレーショナルデータベースは、主キーをB-treeに格納します。ランダムなv4のキーは挿入のたびにインデックスの途中に入るため、ページ分割が起こり、関連する行がディスク上に散らばります。v7のキーはほぼ常に直前のキーより大きいので、整数の連番と同じように新しい行が末尾に追加されます。数百万行のテーブルでは、挿入速度とインデックスサイズの差は大きなものになります。
v4、v7、ULIDの比較
| UUID v4 | UUID v7 | ULID | |
|---|---|---|---|
| 時刻順にソートできる | いいえ | はい | はい |
| ランダムなビット数 | 122 | 74 | 80 |
| 規格 | RFC 9562 | RFC 9562 | コミュニティ仕様 |
| UUID型の列に入る | はい | はい | 変換が必要 |
| 作成時刻がわかる | いいえ | はい | はい |
タイムスタンプを読み戻す
ツールの下にある検査欄にv7 UUIDを貼り付けると、埋め込まれた時刻を復号します。手作業でも同じことができます。ハイフンを除いた先頭12桁の16進数が、1970年からの経過ミリ秒です。01926f3a-7c2b-7d4e-…なら0x01926f3a7c2b = 1728442956843で、2024年10月9日03:02:36.843(UTC)になります。
コードでUUID v7を生成する
- PostgreSQL 18以降:
uuidv7() - Python 3.14以降:
uuid.uuid7() - Java:
uuid-creatorライブラリのUuidCreator.getTimeOrderedEpoch() - Node.js:
uuidパッケージのimport { v7 } from 'uuid' - .NET 9以降:
Guid.CreateVersion7()
時刻順が不要なら、UUID v4のほうが明かす情報が少なくて済みます。Microsoft形式の書式が必要なら、GUID生成ツールをご覧ください。