ランダムな文字列を作成する時に便利なjavascriptライブラリ「nanoid」の紹介です。
nanoidで出来ること
- UUIDよりも短い文字数で、重複しない文字列が作成できる
( UUID : 36文字, nanoid: 22文字 )
# uuidライブラリを使って生成した文字列
4e913571-f577-41d2-85c6-918ebc98432e
5c6db346-e377-4363-add9-79529a85fbf2
56278167-d5bf-4d51-bb67-d85f8339d92d
# nanoid を使って生成した文字列
O5xY5fea8C3xNVlIxYErQw
p604IPLMS85rgAOs10aTRK
ia1AhTPu66jeUqPq~7N1kp
nanoidのインストール
nanoid はnode.jsで作られているパッケージなので、' npm
' 又は ' yarn
' をコマンドを使って プロジェクトにインストールします。
# npm
npm i nanoid --save
# yarn
yarn add nanoid
nanoidの使い方
nanoidの使い方は簡単で、' nanoid
'メソッドを使えば22文字の文字列が生成されます。
UUIDは " 0-9a-f
" + ' -
(ハイフン) ' の16進数で表現されますが、nanoidは URLとして利用可能な ' A-Za-z0-9_~
' の62文字を使って生成されます。また、webpackを使えば、ブラウザでも動作可能です ( IE11 以上 )
const nanoid = require("nanoid");
// nanoidメソッドでランダム文字列を生成
nanoid(); // qc40jDtObUjIlJshRAfhOc
// 生成される文字数を指定する場合
nanoid(7); // 7文字で生成 : cHDAn_Y
重複しない文字列を発行できたどうか確認する為に実際にテストしてみましが、問題なく作成できていました。下のスニペットは100万の文字列を作成し、重複していないかどうかチェックしています。
// nanoid.js
// dependencies: npm i nanoid lodash log-symbols --save
const nanoid = require("nanoid");
const uniq = require("lodash/uniq");
const logSymbols = require("log-symbols");
let arr = [];
let num = 1000000; // 生成する文字列数
for (let i = 0; i < num; i++) {
arr.push(nanoid());
}
let res = uniq(arr).length;
// 重複する値が1つでもあれば'✗'、全てユニークであれば'✔'を表示
let sbl = res === num ? logSymbols.success : logSymbols.error;
// ユニークな配列のカウントを表示
console.log(sbl, "unique array count:", res);
* 上のコードをコマンドライン上で実行

" generate
" メソッドを使えば 指定した文字列からランダムに生成することも可能で、第二引数で文字数を指定することもできます。
const generate = require("nanoid/generate");
// generate(文字列, 文字数)
generate("abcdef1234", 5); // bae3e
そのほか、ショートurl作成に便利なモジュールも用意されています。
// !発行する文字数が少ないと重複する恐れがあります
const generate = require("nanoid/generate");
const url = require("nanoid/url");
generate(url, 7) // _3DRlnq
// 生成する文字列をランダムに変える場合 * 7 ~ 9 文字
// generate(url, Math.floor(Math.random() * 3) + 7)
Summary
以上が nanoid の紹介でした。UUIDの変わりや、ユーザー登録後のE-mail認証用のURL作成、ショートURL作成時など。使えそうな場面が色々とありそうです。
GitHub : ai/nanoid