こんにちは、かつコーチです。
Node.jsを学び始めると、必ず出てくるのが「npm」と「package.json」です。
「なんとなくコマンドを打っているけど、中身がよく分かっていない」という方も多いのではないでしょうか。
この記事では、npmの役割とpackage.jsonの読み方を、初心者向けに丁寧に解説します。
npmとpackage.jsonとは?
npmとはパッケージ管理ツール
npm(Node Package Manager)とは、Node.jsで使える外部ライブラリを管理するためのツールです。
外部ライブラリとは、他の人が作った便利な機能をまとめたプログラムのことです。
npmを使えば、世界中の開発者が公開しているライブラリを、コマンド一つでインストールできます。
Node.jsをインストールすると、npmも自動的に一緒にインストールされます。
package.jsonとはプロジェクトの設計図
package.jsonとは、プロジェクトの情報や使用するライブラリの一覧を記録するファイルです。
プロジェクト名、バージョン、使っているライブラリの種類などが、すべてこのファイルにまとまっています。
いわば、そのプロジェクトの「設計図」や「名簿」のような役割を持っています。
チームで開発するときも、このファイルさえあれば、必要なライブラリを全員が同じ環境で揃えられます。
基本の書き方・実装手順
npm initでpackage.jsonを作る
新しいプロジェクトを始めるときは、まずターミナルで以下のコマンドを実行します。
npm init -y
-yオプションを付けると、質問にすべてデフォルトで答えた状態で、package.jsonが自動生成されます。
実行すると、以下のようなファイルが作られます。
{
"name": "my-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
package.jsonの主要フィールド
package.jsonには、いくつか覚えておくべき項目があります。
name:プロジェクトの名前version:プロジェクトのバージョン番号main:プログラムの起点となるファイルscripts:npm runコマンドで実行できる処理の一覧dependencies:本番環境でも必要なライブラリ一覧devDependencies:開発時のみ必要なライブラリ一覧
dependenciesとdevDependenciesの違い
この2つの違いは、初心者がつまずきやすいポイントです。
dependenciesは、アプリを動かすために本番環境でも必要なライブラリです。
たとえばExpressのような、アプリの機能そのものに関わるライブラリが該当します。
npm install express
devDependenciesは、開発中だけ使うライブラリです。
コードのテストツールや、コード整形ツールなどが該当します。
npm install --save-dev eslint
--save-devを付けてインストールすると、devDependenciesに記録されます。
よくあるつまずきポイント・エラー対処
node_modulesが見つからないエラー
私が実際に経験したのは、GitHubからプロジェクトをクローンした直後のエラーです。
❌ Before
$ node index.js
Error: Cannot find module 'express'
package.jsonはあるのに、肝心のライブラリ本体がインストールされていないという状態でした。
これはnode_modulesフォルダがGit管理から除外されているため、クローン直後には存在しないからです。
✅ After
$ npm install
$ node index.js
Server is running on port 3000
npm installを実行すると、package.jsonに書かれたライブラリが一括でインストールされます。
クローン直後に動かないときは、まずnpm installを忘れていないか確認しましょう。
まとめ
この記事のポイント
- npmはNode.jsの外部ライブラリを管理するツールである
- package.jsonはプロジェクトの情報とライブラリ一覧をまとめたファイルである
npm init -yでpackage.jsonを作成できる- dependenciesは本番用、devDependenciesは開発用のライブラリを記録する
次に読むべき記事
package.jsonの基本が分かったら、次はモジュールの読み込み方法を学びましょう。
「CommonJSとESモジュール(require/import)の違い」で、importとrequireの使い分けを解説しています。