3秒でわかる
Node.js のプロジェクトで依存関係や実行コマンドを宣言する設定ファイル。誰の環境でも同じ手順で動かせる状態を保つために使います。
もう少し詳しく
どういうものか
package.json は、Node.js のプロジェクトの根に置く JSON の設定ファイルです。プロジェクトの名前とバージョン、必要な外部パッケージ、よく使うコマンドの短縮名、公開するときの情報などをまとめて宣言します。npm install はこのファイルを読んで node_modules を組み立てるため、ファイル本体を配れば同じ依存構成を再現できます。
なぜ必要か
外部パッケージを含むフォルダをそのまま配ると、数万ファイルの受け渡しになります。package.json だけを共有し、各自が install する形なら、共有するのは数十行のテキストで済みます。何を使っているかが 1 か所に書かれているので、脆弱性の調査やライセンスの確認も可能になります。
コマンドを短い名前で登録できることも効きます。ビルドや起動の長い呼び出しを覚えなくても、決まった短い名前で誰でも同じ操作ができます。
具体例
{
"name": "my-app",
"version": "1.0.0",
"type": "module",
"scripts": {
"dev": "node --watch server.js",
"test": "vitest run"
},
"<a href="/glossary/dependencies" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">dependencies</a>": {
"express": "^4.19.2"
},
"<a href="/glossary/devdependencies" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">devDependencies</a>": {
"vitest": "^1.6.0"
}
}npm run dev と打てば scripts の内容が実行されます。
つまずきやすいところ
dependencies と devDependencies の使い分けを誤ると、本番のイメージにテスト用のパッケージまで入り、容量と攻撃面が増えます。動かすのに要るものが前者、開発中だけ要るものが後者です。
バージョンの記法も誤解されがちです。先頭の記号が意味を持ち、^4.19.2 は 4 系の中で新しいものを許します。install した時期によって実際に入るバージョンが変わるため、環境ごとの差を無くすには package-lock.json も一緒に管理する必要があります。lock ファイルを .gitignore に入れてしまうと、この保証が失われます。
JSON なのでコメントは書けません。末尾のカンマも構文エラーになります。
覚え方
材料表と作業手順書を 1 枚にしたものだと考えると位置付けが分かります。dependencies が材料、scripts が手順、package-lock.json が実際に使った材料の製造番号の控えにあたります。name と version は公開しない用途でも書いておくと、ツールの警告を避けられます。