TL;DR
高速で安全、手軽にランダム文字列を生成したいときはai/nanoidを使う。
特徴
README.mdより意訳しています。
- 手軽:サイズ108bytes (min & gzip)、依存パッケージ無し
- 高速:UUIDより40%速い
- 安全:重複しづらく、予測されにくく、偏りが小さい
-
短い:
[a-zA-Z0-9_-]
を使うので生成される文字列を安全に短くできる -
多言語:
Node.js
以外にも14のプログラミング言語で利用できる
使い方
デフォルトでは[a-zA-Z0-9_-]
から21文字で生成されます。
import { nanoid } from 'nanoid'
nanoid() //=> "yVQk_rn0A60LXcOR-2voE"
非同期に生成する
import { nanoid } from 'nanoid/async'
async function createUser () {
user.id = await nanoid()
}
任意の長さにする
短くするほど重複しやすくなるので注意してください。
重複しやすさを簡易計算できるサイトもあるので参考にしましょう。
nanoid(10) //=> "3juqViJh32"
nanoid(3) //=> "eEh"
出現する文字を絞る
customAlphabet
の引数に使いたい文字と文字長を指定すると、ランダム文字列生成関数が作れます。
import { customAlphabet } from 'nanoid'
const randomColor = customAlphabet('1234567890abcdef', 6)
font.color = `#${randomColor()}` //=> "#a1ea8e"
ちなみに、CyberAP/nanoid-dictionaryというパッケージを利用すれば、使いたい文字に指定できる頻出パターンが入っています。
-
numbers
:0〜9の数字 -
lowercase
:小文字の英字 -
uppercase
:大文字の英字 -
nolookalikes
:a-zA-Z0-9
から見間違いやすい1
,l
,I
,0
,O
,o
,u
,v
,5
,S
,s
を取り除いたもの
記事執筆時点のバージョン
// $ cat node_modules/nanoid/package.json | jq '{ name, version }'
{
"name": "nanoid",
"version": "3.0.2"
}