識別子

ULIDジェネレーター・時刻デコード

新しいIDを生成するか、既存の値を1行ずつ確認します。生成は手動、デコードは自動更新を選べます。

ULIDジェネレーター

入力

空欄なら実行時の現在時刻を一度だけ取得し、バッチ全体に使います。指定する場合は0〜281474976710655の整数です。秒やISO日時の自動判定はしません。

処理はこのブラウザー内で完結し、入力をサーバーへ送信しません。

結果

設定

有効時は最初の80ビットをランダムに決め、以降は1ずつ加算します。無効時は毎回独立した乱数を使います。別の生成操作との順序は保証しません。

生成数は1〜1,000件。デコードは1,000物理行、100,000個のUTF-16コード単位まで。出力には全件を含みます。

条件を選んで実行してください。

ログにあるIDの順序が想定と違うときは、文字列の長さよりも内蔵時刻と末尾を調べると原因を絞れます。ULIDジェネレーターなら、同じミリ秒に属する値と別の時刻の値を分けて確認できます。

テストデータの時刻を固定しても、ランダム部分は固定されません。既存の一覧を並べ替える場合も元の入力は動かさず、各レコードの行番号から比較対象をたどれます。

ULIDジェネレーターで確認できること

時刻とランダム部分を分離

ULIDジェネレーターは先頭10文字と末尾16文字を別々に表示し、Unixミリ秒とUTC時刻を併記します。日付表示だけでは見落としやすい、秒とミリ秒の取り違えを検証できます。

時計につながる時刻の接頭部と、不透明なランダム部分に分かれた識別子。

並べ替えた後も元の行へ戻れる

結果にはsourceLineが残るため、位置が変わった値を入力と照合できます。同じ値が複数あっても削除せず、元の出現位置ごとにレコードを保持します。

順不同の識別子と整列後の識別子を結ぶ線が、元の位置との対応を示している。

ミリ秒と並び順を取り違えないために

01

固定時刻の例で比較する

生成モードのサンプルは固定ミリ秒を設定するだけで、IDはまだ作りません。1700000000を入れても秒とは解釈せず、そのままミリ秒として扱います。

  • 現在時刻の取得はバッチにつき一度です。
02

単調性の範囲を選ぶ

単調モードでは同じバッチの末尾を加算します。無効にすると同じミリ秒でも末尾が毎回ランダムになり、辞書順と生成順が一致しない場合があります。

  • 次のクリックは別バッチです。前の末尾を引き継ぎません。
03

入力を変えずに整列する

デコードのサンプルは意図的に順序を入れ替えてあります。ASCII昇順を選び、sourceLineを比べてください。自動更新は350ミリ秒待ち、無効時はボタンかCtrl/Cmd+Enterで実行します。

  • 編集直後は出力を無効化します。サンプルと消去はプレビューで確認でき、一度だけ元に戻せます。

ミリ秒から全件レポートまで

条件をそろえたULID生成

1〜1,000件の大文字IDを一括生成できます。固定時刻が決めるのは接頭部だけです。末尾の乱数から始め、単調モードなら残りを連続した値にします。

内蔵フィールドのデコード

タイムスタンプ、UTCのISO表記、時刻部分、ランダム部分とその16進表記を確認できます。ランダム部分からユーザー名や端末情報を取り出す機能はありません。

エラー行を残さない原子的処理

不正な文字、桁数、上限超過を元の行と列で示します。1行でも不正なら全体を失敗扱いにし、エラー行を省いた結果を誤って出力することを防ぎます。

表示件数と出力件数を分離

表示は先頭50件から始まり、100件ずつ追加できます。生成のTXT・JSON、デコードのJSONには、まだ展開していないレコードも含む全件が入ります。

受け付ける表記と保証の範囲

Crockford Base32を厳密に確認
各行はASCIIの26文字です。大小文字だけを同一視し、I/Lを1やOを0へ置き換えることはしません。空行、空白、引用符、ハイフンを除去せず、重複も保持します。
48ビットのミリ秒範囲
0〜281474976710655を使用し、先頭文字は0〜7に限定します。遠い未来の時刻も形式としては有効です。時刻は生成者が指定できるため、実際の登録日時を証明しません。
バッチをまたぐ単調性は保証しない
80ビットの加算があふれたら全体を失敗にします。時刻を勝手に進めたり、乱数を引き直したりしません。クリック間、タブ間、端末間の状態は共有しません。
UUIDや秘密情報とは別の用途
128ビットという容量が同じでもUUIDのバージョンや文字形式には変換しません。データの存在確認もしません。時刻は読め、単調な隣接値は推測できるため、パスワードや認可トークンには使えません。
件数と入出力を限定
生成は1,000件、デコードは1,000物理行か100,000個のUTF-16コード単位まで。ファイル・URLの取り込み、SQL形式、重複削除、入力の並べ替え書き戻しには対応しません。

ULIDジェネレーターのよくある質問

ULIDから作成時刻を取り出せますか?

先頭10文字からUnixミリ秒を復元できます。ただし、その値は生成時に指定された時刻です。時計のずれや任意の時刻設定があり得るので、実際のレコード作成時刻の証拠にはなりません。

ULIDの単調性とは何ですか?

同じミリ秒でも後の値が辞書順で大きくなる性質です。このULIDジェネレーターでは最初の末尾を乱数で決め、同じバッチの後続値に1ずつ加算します。別のクリックの結果との順序は保証しません。

ULIDはどの文字セットを使いますか?

Crockford Base32の数字と英字を使い、I、L、O、Uを除きます。26文字のうち先頭10文字が時刻、後半16文字がランダム部分です。本ツールは別名文字の補正を行いません。

ULIDとUUID v7はどちらを選ぶべきですか?

どちらもミリ秒時刻を使うIDですが、UUID v7はUUIDの形式や対応ライブラリと統合したい場合に適しています。ULIDは26文字のBase32表記を利用できます。データベースや既存システムの受け付ける型に合わせて選んでください。

大文字と小文字は区別されますか?

ULIDとしては区別しません。このページは合法な小文字入力を受け付け、結果を大文字へ統一してからASCII順で比較します。ただし、接続先のデータベースやアプリの制約までは変更できません。

想定と違う結果が出ましたか?

ULIDジェネレーターを試す

ULIDジェネレーターで時刻を固定した小さなバッチを作り、次に順不同のサンプルをデコードして、時刻と元の行番号を照合してください。