フィクスチャやテスト用の短いIDを生成する
シードデータ・テスト用フィクスチャ・共有リンクには、短くURL安全で衝突しにくいIDが必要です。
このガイドで使う道具
やりたいこと
UUIDはどこでも使えますが、URLでは長くて不格好です。NanoIDは同等の乱数を21文字のURL安全な文字列に収めます。ULIDは先頭にタイムスタンプを持つため、作成順でソートできます。
まとめて生成
NanoIDかULIDを選び、個数を設定して生成します。NanoIDは長さと文字種も変えられ、数字のみ・小文字のみ・似た字形を除く指定ができます。
- 既定の文字種21文字は約126bitで、多くの用途で衝突しません。
- ULIDは26文字でミリ秒単位の時刻順になり、それ以外の情報は埋め込まれません。
具体例
50人のテストユーザーのシードには、既定サイズのNanoIDを50個生成してフィクスチャのidに貼ります。インデックスなしで作成順に並べたい監査ログにはULIDが向いています。
乱数と制限
crypto.getRandomValuesと棄却サンプリングを使い、どの文字も等確率で選ばれます。UUID v4と同じ品質です。1回100個まで、NanoIDの長さは512文字まで。
- NanoIDは大文字小文字を区別するURL安全な形式です。識別子を小文字化するシステムには向きません。
- DBでの一意性を保証するには一意制約が必要です。生成されるIDはランダムであり、調整された連番ではありません。