NodeJS 速習チュートリアル

Node.js package.json

1. package.json とは?

package.json は、Node.js プロジェクトの内容を定義する特別なマニフェストファイルです。
このファイルには、アプリケーションの名前、バージョン、依存するパッケージ(デペンデンシー)、実行スクリプトなどの重要な情報が格納されています。

Node.js プロジェクトを管理し、他の開発者と共有する際に、特に npm (Node Package Manager) を利用する場合、このファイルは欠かせない存在です。

2. package.json の作成方法

プロジェクトのルートディレクトリで以下のコマンドを実行することで、package.json を作成できます:

npm init

このコマンドを実行すると、プロジェクトに関する一連の質問が表示され、その回答に基づいて package.json が生成されます。
すべてデフォルト値で素早くセットアップしたい場合は、-y フラグを使用します:

npm init -y

3. package.json の構成例

以下は、標準的な package.json ファイルのシンプルな例です。

{
  "name": "my-node-app",
  "version": "1.0.0",
  "description": "シンプルな Node.js アプリケーション",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "Your Name",
  "license": "ISC"
}

このファイルはアプリの基本情報を定義し、エントリポイントを index.js に設定、さらに起動用の start スクリプトを定義しています。

4. デペンデンシー(依存関係)の追加

npm を使ってパッケージをインストールすると、package.jsondependencies セクションに自動的に追加されます。

npm install express

このコマンドを実行すると、プロジェクトに Express が導入され、package.json が以下のように更新されます:

"dependencies": {
  "express": "^5.1.0"
}

5. package.json の主要なフィールド

5.1 基本的なメタデータ

プロジェクトの識別や公開に利用される情報です。

{
  "name": "my-package",
  "version": "1.0.0",
  "description": "パッケージの簡潔な説明",
  "main": "index.js", // アプリケーションのエントリポイント
  "type": "module",  // ES Modules を使用する場合は "module"、CommonJS の場合は "commonjs"
  "keywords": ["example", "package", "node"],
  "author": "Your Name",
  "license": "MIT",
  "homepage": "https://example.com/my-package"
}

5.2 スクリプト (Scripts)

npm run <script-name> で実行できるカスタムスクリプトを定義します。

"scripts": {
  "start": "node index.js",       // 本番環境での起動
  "dev": "nodemon index.js",     // 開発環境での自動再起動
  "test": "jest",                // テストの実行
  "build": "webpack --mode production", // ビルド処理
  "lint": "eslint .",            // コードの静的解析
  "prepare": "husky install"     // Git Hook のセットアップ
}

5.3 デペンデンシー (Dependencies)

プロジェクトの実行に必要なパッケージを、バージョン範囲とともに指定します。

"dependencies": {
  "express": "^4.18.2",
  "mongoose": "~7.0.0",
  "lodash": "4.17.21"
}

5.4 開発用デペンデンシー (Dev Dependencies)

開発中やテスト時のみ必要で、本番環境のビルドには含まれないパッケージです。

"devDependencies": {
  "nodemon": "^2.0.22",
  "jest": "^29.5.0",
  "eslint": "^8.38.0"
}

5.5 バージョン指定の範囲 (Version Ranges)

  • ^4.17.21: 4.x.x と互換性あり(5.0.0 未満までのマイナーアップデートを許可)
  • ~4.17.21: パッチアップデートのみ許可(4.17.x)
  • 4.17.21: 特定のバージョンを固定
  • latest: 最新の安定版
  • git+https://...: Git リポジトリから直接インストール

5.6 エンジン (Engines)

プロジェクトが動作するために必要な Node.js や npm のバージョンを指定します。

"engines": {
  "node": ">=14.0.0 <17.0.0",
  "npm": ">=6.0.0"
}

5.7 リポジトリとバグ報告

コードの管理場所や問題報告先を定義します。

"repository": {
  "type": "git",
  "url": "https://github.com/username/repo.git"
},
"bugs": {
  "url": "https://github.com/username/repo/issues"
}

6. package.json の操作

6.1 デペンデンシーの追加

# 通常のデペンデンシーとしてインストール
npm install package-name

# 開発用デペンデンシーとしてインストール
npm install --save-dev package-name

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

6.2 デペンデンシーの更新

# 特定のパッケージを更新
npm update package-name

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

# 古くなったパッケージを確認
npm outdated

6.3 スクリプトの実行

# 任意のスクリプトを実行
npm run script-name

# start スクリプト('run' を省略可能)
npm start

# test スクリプト('run' を省略可能)
npm test

7. ベストプラクティス

  • プロダクション環境: 本番用アプリケーションでは、不意のアップデートによる不具合を避けるため、可能な限り厳密なバージョン指定を検討してください。
  • CI/CD パイプライン: 再現性のあるビルドを実現するため、CI/CD 環境では npm install ではなく npm ci を使用してください。
  • ロックファイルの管理: package-lock.json は必ずバージョン管理(Git 等)に含めてください。
  • 公開時の最適化: パッケージを npm に公開する場合、.npmignore を使用して不要なファイルを除外してください。
  • セキュリティ: セキュリティパッチを適用するため、定期的にデペンデンシーを更新(npm audit なども活用)してください。

8. まとめ

package.json は、メタデータ、スクリプト、依存関係情報を保持する Node.js プロジェクトの心臓部です。
その構造と各フィールドの役割を深く理解することは、効率的でプロフェッショナルな Node.js 開発を行う上で極めて重要です。