npm とは

パッケージ管理ツール

npm(Node Package Manager)は、Node.jsのパッケージ管理ツールです。JavaScriptアプリケーションやプロジェクトで依存関係の管理やパッケージのインストール、アップデート、公開などのタスクを簡単に実行できます。

パッケージとは

パッケージ(package)は、JavaScript開発に便利な機能をまとめたプログラムです。例えばNode.jsのMVCフレームワーク「Express」、モジュールハンドラツールの代表格 「Webpack」「Vite」など、さまざまなパッケージがあります。

npm の動作確認

npmは Node.js をインストールすると利用できます。npm のバージョンを確認してみましょう。

% npm -v
6.14.5

Node.jsの基本構成

Node.jsでは「package.json」「package-lock.json」「node_modules」などのファイルやフォルダで管理構成されています。

プロジェクト/
├── node_modules/
├── package-lock.json
└── package.json

package.json

「package.json」はプロジェクトの依存関係、スクリプトによるビルド、起動、バージョン情報などを設定にするJSONファイルです。「package.json」は、プロジェクト作成時(npm初期化)で自動生成されます。

package.jsonの例
{
  "name": "08_express",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^10.0.0",
    "express": "^4.17.1"
  }
}

node_modules

「node_modules」は、Node.jsのパッケージ(モジュール)をインストールするフォルダで、原則手動で編集してはいけません。

package-lock.json

「package-lock.json」は「package.json」を元にインストールで更新されるファイルです。「package-lock.json」はパッケージのバージョンを固定するために利用され、原則手動で編集してはいけません。

  • 「node_modules」「package-lock.json」は原則編集、削除しない

プロジェクトの作成

ファイル構成

これらファイルやフォルダは基本的に自動生成されます。

node_test/
├── node_modules/
├── package-lock.json
└── package.json

フォルダ作成

最初にプロジェクトフォルダを作成しておきます。

npmコマンドを実行する前に

npmコマンドは、必ずプロジェクトフォルダ内で実行するようにしましょう。VSCodeでプロジェクトフォルダを直接開くか、ターミナルでプロジェクトフォルダに移動しておきます。

ターミナルで移動する場合
cd node_test

npm初期化

プロジェクトフォルダを開いたらターミナルを起動し、npmコマンドで初期化します。

npm init

設問形式で作成

初期化ではプロジェクト情報を設問形式で聞かれますが、今回はすべてエンターして進めていきます。

...
package name: (プロジェクト名)
version: (1.0.0)
以降、設問に答える
...

すべての設問を「YES」

「-y」オプションをつけると、すべての設問を「YES」にすることもできます

npm init -y

package.json の確認

初期化が完了すると、コマンドを実行したフォルダ内に 「package.json」が作成されるので確認してみましょう。

package.json
{
  "name": "node_test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

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

npm install

npmコマンドでパッケージをインストールします。パッケージは「node_modules」フォルダにインストールされます。

npm install パッケージ名

または

npm i パッケージ名

「express」パッケージのインストール

npm i express

「package-lock.json」と「node_modules/」が作成されました。

また、「package.json」の「dependencies」にインストールパッケージ情報が追加されています。

package.json
{
  "name": "node_test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.2"
  }
}

「dependencies」と「devDependencies」

「dependencies」はパッケージ情報がされますが、「devDependencies」という項目もあります。これは開発者が利用するパッケージとして追加します。

  • すべての利用者:「dependencies」
  • 開発者限定:「devDependencies」

「devDependencies」で管理する場合は、インストール時にオプション「-D」をつけます。

npm install -D パッケージ名

「dependencies」の「--save」は基本不要

「dependencies」でパッケージ管理するには、以前は 「--save」オプションを利用していましたが、ver5 以降は --save を省略できるようになりました。

パッケージのバージョン

バージョンの基本

パッケージにはバージョン情報が必ず設定されています。

...
"dependencies": {
    "express": "^4.18.2"
}
...

バージョンは「major」「minor」「patch」の3つに区切られています。

major.minor.patch

バージョン固定

ここでパッケージのバージョンによっては、開発環境によってインストールや動作しないこともあるため、パッケージバージョンの範囲指定ができます。

...
"dependencies": {
    "express": "4.18.2"
}
...
  • 「4.18.2」固定

^(キャレット)

「 ^ 」は「0」を除く先頭のバージョンは固定し、それ以外のバージョン変更があれば更新します。

...
"dependencies": {
    "express": "^4.18.2"
}
...
  • 「4.x.x」以上「5.x.x」未満を更新可能

~ (チルダ)

「 ~ 」は「minor」または「patch」を更新可能とし、末尾のバージョン変更があった場合のみ更新します。

...
"dependencies": {
    "express": "~4.18.2"
}
...
  • 「4.18.x」を更新可能

-(ハイフン)

「 - 」はバージョンの範囲指定をします。以下は「4.0.0」から「4.0.0 - 4.18.2」です。

...
"dependencies": {
    "express": "4.0.0 - 4.18.2"
}
...

パッケージ管理方法

本番用と開発用

プロジェクトによっては開発だけパッケージを利用し、本番では利用しないこともあります。このとき本番用と開発用にわけてインストールすることが可能です。

開発用インストール

npm i パッケージ名 -D

本番用インストール

開発から本番に移動したいときは「-P」「--production」オプションをつけます。

npm i -P パッケージ名

グローバルパッケージのインストール

毎回利用するパッケージをプロジェクトごとにインストールをするは面倒です。そこでグローバルパッケージでインストールしてどのプロジェクトでもモジュールが利用可能になります。

インストール方法

グローバルパッケージのインストールは「-g」「--global」オプションをつけます。

npm i -g パッケージ名

または

npm i --global パッケージ名

第三者への配布に注意

グローバルパッケージとして指定されていると、第三者がそのパッケージを利用するかどうかわからないため、インストール時にエラーになります。

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

「uninstall」コマンドで、インストール済みのパッケージをアンインストールします。

「devDependencies」パッケージの削除

npm uninstall パッケージ名

「dependencies」パッケージの削除

npm uninstall パッケージ名 -D

グローバルパッケージの削除

npm uninstall パッケージ名 -g

パッケージ確認

パッケージ一覧

「ls」または「list」コマンドはパッケージの一覧を表示します。 パッケージにはプロジェクトで利用する「通常パッケージ」と、PC共有の「グローバルパッケージ」があります。

通常パッケージ

npm ls       
[email protected] /xxx/xxx/node_test
└── [email protected]

グローバルパッケージ

npm ls -g
/usr/local/lib
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

トップレベルのパッケージ一覧表示

パッケージ一覧が多すぎてみずらいときは、トップレベルのパッケージを表示することもできます。

通常パッケージ

npm ls --depth=0

グローバルパッケージ

npm ls -g --depth=0

パッケージ検索と詳細

パッケージ名を指定して、インストール可能なパッケージや詳細情報を確認できます。

パッケージ検索

npm search キーワード

パッケージの詳細

npm show パッケージ名