はじめに
Node.jsのEOL対応のため、NodeやNuxt、各種packageのアップグレードを行うことになりました。
これまでpackage.jsonについては「依存関係を書くファイル」程度の理解でしたが、実際にアップグレード対応を進める中で、その仕組みやlockファイルの重要性を改めて理解しました。
本記事では、自分自身の振り返りも兼ねて学んだことを整理します。
同じようにEOL対応を行う方、package.jsonについて知りたい方の参考になれば幸いです。
EOL対応とは
EOL(End Of Life)とは、そのバージョンのサポートが終了することを指します。
Node.jsの場合、EOLを迎えると以下のようなリスクが考えられます。
- セキュリティアップデートが提供されない
- バグ修正が行われない
- ライブラリ側がサポート対象外にすることがある
つまり「動いてはいるけれど、安全ではない」状態になります。
そのため、EOLを迎える前にNodeや関連パッケージのアップグレード対応が必要になります。
package.jsonとは
package.jsonは、Nodeプロジェクトの「設計図」のようなファイルです。
プロジェクトの依存関係を記録しておくことで、
- 新しくプロジェクトに参加したメンバーが環境構築する場合
- 別のPCでプロジェクトを動かす場合
- 時間が経ってから改めて環境構築する場合
でも、npm installや yarn install を実行するだけで、同じように必要なパッケージをインストールすることができます。
また、依存関係を記述することで、同じプロジェクトに臨むメンバーと環境を合わせることができます。
この中には、
- どんなライブラリを使っているか
- どのバージョンを使っているか
- npm run で実行できるスクリプト
- プロジェクトの名前やバージョン
などが記述されています。
package.jsonでできること
それでは、package.jsonでできることをEOL対応での経験をもとにアウトプットします。
プロジェクトで使用しているライブラリやそのバージョンを記録する
package.jsonには、プロジェクトで使用しているライブラリとそのバージョンを記録することができます。
プロジェクトでどのライブラリを使用しているのかを一目で確認することができます。
ほかのメンバーと共通のバージョンが使える
package.jsonに記載されているバージョンを元にインストールされるため、メンバー間でライブラリのバージョンに差異がでることを防ぐことができます。
もし使用するパッケージのバージョンが人によって違ってしまうと、
- 動作が微妙に変わる
- ビルドが通らない
- 意図しない差分が生まれる
といった問題が発生し、リポジトリが荒れてしまう原因になります。
プロジェクトの設定を記録することができる
package.jsonには依存関係だけでなく、プロジェクトに関するさまざまな設定を記録することができます。
代表的なものとして以下があります。
dependenciesとdevDependencies
下記のように用途によって依存関係を分けて管理することができます。
- dependencie
- 本番環境でも必要になるライブラリ
- devDependencies
- 開発時のみ使用するライブラリ(テストツールやビルドツールなど)
プロジェクトで使用するscriptsの設定ができる
// 例)
"scripts": {
"dev": "nuxt dev",
"build": "nuxt build"
}
scriptsにコマンドを記述しておくことで、npm run devのように簡単なコマンドで開発サーバーを起動することができます。
プロジェクトによっては、
- 開発サーバー起動
- ビルド
- テスト実行
などがまとめられていることが多いです。
enginesでnodeのバージョンを設定できる
"engines": {
"node": ">=24"
}
enginesでは、プロジェクトで使用するNode.jsのバージョンを指定することができます。
EOL対応を行う際には、Nodeのバージョンを更新する必要があるため、この設定が重要になるケースもあります。
次回の記事で書くこと
今回はpackage.jsonの基礎についてまとめました。
次回以降では、実際の経験を元に、下記について書いていけたらと考えています!
- EOL対応でスタックしたこと
- package.jsonに設定していてもバージョンがその通りにならないケース
- バージョン指定の^ と ~ の意味
- lockファイルの役割
- EOL対応で学んだこと&反省
- 実際にEOL対応でのpackage.jsonの動きをシミュレーションしてみる
参考)