npm

Node.js のデフォルトパッケージマネージャーで、200 万以上の JavaScript パッケージの公開・インストール・管理を行う

パッケージ管理Node.js

npm とは

npm (Node Package Manager) は、Node.js のデフォルトパッケージマネージャーで、npmjs.com レジストリから 200 万以上のパッケージをインストールできる。2010 年に Isaac Z. Schlueter が開発し、Node.js のエコシステムの爆発的な成長を支えた。

package.json と package-lock.json

{
  "name": "my-app",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.0",
    "zod": "^3.22.0"
  },
  "devDependencies": {
    "typescript": "^5.3.0",
    "vitest": "^1.0.0"
  },
  "scripts": {
    "build": "tsc",
    "test": "vitest run",
    "start": "node dist/index.js"
  }
}
  • package.json: 依存関係とバージョン範囲を宣言
  • package-lock.json: 実際にインストールされた正確なバージョンを記録 (再現性の保証)

package-lock.json は必ず Git にコミットする。これがないと、開発者ごとに異なるバージョンがインストールされ、「自分の環境では動くのに CI では動かない」問題が発生する。

主要コマンド

npm install              # package.json の依存をインストール
npm install express      # パッケージを追加 (dependencies)
npm install -D vitest    # 開発依存に追加 (devDependencies)
npm ci                   # lock ファイルから厳密にインストール (CI 向け)
npm run build            # scripts のコマンドを実行
npm audit                # 脆弱性のチェック
npm outdated             # 更新可能なパッケージの一覧
npx create-next-app      # パッケージを一時的にダウンロードして実行

npm installnpm ci の違いは重要だ。

コマンド 動作 用途
npm install package.json を解決し、lock を更新する場合がある 開発時
npm ci lock ファイルを厳密に再現。lock と package.json が不整合なら失敗 CI/CD

CI では必ず npm ci を使う。npm install は lock ファイルを書き換える可能性があり、再現性が保証されない。

セマンティックバージョニング

npm はセマンティックバージョニング (SemVer) に基づいてバージョンを管理する。

^4.18.04.x.x の最新 (メジャーバージョン固定)
~4.18.04.18.x の最新 (マイナーバージョン固定)
4.18.0   → 完全一致

^ (キャレット) がデフォルトで、メジャーバージョンを固定しつつマイナー・パッチの更新を許容する。

npm vs yarn vs pnpm

観点 npm yarn pnpm
速度 普通 速い (並列) 最速
ディスク使用量 大きい (各プロジェクトにコピー) 大きい 小さい (ハードリンク)
node_modules 構造 フラット フラット シンボリックリンク
ワークスペース v7 以降対応 初期から対応 対応
特徴 Node.js 標準 Plug'n'Play 厳密な依存解決

pnpm はグローバルストアにパッケージを 1 回だけ保存し、各プロジェクトからハードリンクで参照する。モノレポで複数プロジェクトがある場合、ディスク使用量が大幅に削減される。

サプライチェーンセキュリティ

npm パッケージは誰でも公開できるため、悪意のあるパッケージが紛れ込むリスクがある。

  • npm audit で既知の脆弱性を定期的にチェックする
  • package-lock.json をコミットし、意図しないバージョン変更を防ぐ
  • npm ci で lock ファイルを厳密に再現する
  • 依存パッケージの数を最小限に抑える

体系的に学ぶなら関連書籍を参照してほしい。

関連用語