【まとめ】package.jsonとnpmコマンドについてわかりやすく解説

アイキャッチ画像
  • package.jsonとは?その中身は?
  • dependenciesとdevDependenciesの違いとは?
  • package.jsonに関するnpmコマンドとは?

本記事ではこのような疑問を解決します。


Node.jsでパッケージ管理をする際に必須となるのがpackage.jsonとnpmコマンドについての知識です。

例えば、今流行りのReactなどでアプリケーション開発をする際には知らないといけないでしょう。


そこで今回はpackage.jsonとnpmコマンドについてわかりやすく解説していきます。

あわせて読みたい

エンジニアが副業を始めるには?エンジニアの副業にはどんな種類がある? 本記事ではこのような疑問を解決します。副業がブームになっている昨今、エンジニアほど副業をやりやすい職業はないでしょう。副業に関心があったり、副業をしてみたいと思っ[…]

アイキャッチ画像

package.jsonとは?

package.jsonとは、Node.jsにおいてインストールするパッケージが記述されたファイルです。

このファイルがあるおかげで、
環境が変わってもコマンド一発で元々あったパッケージをインストールすることが可能になります。

そのため、開発環境の移行においてはnode_modulesの中身をGitなどに登録する必要がありません。

いわばパッケージ管理の設計書で、
どんな環境においてもpackage.jsonを読み込むことで同じパッケージをインストールすることができます。

あわせて読みたい

フリーランスエンジニアが案件獲得方法とは?自ら営業せずに案件を獲得するには?実務経験1年未満でも大丈夫なの? 本記事ではこのような疑問を解決します。これからフリーランスエンジニアとして独立したい方は、兎にも角にも案件の獲得が急務です[…]

アイキャッチ画像

package.jsonの構成要素

ここではpackage.jsonの構成要素を見ていきます。

最初に軽く説明しておくと、
name, version, description, licenseなどのデータは単なるパッケージのメタデータであるため、
パッケージを公開する時以外はあまり気にする必要はありません。

一方、bin, main, dependencies, devDependencies, scriptsは機能的に重要な要素であるため、
パッケージを管理する上で記述頻度も高くなるでしょう。

○name

・パッケージの名前
・必須項目
・nameとversionが一緒になってパッケージが完全に一意となる

○version

・パッケージのバージョン
・必須項目
・nameとversionが一緒になってパッケージが完全に一意となる

○private

・パッケージ公開の有無
・このプロパティがtrueの場合は公開ができない

○description

・パッケージの説明
・npm searchコマンドで表示されるため、パッケージの検索に役立つ

○main

・パッケージの中で最初に呼ばれるモジュール(ファイル)を指定する
・パッケージのルートディレクトリからの相対パスを指定する

○homepage

・プロジェクトのHP(URL)を指定する
・プロジェクトにHPがある場合は指定すると良い

○dependencies

・本番環境でも利用するパッケージやその依存関係が記述される
・例)reactなど
・package.jsonがあるディレクトリでnpm installコマンドを実行すると、dependenciesとdevDependenciesに記述されたモジュールがnode_module内にインストールされる

○devDependencies

・開発環境やテスト環境で利用するパッケージやその依存関係が記述される
・例)eslintやjestなど

○scripts

・スクリプトを実行するエイリアスコマンドを指定する
・キーがイベント、値がコマンド
・startやtestなどの予約語以外を登録した場合はnpm run 【コマンド名】として実行する

○bin

・コマンドとして実行したいファイルを指定する
・コマンド名とファイル名をマップする

※dependenciesとdevDependenciesを分ける意味
・npm install時の–productionオプションによってインストールするパッケージを限定できる
・npm install –productionはdependenciesに含まれるパッケージだけをインストールする
・これによりインストール時間の短縮やディスク使用量の削減を期待できる

package.jsonとpackage-lock.json

package.jsonを使ってパッケージのインストールをすると、
package-lock.jsonというファイルが作成されます。

ここでは両者の違いを確認しましょう。

○package.json

・インストールするモジュールが記述される

○package-lock.json

・パッケージをインストールした時に新規作成・更新される(npm installコマンド実行時)
・実際にインストールしたパッケージ情報が記載されている(npm installコマンド実行時)
・node_modules の中に入っているモジュールのすべてが記載されている
・直接編集してはいけない
・基本的に無視していいファイル

パッケージ管理で利用するnpmコマンド

最後にパッケージ管理(インストール)で利用するnpmコマンドを確認しましょう。

ここでのインストールはpackage.jsonにあるコードが読み込まれて処理がなされます。


そもそもnpmとはNode.jsのパッケージ管理ツールです。

npmはパッケージの作成や公開、NPM上のパッケージをローカルにインストールする役割を担います。

ちなみに、NPMとは主にNode.js用のライブラリやブラウザ用のライブラリが豊富にあるパッケージレジストリのことです。

Node.jsを使う場合は必須と言っていいパッケージ管理ツールになります。

○パッケージのインストール(dependenciesに追加)

・npm install パッケージ名
・npm i パッケージ名

※–saveオプションは以前のバージョンまで

○開発環境でのみ利用するパッケージのインストール(devDependenciesに追加)

・npm install パッケージ名 --save-dev
・npm install パッケージ名 -D
※パッケージ名をスペースで区切り、複数のパッケージを指定することもできる

○dependenciesとdevDependenciesにあるパッケージのインストール

・npm install

○dependenciesにあるパッケージのみのインストール

・npm install --production

○package.jsonとpackage-lock.json を更新しない、パッケージのインストール

・npm ci
※package.jsonの依存関係の解決を行わず、常にpackage-lock.jsonを見て依存パッケージをダウンロードしnode_modules の洗い替えを行う
※package.jsonとpackage-lock.jsonの間に一致しない依存関係がある場合、npm ciはエラーを起こす
→このパターンでは、npm installはpackage-lock.jsonを更新する

まとめ

以上がpackage.jsonとnpmコマンドについてです。

package.jsonの中身を理解することで、それぞれの開発に合ったパッケージ管理を行うことができるでしょう。

また、npm installコマンドはオプションまで押さえておくことで用途に応じたパッケージのインストールができます。

本記事が少しでもあなたのお役に立つことができたら幸いです。