Skip to content
Latchkey

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」のようにバージョンを固定して、予期しない事態を避けられます。

使用例

スキャフォールディングと単発のツールが典型的なユースケースです。

Typical npx invocations
# 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では、再現性のためにバージョンを固定するか、ローカルにインストールしたツールを使います。

関連ガイド