何ができるか
このツールはブラウザ内で ULID を生成します。ULID は UUID と同じ 128 ビットの識別子ですが、26 文字で表記され、作成時刻順に並べられます。そのため、データベースの主キー、イベントやログの ID、ファイル名など、別のタイムスタンプ列を持たずに作成順に並べたいあらゆるものに適しています。
ULID は 2 つの部分からなります。
- タイムスタンプ(先頭 10 文字): Unix エポックからのミリ秒数で 48 ビット。西暦 10889 年まで使えます。
- ランダム部分(末尾 16 文字): ブラウザの暗号論的乱数生成器から得た 80 ビット。
ULID は Crockford の Base32 アルファベット 0123456789ABCDEFGHJKMNPQRSTVWXYZ を使います。I、L、O、U を除外しているので読み上げやすく打ち間違えにくく、URL でエスケープが必要な文字も含みません。
使い方
- 必要な ID の個数を 1〜1000 の範囲で選びます。
- 同じミリ秒に複数の ID を作成しても順序を保つ必要がある場合は、単調増加 をオンにします。新しい ID ごとにランダム部分が 1 ずつ増えます。
- システムが ID を小文字で保存する場合は 小文字 をオンにします。ULID は大文字小文字を区別せず、正規形は大文字です。
- リストをコピーするか、テキストファイルとしてダウンロードします。もう一度生成すれば新しい ID が作られます。
例
01ARZ3NDEKTSV4RRFFQ69G5FAV
ここで 01ARZ3NDEK はタイムスタンプ 1469922850259(2016-07-30 23:54:10.259 UTC)、TSV4RRFFQ69G5FAV はランダム部分です。1 秒違いで作成された 2 つの ULID は先頭の数文字が共通なので、単純な文字列ソートで時刻順に並びます。
ULID と UUID の比較
ランダムな UUID v4 では新しい行が B-tree インデックス全体に散らばるため、大きなテーブルでは挿入が遅くなります。ULID はおおむね増加していくので、自動採番の整数と同じように新しい行がインデックスの末尾に追加され、しかも調整なしで複数のマシン間で一意性を保てます。その代わり、ULID からはおおよその作成時刻がわかってしまいます。それが問題になる場合は UUID v4 を使ってください。
よくある質問
› ULID とは何ですか?
ULID(Universally Unique Lexicographically Sortable Identifier)は、Crockford の Base32 で 26 文字として表記される 128 ビットの ID です。先頭の 10 文字がミリ秒単位のタイムスタンプ、残りの 16 文字がランダムな値を表します。
› ULID と UUID のどちらを使うべきですか?
データベースのキーやログ ID など、作成時刻順に並ぶ ID が欲しい場合は ULID を使います。ID から作成時刻がわかってはいけない場合は UUID v4 を使います。UUID v7 も時刻順に並ぶ標準的な代替手段です。
› 単調増加モードとは何ですか?
同じミリ秒に作成された ID は通常それぞれ独立したランダム部分を持つため、そのミリ秒内での順序はランダムです。単調増加モードではランダム部分を代わりに 1 ずつ増やすので、バッチ内のすべての ID が直前の ID より必ず後ろに並びます。
› ID は安全に生成されていますか?
はい。ランダム部分はブラウザの暗号論的乱数生成器から取得し、サーバーには何も送信されません。