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 -y3. 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.json の dependencies セクションに自動的に追加されます。
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 outdated6.3 スクリプトの実行
# 任意のスクリプトを実行
npm run script-name
# start スクリプト('run' を省略可能)
npm start
# test スクリプト('run' を省略可能)
npm test7. ベストプラクティス
- プロダクション環境: 本番用アプリケーションでは、不意のアップデートによる不具合を避けるため、可能な限り厳密なバージョン指定を検討してください。
- CI/CD パイプライン: 再現性のあるビルドを実現するため、CI/CD 環境では
npm installではなくnpm ciを使用してください。 - ロックファイルの管理:
package-lock.jsonは必ずバージョン管理(Git 等)に含めてください。 - 公開時の最適化: パッケージを npm に公開する場合、
.npmignoreを使用して不要なファイルを除外してください。 - セキュリティ: セキュリティパッチを適用するため、定期的にデペンデンシーを更新(
npm auditなども活用)してください。
8. まとめ
package.json は、メタデータ、スクリプト、依存関係情報を保持する Node.js プロジェクトの心臓部です。
その構造と各フィールドの役割を深く理解することは、効率的でプロフェッショナルな Node.js 開発を行う上で極めて重要です。