npm

開発手法・ツール | IT用語集

この用語をシェア

npmとは

npm(Node Package Manager)は、Node.jsのデフォルトパッケージマネージャーです。JavaScriptライブラリやツールのインストール、管理、公開を効率的に行い、世界最大のソフトウェアレジストリとして100万を超えるパッケージを提供しています。

npmの主要機能

パッケージ管理

  • インストール:必要なライブラリの自動インストール
  • 依存関係解決:パッケージ間の依存関係を自動管理
  • バージョン管理:セマンティックバージョニング対応
  • 更新管理:パッケージの更新とセキュリティ対応

プロジェクト管理

  • package.json:プロジェクトの設定と依存関係定義
  • スクリプト実行:カスタムコマンドの定義・実行
  • 環境分離:development/productionの依存関係分離
  • ワークスペース:モノレポ構成のサポート

package.jsonファイル

package.jsonの例:

{
  "name": "my-web-app",
  "version": "1.0.0",
  "description": "Modern web application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js",
    "build": "webpack --mode production",
    "test": "jest"
  },
  "dependencies": {
    "express": "^4.18.2",
    "react": "^18.2.0",
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "webpack": "^5.75.0",
    "jest": "^29.3.1",
    "nodemon": "^2.0.20"
  },
  "keywords": ["web", "express", "react"],
  "author": "Shinichi Noguchi",
  "license": "MIT"
}

主要なnpmコマンド

基本コマンド

  • npm init - 新しいプロジェクトの初期化
  • npm install - package.jsonの依存関係をインストール
  • npm install <package> - 特定のパッケージをインストール
  • npm uninstall <package> - パッケージをアンインストール
  • npm update - インストール済みパッケージを更新

実行・管理コマンド

  • npm run <script> - package.jsonのスクリプトを実行
  • npm start - アプリケーションの開始
  • npm test - テストの実行
  • npm list - インストール済みパッケージの一覧
  • npm outdated - 古いパッケージの確認

依存関係の種類

dependencies(本番依存関係)

アプリケーションの実行に必要なパッケージ

  • Express:Webサーバーフレームワーク
  • React:ユーザーインターフェース構築
  • Lodash:ユーティリティライブラリ

devDependencies(開発依存関係)

開発・ビルド時のみ必要なパッケージ

  • Webpack:モジュールバンドラー
  • Jest:テストフレームワーク
  • ESLint:コード品質チェック

npmスクリプト

よく使用されるスクリプト:

  • "start": "node server.js" - 本番サーバー起動
  • "dev": "nodemon app.js" - 開発サーバー起動
  • "build": "webpack --mode production" - 本番ビルド
  • "test": "jest --coverage" - テスト実行
  • "lint": "eslint src/" - コード品質チェック

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

バージョン記法

  • ^1.2.3:マイナー・パッチ更新を許可(1.x.x)
  • ~1.2.3:パッチ更新のみ許可(1.2.x)
  • 1.2.3:固定バージョン
  • *:最新バージョン(推奨しない)

npmレジストリ

公開パッケージ

  • React:週間ダウンロード数2000万+
  • Express:Node.js最人気Webフレームワーク
  • Lodash:最も使用されるユーティリティライブラリ
  • Axios:HTTP クライアントライブラリ

プライベートパッケージ

  • 企業内パッケージ:npm Pro/Teams プラン
  • スコープ付きパッケージ:@company/package-name
  • セキュリティ:アクセス制御と監査機能

セキュリティとベストプラクティス

セキュリティ機能

  • npm audit:脆弱性スキャン
  • npm audit fix:自動修正の実行
  • package-lock.json:依存関係のロック
  • 2FA(二要素認証):アカウントセキュリティ

ベストプラクティス

  • package-lock.jsonの管理:バージョンロックファイルの保存
  • 定期的な更新:セキュリティパッチの適用
  • 不要パッケージの削除:攻撃面の縮小
  • 信頼できるパッケージの選択:メンテナンス状況の確認

npmの仕組み

npmはクライアント(npm CLI)レジストリ(npmjs.com)の2つの要素で構成されます。npm installを実行すると、npmクライアントはpackage.jsonの依存関係を解析し、npmレジストリからパッケージを取得してnode_modulesディレクトリに展開します。

  • 依存関係解決アルゴリズム:可能な限りパッケージをフラットに配置し、重複インストールを削減する
  • package-lock.json:実際にインストールされたパッケージのバージョンとハッシュ値を記録し、環境間でのインストール内容を完全に一致させる仕組み
  • キャッシュ機構:一度ダウンロードしたパッケージをローカルにキャッシュし、再インストール時の速度を向上させる

メリット

  • 豊富なエコシステム:100万以上のパッケージ
  • 効率的な開発:車輪の再発明を避ける
  • 自動依存関係管理:複雑な依存関係を自動解決
  • 標準化:Node.jsのデファクトスタンダード
  • コミュニティ:活発な開発者コミュニティ

デメリット・注意点

  • node_modulesの肥大化:依存関係の数だけディスク容量を消費し、数百MBに達することもある
  • インストール速度:Yarnやpnpmのキャッシュやシンボリックリンクベースのアプローチよりインストールが遅くなる場合がある
  • サプライチェーンリスク:悪意あるパッケージや依存パッケージの乗っ取りによる脆弱性混入のリスクがある
  • バージョンの揺れ:package-lock.jsonを適切に管理しないと、環境ごとに異なるバージョンがインストールされる場合がある

類似パッケージマネージャーとの比較

JavaScript/Node.jsのパッケージマネージャーにはnpm以外にもYarnやpnpmといった選択肢があります。

項目 npm Yarn pnpm
標準搭載 Node.jsに同梱 別途インストールが必要 別途インストールが必要
ディスク使用量 プロジェクトごとに実体をコピー Plug'n'Playでnode_modules自体を省略可能 グローバルストア+ハードリンクで大幅に節約
インストール速度 標準的(近年大幅に改善) 高速 非常に高速
モノレポ対応 workspaces機能で対応 workspaces機能が充実 workspaceに強く最適化
向いているケース 追加インストール不要な標準環境 大規模モノレポ、独自レジストリ運用 ディスク容量やCIの速度を重視する環境

実務での活用シーン・導入時の注意点

活用シーン

  • フロントエンド開発:React、Vue等のビルドツールチェーンの依存関係管理
  • CI/CDパイプラインnpm ciを使った再現性の高い高速インストールでCI/CDの実行時間を短縮
  • モノレポ運用:npm workspacesで複数パッケージを1つのリポジトリで一元管理
  • 社内共通ライブラリの配布:スコープ付きパッケージとプライベートレジストリで社内コンポーネントを配布

導入時の注意点

  • package-lock.jsonのコミット:必ずバージョン管理に含め、チーム・CI環境でインストール内容を固定する
  • npm ciの活用:CI環境ではnpm installではなくnpm ciを使い、lockファイル通りの厳密なインストールを行う
  • 定期的な脆弱性チェックnpm auditをCIに組み込み、既知の脆弱性を早期に検知する
  • 不要な依存の整理:使われなくなったパッケージを放置せず、定期的に棚卸しする

学習・活用のポイント

  • package.json理解:設定ファイルの詳細把握
  • セマンティックバージョニング:依存関係管理の基礎
  • セキュリティ意識:脆弱性対策の継続
  • スクリプト活用:開発効率化のカスタマイズ
  • パッケージ選定:信頼性とメンテナンス状況の評価

この用語についてもっと詳しく

npmに関するご質問や、システム導入のご相談など、お気軽にお問い合わせください。

よくある質問(FAQ)

Q. npmとは何ですか

npmとは、Node.jsのパッケージマネージャー。JavaScriptライブラリの管理、package.jsonによる依存関係管理、npmレジストリからのインストール、スクリプト実行など、効率的な開発を支援します。

Q. npmの主な用途・メリットは

npmは開発ツール分野で広く活用されており、業務効率化、システム最適化、生産性向上に貢献しています。企業規模を問わず導入が進んでいます。

Q. 2025-2026年のnpmの最新動向は

npmは2025-2026年にかけてAI統合、自動化、クラウドネイティブ対応、セキュリティ強化などの進化が進んでいます。

Q. npmとYarn・pnpmはどちらを使うべきですか

Node.jsに標準搭載されているnpmは追加インストール不要で手軽に使えます。インストール速度やディスク効率を重視する場合はpnpm、大規模なモノレポ運用ではYarnやpnpmのworkspaces機能が有利です。プロジェクトの規模やチームの慣れに応じて選択するとよいでしょう。

Q. npm installとnpm ciの違いは何ですか

npm installはpackage.jsonを基準に依存関係を解決し、必要に応じてpackage-lock.jsonを更新します。一方npm ciはpackage-lock.jsonの内容を厳密に再現するインストールを行い、既存のnode_modulesを削除してから実行するため、CI環境など再現性が求められる場面に適しています。

関連用語

  • Yarn:npmと同じNode.jsパッケージマネージャーで、高速性とワークスペース機能を重視した選択肢です
  • CI/CD:npmコマンドはビルド・テスト自動化のパイプラインに組み込まれることが多い技術です
  • GitHub Actions:npmスクリプトの実行をトリガーに、テストやデプロイを自動化するCIサービスです
  • リポジトリ:package.jsonやpackage-lock.jsonはGitリポジトリで管理されるのが一般的です

参考リンク