ケケンタComposerを使うときにcomposer.lockファイルって出てくるけど、これってどんなファイルなの?
composer.jsonとどう違うの?
今回はこのような疑問にお答えするため、
Composerを使用するときに登場する
composer.lockファイルとcomposer.jsonファイルの違い
を解説します。
composer.lockファイルとcomposer.jsonファイルの違いcomposer.lockファイルとcomposer.jsonファイルの役割- 後からパッケージを追加したり更新(修正)したりする方法


Composerとは?
Composerとは、PHPのパッケージライブラリを管理するためのツールです。
パッケージライブラリは、簡単に言うと便利な機能(関数やクラスなど)がすでに実装されている機能のまとまりのことです。
例えば、Goutteというパッケージライブラリを使用すると、スクレイピング(Web上から情報を自動収集する技術)を比較的簡単に実装することが可能です。
Composerの基本的な使用方法
この記事での詳しい解説は割愛させていただきますが、Composerを使用するときの大まかな流れは以下の通りです。
composer.jsonファイルを新規作成するcomposer.jsonファイルにインストールしたいパッケージ名:バージョンを記載する- ターミナルで
composer installコマンドを実行する - パッケージがインストールされる&
composer.lockファイルが生成される
上記の流れにあるとおり
Composerを使用する中で、composer.lockファイルとcomposer.jsonファイルの2つが登場します。
この記事で解説するのが、
「この2つのファイルはそれぞれどのような役割を持つのか?」
「何が違うのか?」
という点です。


composer.jsonとcomposer.lockの違い
それでは、この記事の本題である
composer.jsonとcomposer.lockの違い
について解説をしていきます。



この2つのファイルの違いを理解するためには、それぞれのファイルの役割を知ることが大切です!
composer.jsonの役割
プロジェクト立ち上げ時に、インストールしたいパッケージをComposerへ伝えることがcomposer.jsonの役割です。
composer.jsonにインストールしたいパッケージ情報を記述しておき、composer installコマンドを実行することで、記述したパッケージや依存関係にあるパッケージが自動的にインストールされます。
composer.lockの役割
チーム開発のとき、チームメンバーが効率的に同じパッケージをインストールできるようにすることがcomposer.lockファイルの役割です。
前述したとおり、初めてcomposer installコマンドを実行すると、Composerはcomposer.jsonファイルを参照し、そこに記述されているパッケージとその依存パッケージをインストールします。
それと同時に、「どんなパッケージをインストールしたのか」という情報がcomposer.lockファイルに記録されます。
そして、ここが重要なポイントですが、
composer.lockファイルがある状態でcomposer installコマンドを実行すると、Composerは.jsonではなく、.lockを参照してパッケージをインストールします。





つまり、チームメンバー間で同じcomposer.lockファイルを共有してcomposer installコマンドを実行すれば、全員が簡単に同じパッケージをインストールできるということです。
以上が、composer.jsonとcomposer.lockファイルの違いです。
パッケージを更新(修正)・追加する方法
前述のとおり、
composer.lockファイルがあるときは、composer installコマンドを実行してもcomposer.jsonファイルに記述されている内容は参照されません。
つまり、あとから



パッケージの情報を変えたいな……
パッケージを追加したいな……
となったときにcomposer.jsonファイルを編集してcomposer installコマンドを実行しても、パッケージに変更が加わらないということです。
パッケージを「更新(修正)」または「追加」したいときは、以下のようにまた違うコマンドを使用します。
- composer.jsonを編集する
composer updateまたはcomposer update パッケージ名コマンドを実行する
「composer update」と「composer update パッケージ名」の違い
composer update…… composer.jsonに記述されている全パッケージに対して更新が実行されるcomposer update パッケージ名…… composer.jsonに記述されている、指定したパッケージのみ更新が実行される
composer require パッケージ名コマンドを実行する
パッケージのバージョンを指定したいとき
composer require パッケージ名:バージョン番号コマンドを実行する
(例)composer require hoge/huge:3.1.0



Composerであとからパッケージを更新(修正)したり追加したりするときは、updateやrequireコマンドを使うということを覚えておきましょう!
composer.lockファイルを上手く活用してチーム開発を効率化しよう
以上がcomposer.lockファイルとcomposer.jsonファイルの違いでした。
このように、2つのファイルの役割には明確な違いがあります。
特にcomposer.lockファイルは、チーム開発をする上で上手に活用できるとパッケージを安全かつ効率的にインストールできます。



いまはまだ個人でしか開発していないという方も、composer.lockファイルとcomposer.jsonファイルの違いをしっかり整理しておくことでComposerへの理解も深まるかと思います。
この記事が少しでもお役に立ったなら何よりです!


















コメント