← ハシトシステム トップ English ツール ブログ
生成

ULIDの構造と使いどころ

構造(タイムスタンプ+乱数)

ULIDは128ビットで、先頭48ビットが「1970年からのミリ秒」、残り80ビットが乱数です。これを Crockford Base32(0-9 と紛らわしい文字を除いた A-Z)で符号化し、26文字の文字列にします。先頭がタイムスタンプなので、同じミリ秒内でなければ生成順に文字列がソートされます。

UUIDとの使い分け

ランダム性だけが欲しいなら UUID v4、時系列に並ぶ主キーが欲しいなら ULID が向きます。ULIDはデータベースのB木インデックスで挿入が末尾寄りになりやすく、断片化を抑えやすい利点があります。時刻を推測されたくない用途にはランダムなUUID v4を選んでください。

小文字出力・件数

ULIDの正規表記は大文字ですが、小文字で扱うシステム向けに「小文字で出力」を選べます(値は同一)。件数は最大1000件までまとめて生成できます。乱数には crypto.getRandomValues を使用します。

よくある質問(FAQ)

ULIDとは何ですか?

128ビットの一意な識別子で、先頭48ビットがミリ秒タイムスタンプ、残り80ビットが乱数です。Crockford Base32で26文字として表され、生成順に文字列としてソートできます。UUIDの代替として使われます。

ULIDとUUIDの違いは?

UUID v4は完全ランダムでソート順に意味がありませんが、ULIDは先頭のタイムスタンプにより辞書順=生成時刻順になります。表記も26文字とUUID(36文字)より短く、ハイフンが無いのでURLにも使いやすいです。

生成したULIDは安全ですか?

はい。生成はすべてブラウザ内で行われ、乱数は暗号学的に安全な crypto.getRandomValues を使用します。生成結果がサーバーへ送信されることはありません。