UUID・ULID を生成する
テストデータや主キーに使う識別子をまとめて作ります。用途に応じて形式を選び、そのままコピーできます。生成はブラウザ内で完結します。
生成はブラウザ内で完結し、通信は発生しません。UUID v7 と ULID は先頭にミリ秒の時刻を含むため、生成した順に並べ替えられます(同一ミリ秒内でも順序が保たれるようカウンタを持たせています)。
使い方
- 種類を選びます。データベースの主キーにするなら、挿入順に並ぶ v7 か ULID が扱いやすいです
- 個数を選んで「生成する」を押します
- コピー形式を選んで「すべてコピー」を押します
よくある質問
v4 と v7 はどう違いますか?
v4 は全体が乱数です。v7 は先頭 48 ビットがミリ秒単位の時刻で、残りが乱数です。そのため v7 は文字列として並べ替えると生成した順に並びます。データベースの主キーに使う場合、順に並ぶほうがインデックスの断片化が起きにくく有利です。ランダム性が必要な場面(推測されたくない識別子)では v4 を使ってください。
同じミリ秒に大量に生成しても順序は保たれますか?
保たれます。単純な実装では、同一ミリ秒内に作られた識別子は時刻部分が同じで残りが乱数になるため、並べ替えても生成順にはなりません。このツールは RFC 9562 が定める方式に従い、ミリ秒内では 12 ビットのカウンタを増やしていくため、まとめて生成した分も順序が保たれます。
ULID と UUID v7 のどちらを選ぶべきですか?
どちらも時刻を先頭に持つ設計で、性質は近いです。ULID は 26 文字で、大文字と数字のみ(紛らわしい文字を除いた 32 種類)なので、URL に入れたり口頭で伝えたりしやすいです。UUID v7 は標準の UUID 形式なので、既存のライブラリやデータベースの UUID 型にそのまま入ります。既存のシステムに合わせるなら v7、新規で扱いやすさを取るなら ULID です。
乱数の質は大丈夫ですか?
ブラウザの暗号用途の乱数生成器(crypto.getRandomValues)を使っています。また、文字を選ぶ際に剰余をそのまま使うと文字ごとの出現確率が偏るため、棄却サンプリングという方法で偏りを除いています。