package.json
package.json
概要(サマリー)
package.json(パッケージ・ジェイソン)は、Node.js を使ったJavaScriptプロジェクトにおいて、プロジェクトの基本情報(名前やバージョン)、インストールした外部ライブラリ(依存関係)、プロジェクトを動かすための実行コマンドなどをまとめて管理する JSON 形式の設定ファイルである。
多くの場合、プロジェクトのルートディレクトリ(最上階)に置かれ、そのプロジェクトの「説明書」かつ「管理台帳」としての役割を果たす。
詳細解説
package.jsonとは何か
モダンなWeb開発(React、Vue、Viteなどを使用した開発)を始めるとき、必ずこの package.json というファイルが作られる。
このファイルがあるおかげで、プロジェクトの作成者は「どの外部ライブラリを、どのバージョン範囲で使うか」を記録できる。他の開発者にプロジェクトを共有した際も、必要な依存パッケージをまとめてインストールしやすくなる。
package.jsonの基本構造
以下は、一般的な package.json の記述例である。
package.jsonの記述例
{
"name": "my-awesome-app",
"version": "1.0.0",
"description": "Viteで作る私の新しいWebアプリ",
"scripts": {
"dev": "vite",
"build": "vite build"
},
"dependencies": {
"react": "^19.0.0"
},
"devDependencies": {
"vite": "^7.0.0"
}
}
開発でよく使う主要なキーの説明
package.json 内の主要なプロパティ(キー)の意味は以下の通りである。
name: プロジェクトの名前。英小文字、ハイフン、アンダースコアが使える。version: プロジェクトのバージョン。一般的に「主バージョン.副バージョン.パッチバージョン」(例: 1.0.0)というルール(セマンティックバージョニング)で表記される。scripts: よく使う長いコマンドを、短いキーワードに登録しておくエイリアス機能。- たとえば、上記の設定がある場合、ターミナルで
npm run devと実行するだけで、裏でviteというコマンドが自動実行される。 dependencies: アプリケーションの実行自体に必要なライブラリ(例: React、Lodashなど)。devDependencies: 開発やビルドの作業時に主に必要なツールやライブラリ(例: Vite、TypeScript、ESLintなど)。
依存パッケージのインストールと共有
package.json にライブラリが記載されている場合、他の人がプロジェクトをコピーして開発を始めるときは、ターミナルで npm install コマンドを実行するだけで良い。
依存パッケージの一括インストール
npm install
このコマンドを実行すると、package.json のリストを npm が読み取り、必要なライブラリをダウンロードして node_modules というフォルダに保存する。package-lock.json がある場合は、そのロックファイルの情報も使って、より再現性の高いインストールが行われる。
package-lock.jsonとの違い
package.json と同じ場所に、よく package-lock.json というファイルが自動生成される。
package.json: 人間が編集し、「使いたいライブラリの大まかなバージョン(例:^18.2.0など)」を指定する。package-lock.json: システムが自動で管理し、「実際にインストールされたライブラリと、それが依存している孫ライブラリまで含めた『完全に一致する正確なバージョン』」を記録(固定)する。
これにより、チーム開発において「別々のパソコンで npm install をしたら、異なるマイナーバージョンが入ってしまってエラーになる」という事故を防ぐことができる。
AIコーディングとの関係
AIコーディングにおいて、package.json はAIがプロジェクト全体の「技術スタック(どのような言語やライブラリを使うか)」を把握するための重要な手がかりになる。
AIと共同開発を行う際は、このファイルの内容を共有するか、あるいは以下のように指示を出して書き換えを依頼すると良い。
- AIへの指示例:
- 「現在の
package.jsonのscriptsに、コードフォーマッター(Prettier)を実行するためのformatコマンドを追加してください」 - 「開発用の依存関係(devDependencies)に Sass を追加し、
package.jsonを更新するコマンドを教えてください」
また、開発中にパッケージのインストールエラーが出た際、package.json の内容をエラーメッセージとともにAIに提示すれば、「どのライブラリのバージョンが衝突していそうか」「どの依存関係を確認すべきか」を整理しやすい。ただし、実際の解決には package-lock.json、Node.jsやnpmのバージョン、エラーログもあわせて確認する必要がある。
よくある勘違い
package.jsonは自分で手書きしなければいけない?
最初の作成時は手書きする必要はない。プロジェクトの作成時に npm init または npm init -y というコマンドを実行すれば、質問に答えるだけで自動的に雛形となる package.json が生成される。また、ライブラリを追加する際も npm install <ライブラリ名> と打てば、自動的に package.json に追記される。
package.jsonを削除してもプロジェクトは動く?
削除すると、依存ライブラリのインストール情報や実行用の scripts が失われるため、プロジェクトを正常に起動しにくくなる。また、他の環境(本番サーバーなど)へ移すときにも再現が難しくなるため、通常は削除したり、.gitignore でGitの管理対象から外したりしない。
package-lock.jsonは不要だから消してよい?
基本的には消さない方がよい。package-lock.json は、実際にインストールされた依存パッケージの詳細なバージョンを記録し、チームやCI環境で同じ依存関係を再現しやすくするためのファイルである。意図せず削除すると、別のバージョンが入って挙動が変わることがある。
まとめ
package.jsonは、Node.jsプロジェクトの構成情報や依存ライブラリを一元管理するJSON形式の設定ファイルである- プロジェクトの名前、バージョン、依存パッケージ、ショートカットコマンド(
scripts)などが書かれている npm installコマンドを実行すると、このファイルとロックファイルに基づいて依存パッケージがインストールされる- バージョン衝突エラーの解決では、
package.json、package-lock.json、実行環境の情報をあわせて確認することが大切である
情報ソース
より詳しくAIに聞いてみよう
package.jsonのdependenciesに書かれているバージョンの前にある「^(キャレット)」や「~(チルダ)」の記号の意味と違いを教えてください。- AIを使って、
package.jsonに定義した実行スクリプト(scripts)に、本番環境向けの環境変数を適用する方法を教えてください。 npm install実行時に「peer dependencies conflict」とエラーが出た場合、package.jsonの観点からどうやって原因を調べ、解決すればよいですか?devDependenciesに入れるべきパッケージと、通常のdependenciesに入れるべきパッケージの明確な判断基準を教えてください。package.json内で、プロジェクトが動作する「Node.jsの推奨バージョン(enginesプロパティ)」を指定する方法を教えてください。