😃

package.jsonを中身から理解したい

2025/01/30に公開

いつも、脳死でnpm initしてpackage.jsonを作ってから、npm installでパッケージをインストールしてっと手順を踏んでいましたが、そもそもpackage.jsonとは何なのでしょうか?
そして、その中身はどのようになっているのかをご紹介したいと思います。

package.jsonとは

package.jsonは、Node.jsプロジェクトの設定ファイルで、プロジェクトの依存関係や設定情報を管理するファイルです。
npm initで作成できますが、npm init -yと打つと初期設定をスキップできます。
例えば、中身は以下のようになっています。

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "My awesome project",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "jest",
    "build": "webpack"
  },
  "dependencies": {
    "express": "^4.17.1",
    "react": "^18.2.0"
  },
  "devDependencies": {
    "jest": "^29.0.0",
    "webpack": "^5.0.0"
  }
}

依存関係とは

package.jsonは「Node.jsプロジェクトの設定ファイルで、プロジェクトの依存関係や設定情報を管理するファイル。」と説明しましたが、「依存関係」とはプロジェクトが正常に動作するために必要な外部のパッケージやライブラリのことです。
今回の例で言うとdependeciesdevDependenciesに記述されているライブラリがそれにあたります。

package.jsonの中身

キー バリュー 必須
name パッケージ名。小文字のみでスペース不可 ⭕️
version パッケージのパージョン。セマンティックバージョニング(x.y.z)形式 ⭕️
description パッケージの説明文
private trueの場合npmに誤って公開するのを防げる
main パッケージの中で最初に呼ばれるスクリプトファイル
scripts 任意のshell scriptを実行するエイリアスコマンドを定義できる
"scripts": { "start": "node index.js" }と定義されていた場合
npm run startでアプリケーション起動など
dependencies 本番環境で必要なパッケージ
devDependencies 開発時のみ必要なパッケージ
author 作者の情報
license ライセンスの種類(MITなど)
engines 必要なNode.jsやnpmのバージョンなどを定義
repository ソースコードのリポジトリ情報

package.jsonなしでnpm installするとどうなるのか

では、package.jsonなしでnpm installするとどうなるのでしょうか?
結果は、特にエラーなどは起きずにnode_modulesとpackage-lock.jsonが生成されます。
ただ、package.jsonがないと以下の弊害があります。

  • どのパッケージをインストールしたのかの記述がどこにも記されないので、node_modulesの管理が難しくなる
  • パッケージの依存関係がわからなくなる。
    そのためpackage.jsonを作ってからnpm installするようにしましょう。

まとめ

今回はpackage.jsonについてまとめてみました。
普段、使っているものほど知らないことが多いなと最近気付かされます。
他の方の参考になれば幸いです。

参考

https://qiita.com/dondoko-susumu/items/cf252bd6494412ed7847
https://zenn.dev/ikuraikura/articles/14d0cc3e2661f94dbf53

Discussion