npm
パッケージマネージャー
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つの主要コンポーネントで構成されています:
- npmレジストリ: パッケージが保存される中央データベース
- npmクライアント: コマンドラインインターフェース(CLI)
- 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