はじめに
JavaScriptエコシステムには多数のパッケージマネージャーが存在します。npm、yarn、pnpm、bun、そしてDenoと、プロジェクトごとに異なるツールが使われていることは珍しくありません。そんな中、開発者の生産性を大きく向上させるツールが「ni」です。
niは、Anthony Fu氏によって開発された軽量なCLIツールで、プロジェクトで使用されているパッケージマネージャーを自動検出し、適切なコマンドに変換して実行してくれます。
niとは?
ni(@antfu/ni)は、"use the right package manager"というキャッチフレーズの通り、複数のプロジェクトを横断して作業する開発者のために設計されたツールです。
解決する問題
あなたもこんな経験はありませんか?
# yarnプロジェクトで間違えてnpmを実行してしまう
npm install axios # 😱 package-lock.jsonが生成される!
# あるいは、プロジェクトごとに異なるコマンドを思い出す必要がある
npm install # npmの場合
yarn # yarnの場合
pnpm install # pnpmの場合
bun install # bunの場合
niを使えば、すべてniコマンド一つで解決します。
基本的な使い方
インストール
npm i -g @antfu/ni
# またはHomebrewで
brew install ni
主要コマンド
ni - パッケージのインストール
ni # npm install / yarn install / pnpm install / bun install / deno install
ni axios # パッケージを追加
ni @types/node -D # 開発依存関係として追加
ni --frozen # ロックファイルを変更せずにインストール(CI用)
nr - スクリプトの実行
nr dev --port=3000 # npm run dev -- --port=3000
nr # インタラクティブにスクリプトを選択
nlx - パッケージの一時実行
nlx vitest # npx vitest / yarn dlx vitest / pnpm dlx vitest / bunx vitest
nun - パッケージのアンインストール
nun webpack # npm uninstall webpack / yarn remove webpack / pnpm remove webpack
nup - パッケージの更新
nup # すべてのパッケージを更新
nup -i # インタラクティブに更新するパッケージを選択
仕組み
niは実行前に以下のファイルを検出して、使用するパッケージマネージャーを判断します。
-
yarn.lock→ yarn -
pnpm-lock.yaml→ pnpm -
package-lock.json→ npm -
bun.lockbまたはbun.lock→ bun -
deno.jsonまたはdeno.jsonc→ deno
また、package.jsonのpackageManagerフィールドも参照します。
2025年のniに関するトピック
Deno 2のサポート強化
2025年、niはDeno 2への完全なサポートを提供しており、DenoがNPMパッケージとの互換性を強化したことで、niを使ってDenoプロジェクトでもシームレスな開発体験が可能になりました。
# Denoプロジェクトでも同じコマンド
ni vite # deno add vite
nr dev # deno task dev
最新バージョンのリリース
2025年12月時点で、niはバージョン27.0.0がリリースされ、継続的にアップデートされています。最新の改善には以下が含まれます。
- モノレポパッケージのフィルタリングサポート(
-pフラグ) - 重複したコマンド履歴の削減
- シェル補完機能の改善
Node.js 22+の--runサポート
Node.js 22以降の新機能として、niはnode --runコマンドのサポートを追加しました。これにより、パッケージマネージャーを介さずにNode.jsが直接スクリプトを実行できます。
設定ファイル(~/.nirc)で有効化できます。
; ~/.nirc
runAgent=node # Node.js 22+が必要
実践的な活用シーン
マルチプロジェクト環境での開発
異なるクライアントや複数のプロジェクトを扱うフリーランス開発者やコンサルタントにとって、niは必須ツールです。
cd project-a # npmを使用
ni
nr dev
cd ../project-b # pnpmを使用
ni
nr dev
cd ../project-c # bunを使用
ni
nr dev
すべて同じコマンドで、それぞれのプロジェクトに適したパッケージマネージャーが自動的に使用されます。
CI/CDパイプラインでの活用
# GitHub Actions
steps:
- name: Install dependencies
run: |
npm i -g @antfu/ni
ni --frozen
- name: Run tests
run: nr test
チーム開発での統一
チームメンバーがそれぞれ異なるパッケージマネージャーの経験を持っている場合でも、niを使えばコマンドを統一でき、オンボーディングが容易になります。
設定のカスタマイズ
~/.nircファイルまたは環境変数で動作をカスタマイズできます。
; ~/.nirc
defaultAgent=npm # ロックファイルがない場合のデフォルト(通常は"prompt")
globalAgent=npm # グローバルインストール時に使用
runAgent=node # Node.js 22+の--runを使用
useSfw=true # コマンドにsfwプレフィックスを追加
環境変数での設定も可能です。
export NI_DEFAULT_AGENT="npm"
export NI_GLOBAL_AGENT="npm"
export NI_USE_SFW="true"
PowerShellユーザーへの注意
PowerShellにはniという組み込みエイリアス(New-Item)が存在します。niを使用するには、このエイリアスを削除する必要があります。
# 現在のセッションで削除
Remove-Item Alias:ni -Force -ErrorAction Ignore
# プロファイルに追加して永続化
if (-not (Test-Path $profile)) {
New-Item -ItemType File -Path (Split-Path $profile) -Force -Name (Split-Path $profile -Leaf)
}
$profileEntry = 'Remove-Item Alias:ni -Force -ErrorAction Ignore'
$profileContent = Get-Content $profile
if ($profileContent -notcontains $profileEntry) {
("`n" + $profileEntry) | Add-Content $profile
}
niのメリット
1. 認知負荷の軽減
プロジェクトごとに異なるコマンドを覚える必要がなくなります。
2. 人的ミスの防止
間違ったパッケージマネージャーを使ってしまうことがなくなり、不要なロックファイルの生成を防げます。
3. 軽量で高速
追加の依存関係がほとんどなく、即座にコマンドを実行します。
4. 柔軟な設定
プロジェクトごと、またはグローバルに動作をカスタマイズ可能です。
5. 豊富なエコシステムサポート
npm、yarn、pnpm、bun、denoの5つの主要なパッケージマネージャーをサポートしています。
まとめ
niは、現代のJavaScript開発における複雑性を大幅に軽減してくれる小さいながらも強力なツールです。2025年には、Deno 2サポートの強化やNode.js 22+の新機能への対応など、さらなる進化を遂げています。
複数のプロジェクトを扱う開発者、チーム開発、CI/CD環境など、さまざまなシーンで役立つniを、ぜひあなたの開発ワークフローに取り入れてみてください。