composer.jsonの特徴

  1. システムに依存するパッケージを定義するファイル。
  2. composer installを実行すると、composer.jsonを元に依存解決して、パッケージのダウンロードを行ってvendor/に配置する
  3. composer installを実行した際、composer.lockが同じ階層になければ、ダウンロードしたパッケージのバージョン情報をcomposer.lockに書き込む。
  4. プロジェクトごとにcomposer.jsonファイルを作成する。
  5. JSONで書く(”パッケージ名”:”バージョンの形式で書く”)
  6. パッケージのバージョン指定にワイルドカードが使える。例えば、1.0.*と記載されている場合は、1.0.3などが該当する。
  7. パッケージのバージョン指定にチルダが使える。例えば、~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にコミットしておくと違う環境でも同じバージョンにパッケージがダウンロードできる。