ni で開発を1mm楽に
はじめに
こちらのポストをタイムラインで見つけて、実際にniを使用してみました。
niとは
niはnpm / yarn / pnpm / bunを自動判別してくれる便利コマンドです。
例えばniと入力するとnpm iやyarn iなどに変換してくれるってことらしい。
ni
# npm install
# yarn install
# pnpm install
# bun install
# deno install
どのパッケージマネージャーを使っているか意識しなくていいのが利点です。
どうやって判別してるの?
How?
ni assumes that you work with lock-files (and you should).
Before ni runs the command, it detects your yarn.lock / pnpm-lock.yaml / package-lock.json / bun.lock / bun.lockb / deno.json / deno.jsonc to know the current package manager (or packageManager field in your packages.json if specified) using the package-manager-detector package and then runs the corresponding package-manager-detector command.
githubにこう書かれていますが、要はロックファイル(yarn.lock, package-lock.jsonなど)の有無で判別してるみたいです。
コードを見てみましたが、denoはそのまま書いてましたが、他はpackage-manager-detectorという外部ライブラリを使ってるみたいです。
import { detect as detectPM } from 'package-manager-detector'
...
// Check for deno.json or deno.jsonc before using package-manager-detector
if (existsSync(path.join(targetDir, 'deno.json')) || existsSync(path.join(targetDir, 'deno.jsonc'))) {
// Return early with deno agent if deno.json/deno.jsonc is present
return 'deno'
}
const {
name,
agent,
version,
} = await detectPM({
cwd,
onUnknown: (packageManager) => {
if (!programmatic) {
console.warn('[ni] Unknown packageManager:', packageManager)
}
return undefined
},
}) || {}
...
どんなコマンドがある?
ni - install
nr - run
nlx - download & execute
nup - upgrade
nun - uninstall
nci - clean install
nd - dedupe dependencies
na - agent alias
よく分からなかったら、naでyarnやnpmに変換されるので、na installやna run devなどnaを固定で使うでもいいかなーと思いました。
使ってみた
インストール
npm i -g @antfu/ni
ni と nr devを打ってみて、どちらも正常に動いてそうでした!

シンプルに入力文字数が減るのもいい副作用だと思いました。
NCDC株式会社( ncdc.co.jp/ )のテックブログです。 主にエンジニアチームのメンバーが投稿します。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください!
Discussion