こんにちは、物書きエンジニアです。
今回は、composer.jsonとcomposer.lockについて、それぞれの役割を分かりやすく解説します。
「何となく使ってはいるけど、いまいち理解できてない。。」という方も多いと思うので、参考にして頂けると幸いです。
Composerとは何か?
composer.json、composer.lockについて説明する前に、そもそも「Composerとは何か」について簡単に解説しておきます。
Composerとは、一言でいうと「PHPのパッケージ・ライブラリ管理ツール」です。
PHPを用いたアプリ開発に必要なライブラリやパッケージをまとめて管理することができます。
このような「パッケージ管理ツール」を利用することの主なメリットは以下の3つです。
- パッケージのインストールが楽にできる
- チーム開発でパッケージやパッケージのバージョンを統一できる
- パッケージの依存関係を考えなくていい
パッケージのインストールが楽にできる
パッケージ管理ツールを使わない場合、必要なパッケージを全て手作業で一つずつインストールする必要があります。
ハッキリ言ってとてもめんどくさいです。
一方パッケージ管理ツールを使えば、コマンド一発で必要なパッケージをすべてインストールすることができます。
チーム開発でパッケージやパッケージのバージョンを統一できる
チームでサービスを開発する場合、当たり前ですが、パッケージやパッケージのバージョンは統一する必要があります。
そんなとき、パッケージ管理ツールがなかったらとても大変です。
単に同じパッケージをインストールするだけでなく、バージョンも統一する必要があるため、メンバー間でかなりの精度で認識を共有する必要があるからです。
確実に間違ったパッケージやバージョンをインストールする人が現れます。
一方、パッケージ管理ツールを使えば、そのような問題は一挙に解決できます。
composer.lock(後ほど詳しく説明します)をGit管理して共有すれば、それだけでメンバー間でパッケージやパッケージのバージョンを統一できるからです。
さらに、インストールするパッケージをcomposer.jsonに記述するのも一人だけで良いため、チーム開発の効率も上がるでしょう。
パッケージの依存関係を考えなくていい
「パッケージの依存関係を考えなくて良い」とはつまり、「“インストールしたいパッケージが使っているパッケージ”を考慮しなくて良い」ということです。
普通、パッケージAをインストールしたければ、そのパッケージが使っているパッケージ(パッケージBとかパッケージCとか)もインストールする必要があります。
一方、Composer等のパッケージ管理ツールを使えば、そのような「依存関係」を考える必要はありません。
なぜなら、単にパッケージAをインストールすれば、勝手にパッケージB,Cもインストールしてくれるからです。
composer.jsonとcomposer.lockの役割についてまとめてみた
Composerの概要を掴んだところで、composer.jsonおよびcomposer.lockについて解説します。
Composerがライブラリやパッケージを管理しているファイルがcomposer.jsonやcomposer.lockです。
どちらも「アプリ開発に必要なライブラリを管理している」という点では同じですが、若干役割が違います。
まず最初に使われるのはcomposer.jsonです。
Composerをインストールし、composer.jsonをアプリのディレクトリに配置してcomposer install
をしたら、composer.jsonに書かれた情報を基にパッケージやライブラリがvendorディレクトリ配下にまとめてインストールされます。
このとき同時に生成されるのがcomposer.lockファイルです。composer install時に参照したパッケージやパッケージのバージョン情報がcomposer.lockに書き込まれます。
そして二回目以降はcomposer installをしたときには、composer.jsonではなくcomposer.lockを参照します。
つまり、composer.lockがある場合は、composer installをしても、単にcomposer.lockを参照してライブラリをインストールするだけで、何かパッケージの情報(パッケージの追加とかバージョン情報とか)が書き換わることはないのです。この点は混乱しがちなので注意しましょう。
では、使用するパッケージを追加したい場合や、パッケージのバージョンを変更したい場合はどうすれば良いのでしょうか。
このときには、composer update
を使います。
composer.jsonにパッケージを追加する等の変更を加えて、composer updateをすると、composer.jsonの情報を基にライブラリが最新の状態に変更されます。
そしてこのとき、最新にしたパッケージやライブラリの情報がcomposer.lockに書き込まれます(composer.lockが更新される)。
これ以降は、先ほどまでと同様、composer installをすると、composer.lockを基に最新のライブラリがアプリにインストールされます。
パッケージの追加やアップデートは、composer update
によりできます。
ただし、composer update
をそのまま実行してしまうと、関係ないパッケージのバージョンまで上がってしまうため、実際は、パッケージの追加を行う場合は、composer require パッケージ名
を、パッケージのバージョン更新を行う場合は、composer update パッケージ名
を使うことが多いでしょう。
Composerを用いてチーム開発する場合
以上のcomposer.jsonとcompooser.lockの特性を考えれば、チーム開発をどのように進めれば良いかはイメージが着くと思います。
要は、composer.lockファイルをGit管理してチーム間で共有すれば良いのです。
こうすることにより、composer.lockを手元に落としてきてcomposer installをするだけで、チームでバージョン等を統一した状態で必要なパッケージをアプリにインストールすることができます。
Twitterで発信中!
Twitterでプログラミング学習やブログ運営に関するTipsを発信しています。
ぜひフォローをお願いします!
composer.jsonとcomposer.lockまとめ
今回解説したことをまとめます。
- ComposerはPHPのライブラリ・パッケージ管理ツール
composer install
をすると、composer.jsonを基にパッケージがインストールされ、パッケージの情報が書かれたcomposer.lockが生成される- 二回目以降は、composer installをするとcomposer.lockを基にパッケージがインストールされる(composer.jsonのパッケージ情報は書き変わらない)
- パッケージを追加したい場合は、
composer require パッケージ名
を使用すると、composer.jsonにパッケージ情報が追加される+composer.lockにもパッケージ情報が追加される - パッケージをアップデートしたい場合は、
composer update パッケージ名
を使用すると、パッケージ(composer.jsonの情報)が最新になる+composer.lockにも最新の情報が記載される
今回は以上です。
少しでもあなたがcomposer.json、composer.lockについて理解するための一助となっていれば幸いです。
Composer参考記事まとめ
- 【パッケージ管理】Composerの使い方
- composer.json と composer.lock、install と update の違い
- Composer:composer.jsonとcomposer.lockのこと
- Composerについて(実践編)
- PHP開発でComposerを使わないなんてありえない!基礎編
- composerとは
- composer.lockとcomposer.jsonの違い。composer installとcomposer updateの使い方