npm

パッケージマネージャーNode.jsJavaScriptCLIレジストリ依存関係管理

パッケージマネージャー

npm

概要

npm(Node Package Manager)は、Node.jsに標準で付属する世界最大のパッケージマネージャーです。200万以上のパッケージが登録されているnpmレジストリを通じて、JavaScript/Node.jsライブラリの管理、インストール、配布を効率的に行うことができます。2025年現在、週間160億回のダウンロードを誇り、JavaScriptエコシステムの中核を担っています。

詳細

主な特徴

  • 標準搭載: Node.jsインストール時に自動的にインストールされる
  • 豊富なエコシステム: 200万以上のパッケージが利用可能
  • セマンティックバージョニング: SemVer規則に従った確実なバージョン管理
  • スクリプト実行機能: package.jsonでカスタムスクリプトを定義・実行可能
  • セキュリティ監査: npm auditによる脆弱性チェック機能
  • ロックファイル: package-lock.jsonによる依存関係の固定化

アーキテクチャ

npmは3つの主要コンポーネントで構成されています:

  1. npmレジストリ: パッケージが保存される中央データベース
  2. npmクライアント: コマンドラインインターフェース(CLI)
  3. package.json: プロジェクトの設定ファイル

パッケージ管理の仕組み

  • 依存関係解決: 自動的に依存パッケージをインストール
  • フラット構造: node_modules内でのフラットな依存関係管理
  • キャッシュ機能: ダウンロード済みパッケージのローカルキャッシュ
  • バージョン範囲指定: セマンティックバージョニングによる柔軟な指定

メリット・デメリット

メリット

  • 学習コストが低い: シンプルで直感的なコマンド体系
  • 広範囲なサポート: 最大のコミュニティと豊富なドキュメント
  • 標準搭載: Node.jsと一緒にインストールされるため別途インストール不要
  • 豊富なパッケージ: 世界最大のパッケージエコシステム
  • 公式サポート: Node.js公式チームによる長期サポート
  • セキュリティ機能: npm auditによる脆弱性検出機能

デメリット

  • パフォーマンス: 大規模プロジェクトでの処理速度の問題
  • ディスク容量: 重複パッケージによる容量消費
  • インストール時間: yarnやpnpmと比較して時間がかかる場合がある
  • ロックファイルの競合: チーム開発時のpackage-lock.json競合
  • フラット化の問題: 依存関係の複雑化による予期しない動作

参考ページ

書き方の例

パッケージのインストール

# プロジェクトの依存関係をインストール
npm install

# 新しいパッケージを追加(本番依存関係)
npm install express

# 開発依存関係として追加
npm install --save-dev jest

# グローバルインストール
npm install -g nodemon

# 特定のバージョンをインストール
npm install [email protected]

# 複数パッケージを同時インストール
npm install express morgan cors

package.jsonの管理

# 新しいプロジェクトを初期化
npm init

# 対話形式なしで初期化
npm init -y

# package.jsonの内容例
{
  "name": "my-project",
  "version": "1.0.0",
  "description": "My awesome project",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "test": "jest",
    "build": "webpack --mode production"
  },
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "jest": "^29.5.0",
    "nodemon": "^2.0.22"
  }
}

スクリプトの実行

# package.jsonで定義されたスクリプトを実行
npm start

# 開発用スクリプトを実行
npm run dev

# テストを実行
npm test
npm run test

# ビルドスクリプトを実行
npm run build

# カスタムスクリプトを実行
npm run custom-script

# 複数のスクリプトを並行実行(npm-run-all使用)
npm run start & npm run watch

グローバルインストール

# グローバルパッケージのインストール
npm install -g typescript
npm install -g @angular/cli
npm install -g create-react-app

# グローバルパッケージの一覧表示
npm list -g --depth=0

# グローバルパッケージの更新
npm update -g typescript

# グローバルパッケージのアンインストール
npm uninstall -g create-react-app

# npxを使った一時実行(グローバルインストール不要)
npx create-react-app my-app
npx typescript --version

バージョン管理

# パッケージの詳細情報を表示
npm info express

# インストール済みパッケージの一覧
npm list

# 依存関係ツリーの表示
npm list --depth=2

# 更新可能なパッケージをチェック
npm outdated

# パッケージの更新
npm update express

# すべてのパッケージを更新
npm update

# パッケージのアンインストール
npm uninstall express
npm uninstall --save-dev jest

セキュリティ監査

# セキュリティ脆弱性の検査
npm audit

# 自動修正可能な脆弱性を修正
npm audit fix

# 強制的に修正(破壊的変更を含む)
npm audit fix --force

# 詳細なセキュリティレポート
npm audit --json

# 特定の脆弱性レベル以上のみ表示
npm audit --audit-level=moderate

# 脆弱性のあるパッケージを手動更新
npm install package-name@latest