シルギア

UUIDジェネレーター|v4・v7の違いとDB主キーでの使い分けを解説

公開日:2026年7月14日 更新日:2026年9月2日 運営:シルギア(Analyzegear, Inc.) 対象ツール:UUID ジェネレーター

UUID(Universally Unique Identifier)は、128ビットの一意な識別子です。550e8400-e29b-41d4-a716-446655440000 のように、ハイフンで 8-4-4-4-12 の5ブロックに区切った32桁の16進数で表記します。中央付近にバージョン番号とバリアント情報が埋め込まれており、中央のサーバーへ採番を問い合わせなくても、各端末やプロセスが勝手に発行した値がまず重複しない——この「調整なしで一意になる」性質がUUID最大の価値です。

UUIDの構造とビットの内訳

128ビットのすべてを自由に使えるわけではありません。v4を例にすると、バージョンを表す4ビットとバリアントを表す2ビットが固定用途に予約され、残る122ビットがランダムに割り当てられます。文字列で見ると、13桁目(3ブロック目の先頭)が必ず 4 になり、17桁目(4ブロック目の先頭)が 8・9・a・b のいずれかになります。550e8400-e29b-41d4-a716-446655440000 の太字部分がそれで、この2文字を見ればv4かどうかを目視で判別できます。本ツールもこの規則どおり、v4では該当ニブルを 4 と 8〜b に上書きしてから出力しています。

v4とv7の違いと使い分け

v4は122ビットが完全ランダムなUUIDです。値に順序がなく推測されにくいので、公開URLに載る識別子やトークンのように「並び順に意味がなく、むしろ推測されたくない」用途に向きます。

v7は先頭48ビットにUnixミリ秒のタイムスタンプを埋め込む新しい方式です。生成順がそのまま時刻順になるため、辞書順にソートすれば作成順に並びます。本ツールのv7は、同一ミリ秒内に複数生成しても RFC 9562 の単調増加カウンタ方式(方法1)で厳密に増加するよう実装しており、タイムスタンプ直後の12ビット領域をカウンタとして連番的に採番します。迷ったら、外部に露出するランダムなIDはv4、DBに保存して並べ替えたいIDはv7、と覚えておけば大きく外しません。

なぜ衝突が事実上ゼロなのか

v4のランダム部分は 2^122 通り、10進で約 5.3×10^36 通りあります。ただし「絶対にぶつからない」保証ではなく、衝突しやすさは誕生日のパラドックスで見積もれます。目安として、約103兆(1.03×10^14)個のv4を生成しても、どこか1組でも重複が起きる確率はおよそ10億分の1にとどまります。重複確率が五分五分に達するには 2.7×10^18 個ほど——1秒あたり10億個を発行し続けても80年以上かかる規模——が必要で、通常のアプリで衝突を心配する必要はまずありません。逆に言えば、これはあくまで確率的な性質であって数学的な絶対保証ではない、という点は仕様上の前提として押さえておきます。

DB主キーでの使い分けと失敗例

UUIDを主キーにする際にもっとも多い失敗が、v4をそのまま主キーにしてしまうことです。v4はランダムなので挿入位置がインデックス全体に散らばり、B-treeのページが頻繁に分割されて断片化します。データ量が増えるほど挿入が遅くなり、インデックスも肥大化していきます。

これを避けるには、主キーには時刻順に並ぶv7を選びます。挿入が末尾付近に集中するため断片化が起きにくく、連番に近い効率が得られます。AUTO_INCREMENTのような連番IDと違い、発行済みの件数や「1つ前のID」を外部から推測されにくい利点もあります。さらに、外部に見せる表示用IDと内部の主キーを分ける設計も有効です。

NILと名前空間型(v5)について

NIL UUIDは全128ビットが0の特殊な値(00000000-0000-0000-0000-000000000000)で、「値なし・未設定」を明示したいときに使います。本ツールでもバージョンとして選べます。一方、同じ入力から必ず同じUUIDを再現したい場合は、名前空間と名前をハッシュして決定的に生成するv5が向きます。v5はランダムではないため、URLやメールアドレスなどから安定したIDを繰り返し得たいケースで使い、シルギアの「UUID v5 ジェネレーター」で扱えます。

このツールの使い方と表記オプション

  1. バージョン(v4 / v7 / NIL)を選びます。
  2. 生成したい個数(1〜100)を指定します。
  3. 「ハイフンあり」「大文字」を必要に応じて切り替えます。
  4. 「生成する」を押すと一覧が出ます。各行の「コピー」「すべてコピー」、または「.txt でダウンロード」で取り込めます。

ハイフンを外せば32文字の連続した16進数に、大文字を選べば A〜F を大文字にそろえられます。ダウンロードは Blob でその場のファイルを作るだけで、生成もコピーも含めて外部サーバーには一切送信されません。乱数は crypto.getRandomValues(暗号学的に安全な乱数)を使うため、業務で扱う識別子も安心して量産できます。用途に迷ったら、まずはv4かv7を選んで試してみてください。

「UUID ジェネレーター」を使ってみる →

ほかの記事

CSSアニメーション(@keyframes)入門|作り方と緩急の付け方 CSSカラー名⇔HEX変換の使い方|148色と最近傍色の仕組み cron式の書き方入門|5フィールドと記号を図解で理解する Flexboxの効き方を目で理解|主軸・交差軸から生成CSSまで CSS Grid入門|fr・minmax・gap・整列を実例で解説 色覚シミュレーションの使い方|配色が色弱でどう見えるか確かめる

記事一覧をすべて見る →