npxとは?Nodeパッケージをインストールせずに実行する
npxはNode.jsのコマンドラインパッケージをオンデマンドで実行し、まだインストールされていなければ一時的に取得します。これにより、ツールを依存関係として追加せずに使えます。
npxはnpmに同梱されており、単純な問題を解決します。npmエコシステムのCLIを一度だけ実行したいが、プロジェクトやグローバルインストールを汚したくない、という問題です。バイナリがローカルにあればそれを見つけ、なければcacheにダウンロードして実行します。
npxとは
npxはnpmに同梱されるパッケージランナーです。パッケージ名が与えられると、実行する実行可能ファイルを探します。まずローカルのnode_modules/.bin、次にnpmのcache、最後にパッケージをその場でダウンロードして探します。実行後、ダウンロードされたコピーはcacheされますが、プロジェクトには追加されません。
仕組み
「npx create-vite」と入力すると、npxは「create-vite」バイナリに到達できるかを確認します。到達できればそれを実行し、できなければそのパッケージを一時的なcacheにインストールし、そのbinエントリを実行し、package.jsonには手を付けません。「npx pkg@1.2.3」のようにバージョンを固定して、予期しない事態を避けられます。
使用例
スキャフォールディングと単発のツールが典型的なユースケースです。
# scaffold a new project without a global install
npx create-vite@latest my-app
# run a locally installed tool
npx eslint src/
# run a specific pinned version
npx prettier@3.2.0 --check .CI/CDでの役割
pipelineでは、npxはすでに開発依存関係となっているツールを呼び出す (固定されたローカルバージョンを使う) のに、あるいはスクリプト内での単発のスキャフォールディングに便利です。注意点として、バージョンを固定しない「npx some-tool」は実行時に最新リリースをダウンロードする可能性があり、再現性を損ないます。CIでは、ローカルにインストールしlockfileで固定したツールを優先し、「npx」はそれらのローカルバイナリを解決するためだけに使いましょう。
代替ツール
pnpmには「pnpm dlx」、Yarnには「yarn dlx」があり、同じ取得して実行する動作を行います。繰り返し使うツールについては、開発依存関係として追加し、package.jsonのスクリプト経由で呼び出す方が、その場限りのnpxダウンロードよりも再現性が高くなります。
重要なポイント
- npxはNodeのCLIパッケージを恒久的なインストールなしに実行します。
- ローカルのバイナリを優先し、次にcache、そしてオンデマンドでダウンロードします。
- CIでは、再現性のためにバージョンを固定するか、ローカルにインストールしたツールを使います。