composer.jsonの特徴
- システムに依存するパッケージを定義するファイル。
- composer installを実行すると、composer.jsonを元に依存解決して、パッケージのダウンロードを行ってvendor/に配置する
- composer installを実行した際、composer.lockが同じ階層になければ、ダウンロードしたパッケージのバージョン情報をcomposer.lockに書き込む。
- プロジェクトごとにcomposer.jsonファイルを作成する。
- JSONで書く(”パッケージ名”:”バージョンの形式で書く”)
- パッケージのバージョン指定にワイルドカードが使える。例えば、1.0.*と記載されている場合は、1.0.3などが該当する。
- パッケージのバージョン指定にチルダが使える。例えば、~1.3.0と記載されている場合は、1.0.3とそれ以前が該当する。
composer.jsonのファイルの形式
{ "require": { "php": ">=5.5.9", "cakephp/cakephp": "~3.4", }, "require-dev": { "psy/psysh": "@stable", "cakephp/debug_kit": "~3.2", "cakephp/bake": "~1.1" }, }
requireに依存関係のあるパッケージを記載している。
require-devでは、開発環境飲みに必要なパッケージを記載している。
composer.jsonの作成方法
# composer init
composer initを使わずに自分でファイル作成しても構わない。
composer.lockの特徴
- composer.jsonと同じ階層におく
- composer.lockが存在する場合、composer installでは、composer.lockに記載されたバージョンのパッケージをダウンロードする。
- composer.lockが存在しない場合、デプロイする度に毎回、composer.jsonを生成してcomposer install(composer update)をしてしまうので、その都度パッケージのバージョンアップが起こる。このため、チーム開発では、composer.lockもコミットしておくといい。
- composer.lockを更新したい場合は、composer.jsonを変更して、composer updateを実行する。
概ねの流れ
composer.jsonにプロジェクトに必要なパッケージとそのバージョンを書く。
↓
composer installを実行すると、composer.jsonを元にパッケージをダウンロードする。
この時、ダウンロードしたパッケージとバージョンがcomposer.lockに書き込まれる。
↓
これ以後、composer installを実行を実行した際は、composer.lockがあるので、最初にcomposer installを実行したバージョンと同じバージョンでパッケージをダウンロードする。
↓
パッケージを更新する際は、composer.jsonを更新して、composer updateを実行する。この際、ダウンロードしたパッケージとバージョンが新たにcomposer.lockに書き込まれる。
まとめ
チーム開発をしている場合は、composer.lockをgitにコミットしておくと違う環境でも同じバージョンにパッケージがダウンロードできる。