ジェネレーター 🔒 ブラウザ内で動作 — データは送信されません

UUID v7生成

作成時刻の順に並ぶバージョン7のUUIDを作成します。データベースの主キーに最適です。

生成したUUID
UUIDを検査

時刻順に並ぶUUID v7を生成

UUID v7は2つの長所を兼ね備えています。ランダムなUUIDと同じく調整なしで一意になり、しかも連番IDのように作成時刻の順に並びます。そのため、多くのデータベースやORMがいま主キーとして推奨しているバージョンです。

このページは、バージョン7を選択した状態でUUID生成ツールを開きます。先頭の48ビットは端末の時計から、残りはブラウザーの安全な乱数生成器から取得します。

図:バージョン7のUUID 01926f3a-7c2b-7d4e-9a1f-3b5c8d2e6f10 の構造。48ビットのミリ秒タイムスタンプ、バージョン番号7、バリアントビット、74ビットの乱数。01926f3a-7c2b-7d4e-9a1f-3b5c8d2e6f10バージョンバリアントUnix時間(ミリ秒) · 480x01926f3a7c2b = 17284429568432024-10-09 03:02:36.843 UTC12ランダムビット · 6248 + 4 + 12 + 2 + 62 = 128
バージョン7のUUIDは作成時刻(ミリ秒)から始まるため、新しいIDは時刻順に並び、データベースのインデックスとも相性が良くなります。3番目のグループの先頭がバージョン、4番目のグループの先頭がバリアントビットを含み、残りは乱数です。

データベースで順序が重要な理由

ほとんどのリレーショナルデータベースは、主キーをB-treeに格納します。ランダムなv4のキーは挿入のたびにインデックスの途中に入るため、ページ分割が起こり、関連する行がディスク上に散らばります。v7のキーはほぼ常に直前のキーより大きいので、整数の連番と同じように新しい行が末尾に追加されます。数百万行のテーブルでは、挿入速度とインデックスサイズの差は大きなものになります。

v4、v7、ULIDの比較

UUID v4UUID v7ULID
時刻順にソートできるいいえはいはい
ランダムなビット数1227480
規格RFC 9562RFC 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生成ツールをご覧ください。

関連ガイド