ULID ジェネレーター
ULIDをオンラインで生成。単体またはバッチ(最大100件)対応。タイムスタンプとランダム部分を表示。ULIDデコーダー内蔵。外部ライブラリなしでブラウザ内で処理します。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
ULID の構造
01ARZ3NDEKTSV4RRFFQ69G5FAV
├─ タイムスタンプ(10文字)─┤├── ランダム部分(16文字)──┤
48ビット ミリ秒タイムスタンプ 80ビット:乱数、または同じミリ秒内で直前の値 + 1
1 文字が 5 ビットを表し、使う文字は Crockford Base32 の 0123456789ABCDEFGHJKMNPQRSTVWXYZ です。10 文字で 50 ビットになり、48 ビットのタイムスタンプより 2 ビット多いため、先頭の文字は 0〜7 しか使えません。
元日 0 時(日本時間)に作った ULID を読む
ある予約システムが 2027 年 1 月 1 日 0 時ちょうど(日本時間)に ULID を 3 個作ったとします。この瞬間は UTC では 2026 年 12 月 31 日 15 時です。ツールと同じ生成関数に、乱数の代わりに固定のバイト列を与えて再現すると次のようになります。
01MB69TWC07J0J57G5TXN43E7Y01MB69TWC07J0J57G5TXN43E7Z01MB69TWC07J0J57G5TXN43E80
3 個とも先頭 10 文字は 01MB69TWC0 です。2 個目から 3 個目では末尾の Z が繰り上がって 80 になっています。Crockford Base32 では Z が最大の 31 なので、10 進数の 19 に 1 を足すと 20 になるのと同じ動きです。文字列として並べ替えても順番は崩れません。
1 個目の 01MB69TWC07J0J57G5TXN43E7Y をデコーダーに貼り付けると、表示はこうなります。
- タイムスタンプ:
2026-12-31 15:00:00.000 UTC - ミリ秒(epoch):
1798729200000 - 日本時間(Asia/Tokyo)に直すと:
2027-01-01 00:00:00.000
ツールは UTC だけを表示するので、日付が 12 月 31 日に見えます。「年が明けてから作られたレコードか」を確かめるときは 9 時間を足してから判断してください。ミリ秒の値をタイムスタンプ変換ツールに貼ると、ブラウザーのタイムゾーンで表示できます。
全角で貼り付けたときと、紛らわしい文字
日本語入力がオンのまま ULID を打ち込むと、英数字が全角になります。デコーダーは前後の空白を取り除き、小文字を大文字に直しますが、全角文字を半角に変換はしません。そのため次の入力はエラーになります。
入力 01MB69TWC07J0J57G5TXN43E7Y、表示 無効なULID
日本語入力をオフにして打ち直すか、エディターで半角に変換してから貼り付けてください。
もう一つよくあるのが、数字の 0 と英字の O、数字の 1 と英字の I・L の取り違えです。Crockford が公開している Base32 の説明では、デコード時に O を 0、I と L を 1 と読み替えてよいとしていますが、このツールは推測で読み替えないため、無効な ULID として扱います。元のデータを確認してから貼り付け直してください。
ULID と UUID の比較
| 特徴 | ULID | UUID v4 |
|---|---|---|
| 長さ | 26文字 | 36文字(ハイフン含む) |
| ソート可能 | ✓ はい | ✗ いいえ |
| タイムスタンプ内蔵 | ✓ はい | ✗ いいえ |
| URL安全 | ✓ はい | ✓ はい |
| 大文字小文字不区別 | ✓ はい | ✓ はい |
| ランダムビット数 | 80ビット | 122ビット |
UUID バージョン 7(RFC 9562 の 5.7 節)も 48 ビットのミリ秒タイムスタンプで始まり、データベースの uuid 型にそのまま入ります。ULID は 26 文字の文字列か、デコードした 16 バイトで保存するのが一般的です。どちらも ID を見た人に作成時刻が分かる点は同じなので、公開 URL に作成時刻を出したくない場合はランダムな UUID v4 を使ってください。
制限
- 1 回に生成できるのは最大 100 件です。100 を超えると 100、1 未満・空欄・数値以外は 1 として扱います。
- デコーダーが受け付けるのはアルファベットの 32 文字だけです。全角文字や I・L・O・U は無効になります。
- デコード結果は UTC の日時とミリ秒だけで、日本時間への換算やランダム部分の解析はしません。
- 小文字での出力や、ULID を UUID 形式・16 バイトに変換する機能はありません。
- 同じミリ秒内でランダム部分が
ZZZZZZZZZZZZZZZZに達すると、先頭に戻らずに溢れたというメッセージで止まります。ランダムな値から始まるので、実際には 279 個ほど作らないと起こりません。
関連ツール
- UUID ジェネレーター — 標準的な UUID v4 を生成
- Nano ID ジェネレーター — タイムスタンプを含まない短いランダム ID
FAQ
ULIDとは何ですか?
ULID(Universally Unique Lexicographically Sortable Identifier)は、Crockford Base32 の 26 文字で表す 128 ビットの識別子です。UUID v4 と違い、文字列として辞書順に並べるとそのまま作成順になります。先頭 10 文字が 48 ビットのミリ秒タイムスタンプ、残り 16 文字が 80 ビットのランダム部分です。
ULIDの構造を教えてください。
ULID は 26 文字です。先頭 10 文字がタイムスタンプ(48 ビット、ミリ秒精度、西暦 10889 年まで表せます)、残り 16 文字が 80 ビットのランダム部分で、crypto.getRandomValues から得ます。ただし同じミリ秒内の次の ULID は、直前のランダム部分に 1 を足した値になります。エンコードは Crockford Base32(0-9 と A-Z から I・L・O・U を除いた 32 文字)です。
ULIDとUUIDの違いは何ですか?
UUID v4 は完全にランダムで、作成順に並びません。ULID は辞書順がそのまま作成順なので、データベースの主キーに向いています。順に挿入されるため B-tree のページ分割が減り、範囲検索も速くなります。ULID は URL にそのまま使え、大文字小文字を区別しません。
ULIDデコーダーは何のためですか?
既存の ULID を貼り付けると、作成時刻を取り出せます。created_at 列がなくても ID からレコードの作成日時が分かるので、デバッグに役立ちます。大文字・小文字どちらでも読めます。先頭の文字が 7 より大きい ULID はエラーになります。最大の ULID は 7ZZZZZZZZZZZZZZZZZZZZZZZZZ で、それより大きい値は 128 ビットに収まりません(ULID 仕様「Overflow Errors when Parsing Base32 Strings」)。
1 回のバッチで生成した ULID は順番に並んでいますか?
はい。バッチはふつう同じミリ秒内に生成されるので、タイムスタンプが同じになります。ULID 仕様の単調性(Monotonicity)の節のとおり、2 個目以降はランダム部分を直前の値に 1 足して作るため、一覧はそのまま辞書順に並びます(…EMMVRZ の次は …EMMVS0)。ミリ秒が変わると新しい乱数から始めます。同じミリ秒内でランダム部分が ZZZZZZZZZZZZZZZZ を超えそうになると、先頭に戻らずエラーで止まります。
生成・デコードした ULID はどこかに送信・保存されますか?
されません。生成にはブラウザの Web Crypto API(crypto.getRandomValues)と Date.now() を使い、デコードも同じページの中で行います。生成した ULID や貼り付けた ULID は ZeroTool に送られず、ページを離れると ULID も設定も残りません。ページの Google Analytics が記録するのは使った操作(生成、デコード、コピー)の種類だけで、ULID の値は含みません。