シルギア

UUID v5とは?名前から同じIDを毎回作る仕組みと使い方

公開日:2026年9月26日 更新日:2026年9月15日 運営:シルギア(Analyzegear, Inc.) 対象ツール:UUID v5(名前空間)生成

UUID v5は、「名前空間UUID」と「名前(文字列)」の2つを入力すると、いつ・どの端末で・誰が実行しても必ず同じUUIDを返す決定的な識別子です。ランダムに作るv4とは正反対で、同じ入力には同じIDを保証したい場面に向きます。このツールは名前空間と名前を入れるだけで、その計算をすべてブラウザ内で完結させ、入力内容はどこにも送信しません。この記事では、なぜ同じ入力から同じUUIDが出るのかという仕組みから、標準名前空間の選び方、具体的な数値例までを実装に沿って解説します。

UUID v5とは何か

UUIDは128ビット(16バイト)の識別子で、8-4-4-4-12の16進36文字で表記します。その中でv5は「名前ベース」のバージョンにあたり、ある名前に対して安定したIDを割り当てるために使います。たとえばドメイン名や外部システムのキーに対して「毎回同じUUID」を振りたいとき、採番テーブルを事前に用意しなくても、名前から一意なIDをその場で導出できます。冪等(何度実行しても同じ結果)であることが最大の価値で、分散した複数の環境で採番を突き合わせる必要がなくなります。

生成の仕組み(RFC 4122 §4.3)

生成手順はRFC 4122の§4.3に沿っています。まず名前空間UUIDを16バイトのバイト列へ変換し、その後ろに名前のUTF-8バイト列を連結します。次に、この連結データ全体をSHA-1でハッシュ化して20バイトを得て、先頭16バイトを取り出します。最後に2箇所のビットを書き換えます。6番目のバイトの上位4ビットを0101(=バージョン5)に、8番目のバイトの上位2ビットを10(=RFC 4122のvariant)に固定し、8-4-4-4-12へ整形します。

この2箇所のビット固定があるため、UUID v5には見た目の特徴が現れます。3つ目のブロックの先頭が必ず5になり、4つ目のブロックの先頭が8・9・a・bのいずれかになります。逆に言えば、この2桁を見れば「バージョン5でvariantが正しいUUIDか」を目視で確認できます。ハッシュ以外にランダム要素を一切使わないため、入力が同じならハッシュも同じになり、結果のUUIDも常に一致します。

v4(ランダム)との違いと使い分け

v4はランダムなビットからUUIDを作るバージョンで、実行するたびに異なる値になります。とにかく重複しにくい一意なIDが欲しいだけならv4が手軽です。一方でv5は決定的なので、次のような場面で威力を発揮します。

  • あるドメイン名・URL・外部キーに対して、毎回同じ安定したIDを割り当てたい
  • 採番テーブルやDBのシーケンスを持たずに、名前からIDを導出したい
  • 同じデータを別々のシステムで取り込んでも、同一のIDに収束させたい

言い換えると、v4は「新しく一意な値を発行する」道具、v5は「既存の名前を安定したIDへ写像する」道具です。目的が採番なのか写像なのかで選び分けてください。

標準名前空間とカスタム名前空間

名前空間は「そのUUIDがどの世界の名前を指すか」を決めるIDです。RFC 4122は4種類を定義済みで、このツールはプリセットとして用意しています。

  • DNS(6ba7b810-9dad-11d1-80b4-00c04fd430c8): 名前がドメイン名のとき
  • URL(6ba7b811-…): 名前がURLのとき
  • OID(6ba7b812-…): ISOオブジェクト識別子のとき
  • X.500 DN(6ba7b814-…): X.500の識別名のとき

どれにも当てはまらない独自の識別子なら、自分のプロジェクト用にランダムなUUIDを1つ決めて「カスタム」に入れ、それを使い回すのが定石です。名前空間を分けておくと、同じ名前文字列でも名前空間が違えば別のUUIDになるため、用途ごとにID空間を衝突なく分離できます。ツールの名前空間欄を手で書き換えると、自動的にカスタム扱いへ切り替わります。

具体例で確かめる

実装が正しいかは既知の値で確認できます。名前空間にDNS、名前にexample.comを入れると、結果はcfbff0d1-9375-5685-968c-48ce8b15ae17になります。これはRFC文書などで広く知られた値で、このツールの出力とも一致します。3つ目のブロックが5685で先頭が5、4つ目のブロックが968cで先頭が9になっている点にも注目してください。バージョンとvariantのビット固定がきちんと効いている証拠です。

入力の表記ゆれにも敏感です。名前はUTF-8バイト列としてそのままハッシュされるため、大文字小文字や空白の有無で結果が変わります。DNS+「Example」は496a0546-4c3f-5aa8-9e1d-8bed7afe59d4、DNS+「example」は7cb48787-6d91-5b9f-bc60-f30298ea5736となり、たった1文字の差でまったく別のUUIDになります。安定したIDを得るには、入力する名前の正規化(小文字化や前後空白の除去など)を自分のルールで決めておくことが大切です。

使うときの注意と使いどころ

いくつか押さえておきたい点があります。まず、名前が空文字列でもUUIDは生成されます(空文字のUTF-8バイト列を0バイトとして扱うため)。次に、このツールはv5専用で、MD5を使うv3には対応していません。v3とv5はアルゴリズムがほぼ同じでハッシュ関数だけが異なり、一般には新しいv5が推奨されます。

用途の面では、決定的である以上「秘密の名前から推測されないID」を作る用途には向きません。攻撃者が名前を知っていれば同じUUIDを再現できるからです。またSHA-1・MD5とも、暗号学的な強度を期待する処理(署名・改ざん検知など)には使えません。UUID v5はあくまで、名前から安定した識別子を導出するための仕組みとして使ってください。計算はすべて端末内で行われ、入力した名前空間や名前は送信されないため、オフラインでも安心して試せます。

「UUID v5(名前空間)生成」を使ってみる →

ほかの記事

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

記事一覧をすべて見る →