ssecutils

🆔 ULID Generator

Crockford Base32 でエンコードされた 26 文字の ULID(Universally Unique Lexicographically Sortable Identifier)を生成します。 先頭 48 bit がミリ秒タイムスタンプ、残り 80 bit がランダムで、文字列ソートで時系列順に並びます。すべてブラウザ内で crypto.getRandomValues による暗号学的乱数で生成され、サーバーには送信されません。

1〜1000
結果(0 件)タイムスタンプ(ローカル時刻)

タイムスタンプを抽出

既存のULIDを貼り付けると、先頭10文字から生成時刻を取り出します。

💡 ULID について

  • 26文字、固定長: UUID(36文字、ハイフン込み)より短く、URLやログに入れやすい形式です。
  • 辞書順 = 時系列順: 先頭48bitがUNIXミリ秒なので、文字列としてソートすると生成時刻順に並びます。RDBの主キーやログ識別子に使うと、B-treeインデックスのページ分散が抑えられ書き込みが安定します。
  • Crockford Base32: アルファベット 0123456789ABCDEFGHJKMNPQRSTVWXYZ。視認性を上げるため I / L / O / U を除外しています。
  • UUID v7との関係: 設計思想は近く、どちらも先頭にタイムスタンプを置く方式です。UUID v7はバイナリ16バイトのHEX表記(36文字)、ULIDはBase32表記(26文字)という違いがあります。
  • ランダム部分は crypto.getRandomValues による暗号学的に安全な乱数で生成します。Math.random() は使いません。
使い方と解説

ULIDを生成しタイムスタンプを確認する

ULID Generator は、Crockford Base32 エンコードの 26 文字 ULID をブラウザ内で生成するツールです。文字列ソートで時系列に並ぶため、ログID、イベントID、DBの主キーで時系列順を維持したい場面に向いています。

入力データの扱い

ULIDの生成はブラウザ内で行われ、crypto.getRandomValues による暗号学的乱数を使用します。生成結果はサーバーへ送信されません。

UUIDとの使い分け

ULIDの先頭48bitはUNIXミリ秒タイムスタンプ、残り80bitがランダム値です。UUID v7と設計思想が近く、辞書順ソートと生成時刻順が一致します。表記は短くて大文字英数字のみ(IとLとOとUは除外)なので、URLやログにも入れやすい形式です。

時系列インデックスとの相性

B-treeインデックスでは、挿入順がインデックスのページ末尾に集中するほど断片化が抑えられ書き込みが安定します。完全ランダムなUUID v4と比べて、ULIDやUUID v7は近い時刻のレコードがインデックス上で近接するため、書き込み性能と読み出しキャッシュ効率の両方を高めやすくなります。

文字セットが読み間違いを防ぐ設計になっている

ULIDが使うCrockford Base32は、通常のBase32とは違って I・L・O・U の4文字を意図的に除外しています。理由は明快で、0 と O、1 と I と L が人間の目で見分けにくいからです(U は不適切な語が生成されるのを避けるため)。この設計のおかげで、ログに出たIDを人が読み上げたり手で書き写したりする場面でも取り違えが起きにくくなっています。生成したULIDの先頭10文字を見比べると、同じ時刻に作ったものは先頭が共通し、後半のランダム部分だけが変わるのが分かります。この先頭部分がUNIXミリ秒をBase32で表したもので、文字列を単純にソートするだけで生成順に並ぶ理由です。IDから生成時刻を復元できるということは、IDを外部に見せると作成日時も伝わるという意味でもあるので、秘匿したい場面では注意してください。

ULID Generator でできること

  • Crockford Base32 で26文字、IとLとOとUを除外
  • 先頭10文字がUNIXミリ秒、残り16文字がランダム
  • 文字列ソートで時系列順に並ぶ
関連ツール

次に使うツール

作業の流れに近いツールへすぐ移動できます。

解説記事

このツールに関連する解説記事

すべての記事 →