OSS探訪GitHubでログイン

暗号学的乱数からURL-safeな短いIDを生成し、文字集合と長さも用途に合わせて調整する

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
27,076
主要言語
JavaScript
ライセンス
MIT
リポジトリ最終更新
2026/10/05
ページ内ナビ

概要

Nano IDはNode.jsのcryptoとブラウザのWeb Crypto APIを使い、URLで扱いやすいランダムIDを生成するJavaScriptライブラリです。既定では126bit相当の乱数を21文字へ収め、必要に応じて文字集合と長さを変更できます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

暗号学的乱数から21文字のURL-safe IDを生成する

既定のnanoid()はA-Za-z0-9_-を使った21文字のIDを返します。Node.jsではcrypto、ブラウザではWeb Crypto APIを利用し、Math.random()には依存しません。

出典:[1]

文字集合と長さをcustomAlphabetで制御する

customAlphabet()で利用する文字集合と既定長を指定でき、呼び出し時に長さを上書きすることもできます。短くするほど衝突確率が上がるため、公式のcollision calculatorと合わせて設計できます。

出典:[1]

ESM、ブラウザ、CLIから同じ生成器を利用する

npm packageはESMとして配布され、ブラウザ向けentryも持ちます。端末ではnpx nanoidからIDを生成し、--sizeや--alphabetで条件を指定できます。

出典:[1][2]

向いている用途

UUIDより短いランダムIDをクライアントとサーバーで共有したい場合に向く

URLや画面要素、アプリケーション内識別子などで、固定スキーマを持たない短いランダムIDをJavaScript環境から生成したい場面に適します。

出典:[1]

導入前の確認

6.0.1はNode.js 22・24・26以上系を対象とする

package metadataはNode.js ^22 || ^24 || >=26を要求し、package自体はESMです。古いNode.jsやCommonJS中心の環境では導入前に互換性を確認してください。

出典:[2][3]

Reactのkeyを描画ごとに生成しない

公式READMEはReactのkeyにnanoid()を毎回使う方法を非推奨とし、安定したIDを優先するよう案内しています。labelとinputの関連付けにはReactのuseIdを推奨しています。

出典:[1]

参考にした公式資料

  1. [1]Nano ID 6.0.1 README(2026-10-05)
  2. [2]Nano ID 6.0.1 package metadata(2026-10-05)
  3. [3]Nano ID changelog(2026-10-05)
  4. [4]Nano ID 6.0.1 release(2026-10-05)
  5. [5]Nano ID MIT license(2026-10-05)
編集部からの補足

既定の21文字IDだけでなく、文字集合と長さを明示的に調整できる点が実務で扱いやすいライブラリです。6.0.1はNode.js 22/24/26以上系が対象で、Reactのkeyを描画ごとに生成する用途には公式READMEが非推奨を明記しています。

3ステップで試す

  1. 1

    Nano ID 6.0.1を一時projectへ導入する

    Node.js 22・24・26以上系で、review対象releaseを既存projectから分離して確認します。

    demo=$(mktemp -d "${TMPDIR:-/tmp}/nanoid.XXXXXX") && cd "$demo" && npm init -y >/dev/null && npm install --save-exact nanoid@6.0.1
  2. 2

    既定IDとcustom alphabetの生成scriptを作る

    既定の21文字URL-safe IDと、16進文字だけを使う10文字IDを同じpackageで生成します。

    printf "%s\n" "import { nanoid, customAlphabet } from 'nanoid';" "const id = nanoid();" "const hexId = customAlphabet('0123456789abcdef', 10)();" "console.log({ id, hexId });" "if (id.length !== 21 || hexId.length !== 10) throw new Error('unexpected Nano ID length');" > demo.mjs
  3. 3

    生成結果と長さを確認する

    暗号学的乱数を使う既定IDが21文字、customAlphabetのIDが10文字で生成されることを確認します。

    node demo.mjs
公式READMEで確認

成長

成長の推移 · 直近30日

27,076 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
10
Open PR
4

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

カテゴリ

GitHubデータ

GitHubのデータGitHubの詳細データを見る
Stars
27,076
Forks
889
Watchers
162
Open Issues
1
Contributors
143
所有者種別
User
主要言語
JavaScript
ライセンス
MIT
リポジトリ最終更新
2026/10/05

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?