開発ツールを整える
中級UUID・ULIDを整える。
= 世界でかぶらない番号(UUID/ULID)を作って・確かめる
UUID が初めての方は、先に そもそも UUID とは・どんな場面で使うか をどうぞ。
v4 は完全にランダム。理論上は衝突(同じ値が出ること)が起きえますが、確率は天文学的に小さく実用上ゼロです(保証はしません)。
1行目の UUID の分解図(8-4-4-4-12)
ULID は先頭に生成時刻が入るため、生成順におおむね辞書順ソートできます(同一ミリ秒内の前後は保証しません)。26文字・Crockford Base32(紛らわしい I/L/O/U を除く)。
1行目の ULID の分解図(時刻10文字+ランダム16文字)
NIL UUID(全ゼロ)
00000000-0000-0000-0000-000000000000 「IDなし」を表す予約値。上の表示形式トグルに連動します。
そもそも UUID とは
同じものが二度と出ない、背番号を自分で作る方法。
UUID は Universally Unique Identifier(世界で一意の識別子)の略で、Microsoft の環境では GUID と呼ばれることもあります。550e8400-e29b-41d4-a716-446655440000 のような、ハイフンで区切った36文字の ID です。128ビットの大きな数を16進数で書いたものです。
通常、番号を振るには「1番、2番、…」と数える係が必要です。係がいると、その係の前に行列ができますし、別々の場所で番号をつけると重なります。UUID は十分に大きな数の中から無作為に選ぶことで、係に聞かなくてもほぼ確実に重ならない番号をその場で作れるのが特長です。宝くじで同じ番号を二度当てるくらい、と言うとイメージしやすいでしょう。
どこで・どんな場面で使うか
-
データベースの主キー(行の ID)
ユーザーや注文に振る ID として使われます。連番と違い、件数や順番を外から推測されにくくなります。
-
複数のサーバーや端末が別々に ID を作るとき
スマホで作ったデータを後からサーバーへ送るなど、ID を決める係を置けない場面で重宝します。
-
アップロードされたファイルの名前
ファイル名の重複や、元の名前に含まれる日本語の問題を避けるために、UUID を名前にして保存します。
-
ログや処理の追跡 ID
1回のリクエストに ID を振り、複数のサーバーのログを同じ ID で追いかけて、不具合を調べます。
-
テストデータや資料づくり
ダミーのデータを大量に作るときや、設定ファイルにサンプルの ID を書くときに、すぐ作れて便利です。
なぜ覚えておくと得か
- 連番の ID より安全な設計ができる。ID が連番だと、数字を変えるだけで他人のデータを見に行かれる恐れがあります。推測しにくい ID はその対策のひとつになります。
- システムの設計の選択肢が増える。「ID を誰が決めるか」の悩みが減り、あとからデータを合体させるときも楽になります。
- 見慣れない文字列の正体が分かる。設定画面やログに出てくる
8-4-4-4-12の並びが UUID だと分かれば、読み飛ばしてよいか判断できます。
上のツールで UUID をいくつか作って、毎回まったく違う文字列になることを確かめてみてください。
UUID と ULID・要点4つ
「世界でかぶらない番号」を、サーバに頼まず自分で作る。
- 1
UUID v4 = ほぼ全部ランダム
128bit のうち 122bit が乱数。形式は
8-4-4-4-12の36文字で、13文字目が必ず「4」(バージョン)、17文字目が 8 / 9 / a / b(バリアント)になります。数が膨大なので、別々の端末が同時に作っても実質ぶつかりません。 - 2
ULID = 時刻つきでソートできる ID
先頭48bit に生成時刻(ミリ秒)、残り80bit が乱数。26文字の Crockford Base32 で、見た目で並べるとおおむね生成順になります。データベースの主キーに使うと、ランダムな UUID v4 より挿入が素直になりやすいのが利点。逆順に時刻を取り出すこともできます(このページの検証で確認できます)。
- 3
形は自由に整えられる
UUID はハイフンを取った32桁ベタ書き、大文字、
{…}波括弧つき(Windows レジストリなどで見る形)など、用途で書き方が変わります。中身は同じなので、上のトグルで貼り替えられます。 - 4
乱数はブラウザの暗号乱数
このツールは
crypto.randomUUID()/crypto.getRandomValues()を使います。Math.random()のような予測されうる乱数ではなく、暗号用途に耐える乱数です。生成も検証もすべてこの端末の中で完結し、サーバには送られません(送信ゼロ)。
⚠ ひとこと注意
UUID v4 の衝突は実質ゼロですが、数学的に「絶対起きない」保証ではありません。ULID は生成順ソートできる反面、IDから生成時刻が読めるため、時刻を隠したい場面では向きません。どちらも「秘密の値(パスワード・トークン)」ではないので、推測されて困る用途には別の仕組みを使ってください。
🔒 生成・検証はすべてあなたのブラウザの中(Web Crypto API と純JavaScript)で完結します。作った ID も貼り付けた文字列もサーバには送られません(送信ゼロ)。
このツールについて
プログラムで「世界でかぶらない番号(ID)」を作るときに使う UUID と ULID を、その場で生成・検証できる道具です。何個でもまとめて作れて、貼り付ければ妥当性や埋め込まれた時刻も読み取れます。乱数はこの端末の暗号乱数(crypto)で作り、入力も結果も外には一切出ません(送信ゼロ)。
プログラム用の「世界でかぶらない番号」=UUID v4 と ULID を、その場で生成・整形・検証。ULIDは時刻つきでソート可。乱数はブラウザの暗号乱数、送信ゼロ。
🔰 かんたんに言うと
プログラムで使う「世界で重複しない番号」を作ります。
主な機能
- UUID v4 を個数指定(1〜100)でまとめて生成
- ULID 生成(時刻48bit+乱数80bit・26文字・生成順ソート可)
- ハイフン有無・大文字小文字・波括弧トグル+NIL UUID+全部コピー
- 貼り付けた文字列の UUID 判定(バージョン・バリアント)
- ULID 判定と埋め込み時刻の復元表示
- 暗号乱数・生成も検証もブラウザ内完結(送信ゼロ)
- UUID・ULIDの各桁(バージョン・バリアント・時刻部分)を色分けして分解表示
よくある質問
Q. UUID と ULID はどう違いますか?
A. UUID v4 は完全ランダムな128bit ID。ULID は先頭に生成時刻が入る26文字で、生成順におおむねソートできます。並び順が欲しいなら ULID、純粋に一意でよければ UUID v4 です。
Q. UUID v4 は本当にかぶらないのですか?
A. 122bit の乱数なので衝突確率は天文学的に小さく、実用上ゼロです。ただし数学的に「絶対起きない」保証ではありません。
Q. 生成した値はサーバに送られますか?
A. いいえ。crypto.randomUUID / crypto.getRandomValues でこの端末の中だけで作られ、貼り付けた検証文字列も外に出ません(送信ゼロ)。
Q. ULID から時刻が読めるのは問題ですか?
A. 用途次第です。並び替えや作成時刻の把握に便利な反面、ID から生成時刻が分かるので、時刻を秘密にしたい場面では UUID v4 が向きます。
Q. ハイフンなし・大文字・波括弧つきはどう使い分けますか?
A. 中身は同じ ID で表記が違うだけです。波括弧つきは Windows レジストリ等、ハイフンなし32桁はURLやファイル名でよく使われます。トグルで貼り替えられます。
Q. UUID や ULID をパスワードやトークン代わりに使えますか?
A. 推奨しません。どちらも「秘密の値」ではなく一意な識別子です。推測されて困る用途には専用のランダムトークンを使ってください。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。