コンテンツへスキップ
uencoder

コンパクトな一意 ID として NanoID を生成する

NanoID は小さくて URL セーフな一意 ID ジェネレーターです。UUID より小さく高速で、アルファベットとサイズをカスタマイズできます。

  1. 1

    NanoID は 21 文字の URL セーフな ID です(デフォルトのアルファベット:A-Za-z0-9_-)。UUID v4(ハイフン付き 36 文字)より 4 バイト短く、生成も高速です。衝突確率は無視できます。64 文字のアルファベットから 21 文字なら、50% の衝突確率に 2^63 個の ID が必要です。NanoID は URL、データベースキー、コンポーネント ID に理想的です。

  2. 2
    UUID / ULID ジェネレーター →

    比較のために UUID を生成します。UUID v4 は 36 文字(16 進 32 文字+ハイフン 4 つ)です。NanoID は 21 文字で 40% 短いです。URL セーフな ID には NanoID が適しています(UUID のハイフンは文脈によってはエンコードが必要)。RFC 4122 準拠が必要なら UUID を、コンパクトで URL セーフな ID には NanoID を使ってください。

  3. 3
    Base58 エンコーダー →

    さらに短い ID には、乱数を Base58(Bitcoin アルファベット、0/O/I/l なし)でエンコードします。16 バイトの乱数の Base58 は約 22 文字です。Base58 は URL セーフで人が読めます(紛らわしい文字なし)。長さが重要なユーザー向け ID に使ってください。

  4. 4
    ランダムバイトジェネレーター →

    NanoID 用のランダムバイトを生成します。NanoID はセキュリティのため CSPRNG(crypto.getRandomValues)を使います。64 文字のアルファベットから 21 文字で 126 ビットのエントロピーが得られ、衝突確率が無視できるほどの大域的一意性に十分です。

よくある質問

NanoID と UUID のどちらを使うべきですか?
コンパクトで URL セーフな ID(URL、データベースキー、コンポーネント ID)には NanoID を使ってください。RFC 4122 準拠、標準形式(8-4-4-4-12)、UUID を期待するシステムとの相互運用が必要なら UUID を使ってください。NanoID は短く(21 vs 36 文字)高速ですが、UUID の方が広く認識されています。
NanoID はカスタマイズできますか?
はい。サイズ(デフォルト 21)とアルファベット(デフォルトは URL セーフな _-0-9a-zA-Z)を指定できます。1 文字あたりのエントロピーを増やすには、より大きなアルファベット(Base64)を使ってください。人が読む ID には、紛らわしい文字(0/O、1/l/I)を除いたカスタムアルファベットを。プレフィックス付き ID(user_xxx など)には、生成した ID にプレフィックスを付けてください。

このタスクを解決するワークフロー

関連ツール