package.jsonファイルは、Node.js+JavaScriptでのアプリ開発時に、そこで使用するパッケージやプロジェクト全体を管理するのに使われる。
package.jsonファイルは、Node.jsベースのJavaScriptアプリ開発において、npmでパッケージ(各種フレームワークやライブラリ)を管理するために使われる構成ファイルだ。
Node.jsとJavaScriptを使ってアプリを開発する場合、そのプロジェクトで使用するパッケージ/モジュールの管理にはnpmと呼ばれるツールを用いて管理する。このときに、アプリが依存するパッケージに関する情報(さらにはプロジェクト全体に関する情報)を記録するのに使用するのがpackage.jsonファイルだ。
package.jsonファイルはおおよそ次のような構成を取る。
図に示した通り、このファイルではJSON形式で各種の設定を記述していく。このうち、必須なのは、そのアプリ/モジュールの名称とバージョンを示すname属性とversion属性だ(npmのリポジトリなどを介して、自作のモジュールなどを配布する際には、この二つの属性が識別子となる)。
図でその下にあるのは、プロジェクトの説明となるdescription属性、エントリポイントを示すmain属性、「npm start」「npm test」などのコマンドの実行時に実際に実行されるコマンドラインを記述するscripts属性、作者を記載するauthor属性、ライセンスを示すlicense属性だ。
その下のdependencies属性は「アプリ(モジュール)の実行時に必要なパッケージ」を、最後のdevDependencies属性は「アプリ(モジュール)の開発時にだけ必要なパッケージ」を記述する。自作のアプリやモジュールを配布するのであれば、実行に必要なものは前者に、開発時にのみ必要なもの(例えば、アプリのビルド時に使用するトランスパイラ、gulp/Gruntのプラグインなど)は後者に記述する。
npmでパッケージ管理を行う場合、ローカルにインストールしたパッケージはプロジェクトのnode_modulesディレクトリ以下に保存される。そして、必要なパッケージが増加するに従って、このディレクトリの下には多数のファイルが保存されていく。プロジェクトやパッケージを他者に配布する場合に、こうしたファイルまでアーカイブしたり、コピーしたりすると時間や手間が想像以上にかかる。
必要なパッケージをdependencies属性とdevDependencies属性に記述しておけば、そのプロジェクトを別マシンに移動したり、他の人に渡したりする際に「node_modules」ディレクトリ以下のファイルまでコピーする必要がなくなる。プロジェクトのコピー先で「npm install」コマンドを実行するだけで、必要なパッケージがダウンロードされ、環境を復元してくれる。
package.jsonファイルはテキストファイルなのでもちろん好みのエディタを使用して手作業で編集してもよいが、npmコマンドで作成/編集するのが簡単だ。
package.jsonファイルを作成するには、プロジェクトのルートディレクトリで「npm init」コマンドを使用する。
> npm init
…… 省略 ……
Press ^C at any time to quit.
name: (pkgsmpl)
version: (1.0.0)
…… 省略 ……
Is this ok? (yes)
実行すると、対話的に上述した属性を入力できる。「--yes」オプションを指定すれば、デフォルト値を使用してファイルを作成してくれる。以下に作成したpackage.jsonファイルの例を示す。
{
"name": "pkgsmpl",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
dependencies属性とdevDependencies属性に、プロジェクトが依存するパッケージを追加するにはそれぞれ「npm install パッケージ名 --save」「npm install パッケージ名 --save-dev」を実行する。プロジェクトで利用可能なパッケージのバージョンを範囲指定するときには、その後で編集する。
何らかのリポジトリからNode.jsベースのプロジェクト/モジュールをダウンロードした場合には上述したように「npm install」コマンドを単独で実行する。
version属性に指定するバージョンは「メジャー.マイナー.パッチ」の形式で三つの数値をピリオドで区切って記述するのが一般的だ(これに加えて「-alpha.x」「-beta.x」のような記述が付加されることもある)。
また、dependencies/devDependencies属性ではバージョン(の範囲)をsemver(semantic versioner)と呼ばれる形式で指定する。基本的には以下の演算子とバージョンを組み合わせて指定する(演算子とバージョンの組み合わせをコンパレータと呼ぶ)。
例えば「>=1.1.1」は「バージョン1.1.1以上」を意味する。コンパレータは空白文字や「||」演算子で区切って複数指定できる。前者の場合、指定した全ての要素を満たすものが該当する。例えば、「>=1.1.1 <1.2.3」であれば「1.1.1、1.1.9、1.2.1」などが該当する。後者の場合、「||」はORを意味する。例えば、「1.1.1 || >=1.2.3 <1.5.0」であれば「1.1.1か、1.2.3以上1.5未満」に合致するバージョンを意味する(1.2.0、1.2.2などは合致しない)。
この他にも「>=x.x.x <=y.y.y」のショートカット記法となる「x.x.x - y.y.y」や、「おおよそこのバージョン」を意味する「~x.y.z」、メジャー/マイナー/パッチのいずれかをワイルドカードで指定する「1.1.x」「1.1.*」、メジャー/マイナー/パッチのうち0でない最上位の数値以外を任意とする「^1.2.3」(これは「>=1.2.3 <=2.0.0」を意味する)などの記法が使える。詳細については「semver」ページなどを参照されたい。
package.jsonファイルはNode.js+JavaScriptでアプリやモジュールを開発する際のパッケージ/プロジェクト管理に必須といえるファイルであり、JavaScriptでのアプリ開発が一般的となった今ではその基本はしっかりと押さえておきたい要素だ。
Copyright© Digital Advantage Corp. All Rights Reserved.