Composerを利用するとPHPのライブラリを自動的にインストールして、すぐに開発できる環境が整います。 Composerを利用していてよく利用するコマンドがinstallやupdateです。この2つのコマンドに関わるファイルとしてcomposer.jsonとcomposer.lockファイルがあります。 今回はこの2つのコマンドの扱い方とファイルとの関係を解説していきます。

Composer installとupdateの違い

3年以上前に更新されました。情報が古い可能性があります。
更新日 : 2019年12月25日

Composerを利用するとPHPのライブラリを自動的にインストールして、すぐに開発できる環境が整います。

Composerを利用していてよく利用するコマンドがinstallupdateです。この2つのコマンドに関わるファイルとしてcomposer.jsoncomposer.lockファイルがあります。

今回はこの2つのコマンドの扱い方とファイルとの関係を解説していきます。

composer.jsonファイルとは

Composerを扱う上で必須のファイルです。このファイルにプロジェクト名・プロジェクトの説明・プロジェクト作成者・プロジェクトで利用するライブラリとそのバージョンの指定等様々な内容を記述していきます。

composer.lockファイルとは

composer.lockファイルは必須ファイルではありません。このファイルには各ライブラリのバージョン情報が記載されています。そのため、チームで開発しているメンバーがライブラリをインストールする際にはこのcomposer.lockファイルを元にライブラリのバージョン情報を確認してダウンロードを行います。

このファイルが存在することにより、どの開発メンバーでも同じバージョンのライブラリをインストールすることができます。

installコマンドとupdateコマンドの違い

composer installコマンドとcomposer updateコマンドの違いは上記で説明したlockファイルとjsonファイルの扱いに関係しています。

composer installコマンドの動作

composer installコマンドの動作は下記の順番で行われます。

  1. composer.lockファイルを確認
  2. composer.lockファイルが存在すれば、ファイル内の各ライブラリのバージョン情報などを確認し、インストールするライブラリを決定
  3. composer.lockファイルが存在しない場合には、composer.jsonファイルを確認
  4. composer.jsonファイル内にあるインストールするべきライブラリをバージョン情報に従いダウンロード・インストールを行う

基本的にはこのような流れでライブラリのインストールが行われます。

composer updateコマンドの動作

updateコマンドを行うとcomposer.lockファイルは確認されません。文字通りライブラリのアップデートを行います。このときアップデートするバージョンはcomposer.jsonファイルにしたがって行われます

そしてライブラリのインストールが終了するとインストールしたライブラリの情報をcomposer.lockを更新して次にインストールする開発者のために利用されます。

composer.jsonファイルにもcomposer.lockファイルにもライブラリの情報とそのバージョン情報が記載されていますが、何が異なるのでしょうか。

composer.jsonファイルとcomposer.lockファイルのライブラリ情報

composer.jsonファイルにはバージョン情報が記載されていますが、アバウトなバージョン情報が記載されています。

例えばcomposer.jsonでライブラリのバージョン情報を指定する際2.*のように記載されたりします。

このように指定すると2.0.0から3.0.0未満(3.0.0を含まない)の間で最新バージョンがインストールされるようになります。これがcomposer.jsonファイルでアバウトにバージョン情報を記載するということです。

そもそもバージョン情報はx.y.zのように表現され、x・y・zにはバージョンの数字が入ります。xにはメジャーバージョン・yにはマイナーバージョン・zにはパッチバージョンが記載されるのが基本です。

メジャーバージョンがアップデートされるとライブラリの仕様が変更されることがありますが、パッチバージョンのアップデートであればライブラリのバグ修正程度の修正に落ち着きます。

このようにバージョン情報には仕様が変わってしまうほどのバージョンアップとそれほど変わらないバージョンアップがあるので、ライブラリを利用する側としては仕様が変わらない程度でバージョンアップを行いたいことが多くあります。

そのようなときに上記のようにアバウトにバージョン情報を記載すればバグ修正のバージョンのみをアップデートすることができるようになり、プロジェクト本体への影響が少なくなります。

そしてcomposer.lockファイルが存在することにより、どの開発者でも全く同じバージョンをインストールすることができるようになります。

updateコマンドを利用するとcomposer.jsonファイルのバージョン情報に従い、指定されたバージョン情報で最新のバージョンがインストールされます。例えば、composer.json2.*と記載されたライブラリで現状2.0.0がインストールされていたとして、ライブラリが更新され2.1.53.0.0がリリースされた場合、updateコマンドを利用することで2.*のバージョン指定に従い2.1.5へアップデートされます。

まとめ

Composerのコマンド2種類(install & update)とそれらコマンドに関わるファイル(composer.jsoncomposer.lock)について解説しました。

これらの内容は公式コマンドラインインターフェースドキュメントに記載されている内容を元に作成したものです。その他細かいオプションについては現状は公式サイトをご覧ください。