ULIDジェネレーター - ソート可能なユニークID生成 オンライン
ULIDの生成、タイムスタンプの抽出、ULIDとUUID間の変換。厳密な順序付けのためのモノトニック生成 — 100%クライアントサイド、サーバーへのデータ送信なし。
一括生成
よくある質問
ULIDとは何ですか?
ULID(Universally Unique Lexicographically Sortable Identifier)は、CrockfordのBase32を使用して26文字の文字列としてエンコードされた128ビットの識別子です。従来のUUIDとは異なり、ULIDは最初の10文字に48ビットのUnixタイムスタンプ(ミリ秒単位)を埋め込み、残りの16文字に80ビットの暗号学的ランダム値を含みます。この設計により、ULIDはグローバルな一意性を維持しながら、作成時刻順に辞書式ソートが可能です。
このULIDジェネレーターはどう使いますか?
生成タブで単一またはバルクULID(最大1000個)を作成できます。同一ミリ秒内での厳密な順序を保証するにはMonotonicモードをオンにしてください。デコードタブでは任意のULIDを貼り付けて、埋め込まれたタイムスタンプ(ISO 8601、Unixミリ秒、ローカル時刻)を抽出できます。変換タブではULIDとUUID形式を相互変換できます。コピーボタンをクリックして結果をクリップボードにコピーしてください。
データは安全ですか?サーバーに送信されますか?
すべての操作はWeb Crypto API(crypto.getRandomValues())を使用して100%ブラウザ内で実行されます。ULIDデータ、タイムスタンプ、UUIDがサーバーに送信されたり、データベースに保存されたり、どこかに記録されることは一切ありません。インターネット接続を切断しても完全に動作することで確認できます。
ULIDとUUIDの違いは何ですか?
どちらも128ビットの識別子ですが、主な違いがあります。ULIDは26文字(CrockfordのBase32)、UUIDは36文字(ハイフン付き16進数)です。ULIDは作成時刻順に辞書式ソートが可能ですが、UUID(v4)はランダム順です。ULIDには特殊文字が含まれず、URLセーフです。どちらも128ビット値であるため、ULIDとUUID間の相互変換が可能です。
Monotonic ULID生成とは何ですか?
同一ミリ秒内に複数のULIDを生成する場合、標準的な生成方式では毎回ランダムな値を割り当てるため、ULIDの順序が保証されない場合があります。Monotonic生成は、同一ミリ秒内で生成される各ULIDのランダム部分を1ずつ増加させることでこの問題を解決し、厳密な辞書式順序を保証します。これはIDの順序に依存するデータベースシステムにとって重要です。
UUIDの代わりにULIDをいつ使うべきですか?
別のタイムスタンプカラムなしで時刻順ソート可能な識別子が必要な場合、データベースインデックスの性能向上(B-treeフレンドリー)、より短い文字列表現(26文字 vs 36文字)、URLセーフな識別子が必要な場合にULIDを使用してください。最大限のエコシステム互換性、RFC準拠、組み込みのバージョン/バリアントメタデータが必要な場合はUUIDを使用してください。
コード例
// Crockford's Base32 alphabet
const ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
// Generate a ULID
function generateULID() {
const timestamp = Date.now();
let ts = timestamp;
let timestampPart = '';
for (let i = 9; i >= 0; i--) {
timestampPart = ENCODING[ts % 32] + timestampPart;
ts = Math.floor(ts / 32);
}
const randomBytes = new Uint8Array(10);
crypto.getRandomValues(randomBytes);
const bits = Array.from(randomBytes)
.map(b => b.toString(2).padStart(8, '0')).join('');
let randomPart = '';
for (let i = 0; i < 16; i++) {
randomPart += ENCODING[parseInt(bits.slice(i*5, i*5+5), 2)];
}
return timestampPart + randomPart;
}
console.log(generateULID()); // "01ARZ3NDEKTSV4RRFFQ69G5FAV"