この記事では、Node.js を使った開発で頻繁に目にする npm と npx の違いについて解説します。
どちらも Node.js のパッケージ管理に関連するコマンドですが、用途や動作が異なります。正しく使い分けることで、より効率的な開発が可能になります。
目次
- npm とは
- npx とは
- npm と npx の主な違い
- 実践的な使い分け例
- まとめ
npm とは
npm(Node Package Manager)は、Node.js のパッケージ管理ツールです。Node.js をインストールすると自動的に付属してきます。
npm の主な役割
- パッケージのインストール
- パッケージのアンインストール
- プロジェクトの依存関係の管理
- スクリプトの実行
npm でできること
# パッケージをプロジェクトにインストール
npm install express
# パッケージをグローバルにインストール
npm install -g typescript
# package.json のスクリプトを実行
npm run build
# パッケージの情報を表示
npm info lodash
npm でインストールしたパッケージは、プロジェクトの node_modules フォルダ(ローカルインストール)、またはシステム全体で使える場所(グローバルインストール)に保存されます。
npx とは
npx は npm 5.2.0 から導入されたパッケージ実行ツールです。npm と一緒にインストールされます。
なお、npm v7 以降では npx は内部的に npm exec を使用するように変更されており、現在の npm では両方のコマンドが利用可能です。
npx の主な役割
- パッケージをインストールせずに実行
- ローカルインストールされたパッケージの実行
- 特定バージョンのパッケージを一時的に実行
npx の動作
npx は以下の順序でパッケージを探して実行します。
- プロジェクトの
node_modules/.binを確認 - ローカルに存在しない場合、一時的にダウンロードして実行
- 実行後、パッケージは npm のキャッシュに保存される(完全には削除されない)
--yes オプションを使用すると、インストール確認のプロンプトをスキップできます。
npx でできること
# パッケージをインストールせずに実行
npx create-react-app my-app
# ローカルインストールされたパッケージを実行
npx eslint src/
# 特定バージョンを指定して実行
npx typescript@4.5.0 --version
# URL から直接スクリプトを実行
npx github:user/repo
npm と npx の主な違い
| 項目 | npm | npx |
|---|---|---|
| 主な用途 | パッケージの管理(インストール・アンインストール) | パッケージの実行 |
| インストール | パッケージをローカルまたはグローバルにインストール | 必要に応じて一時的にダウンロード |
| ディスク容量 | インストールしたパッケージが残る | 一時ダウンロードは npm キャッシュに保存される |
| バージョン管理 | package.json で管理 | 実行時に指定可能 |
実践的な使い分け例
npm を使うべきケース
プロジェクトで継続的に使用するパッケージ
# フレームワークやライブラリ
npm install react react-dom
# 開発ツール
npm install --save-dev eslint prettier
これらは package.json に記録され、npm install で再現可能な環境を作れます。
npx を使うべきケース
1. プロジェクトの初期化ツール
# Vite プロジェクトの作成(npm create の使用が推奨)
npm create vite@latest my-app
# Next.js アプリの作成
npx create-next-app@latest my-next-app
これらのツールは一度しか使わないため、グローバルインストールする必要がありません。
注意: Create React App は 2025年2月14日に公式で非推奨(deprecated)となりました。新規プロジェクトには Vite や Next.js などの利用が推奨されています。
2. ローカルにインストールした開発ツールの実行
# グローバルインストール不要で ESLint を実行
npx eslint .
# TypeScript コンパイラを実行
npx tsc
# Jest でテストを実行
npx jest
以前は ./node_modules/.bin/eslint のように長いパスを指定するか、npm scripts に登録する必要がありましたが、npx を使えば簡潔に実行できます。
3. 異なるバージョンの試用
# 最新版を試す
npx typescript@latest --version
# 特定バージョンを試す
npx typescript@4.9.0 --version
# ベータ版を試す
npx create-react-app@next my-app
グローバルインストールせずに、異なるバージョンを試すことができます。
4. 一時的なユーティリティツール
# QR コードを生成
npx qrcode "https://lazy-developer.jp"
# サーバーを即座に起動
npx http-server
# package.json の依存関係をチェック
npx npm-check-updates
よくある疑問
npm install -g と npx、どちらを使うべき?
以前の方法(グローバルインストール)
npm install -g create-react-app
create-react-app my-app
現在推奨される方法
# npx を使用
npx create-next-app my-app
# または npm create を使用(Vite など一部のツールで推奨)
npm create vite@latest my-app
npx を使う利点は以下の通りです。
- 常に最新版を使用できる
- グローバル環境を汚染しない
- 異なるプロジェクトで異なるバージョンを使用できる
npm scripts の中で npx は必要?
package.json の scripts 内では、npx は不要です。npm が自動的に node_modules/.bin を参照するためです。
{
"scripts": {
"lint": "eslint .",
"test": "jest"
}
}
これらは npm run lint や npm run test で実行できます。
コマンドラインから直接実行する場合のみ npx が必要です。
# コマンドラインから直接実行
npx eslint .
まとめ
- npm はパッケージの管理(インストール・アンインストール)に使用
- npx はパッケージの実行に使用(npm v7 以降は内部的に npm exec を使用)
- 継続的に使うパッケージは npm でインストール
- 一度だけ使うツールや、ローカルにインストールしたツールの実行には npx を使用
- npx で実行したパッケージは npm キャッシュに保存される(完全削除されるわけではない)
- npx を使うことで、グローバルインストールを減らし、クリーンな開発環境を維持できる
npm と npx を適切に使い分けることで、より効率的で保守しやすい開発環境を構築できます。


コメント