PHP

composer.jsonとcomposer.lockの役割について分かりやすくまとめてみた

composer.jsonとcomposer.lockの役割について分かりやすくまとめてみた

こんにちは、物書きエンジニアです。

今回は、composer.jsoncomposer.lockについて、それぞれの役割を分かりやすく解説します。

何となく使ってはいるけど、いまいち理解できてない。。」という方も多いと思うので、参考にして頂けると幸いです。

Composerとは何か?

composer.json、composer.lockについて説明する前に、そもそもComposerとは何かについて簡単に解説しておきます。

 

Composerとは、一言でいうとPHPのパッケージ・ライブラリ管理ツールです。

PHPを用いたアプリ開発に必要なライブラリやパッケージをまとめて管理することができます。

 

このような「パッケージ管理ツール」を利用することの主なメリットは以下の3つです。

  • パッケージのインストールが楽にできる
  • チーム開発でパッケージやパッケージのバージョンを統一できる
  • パッケージの依存関係を考えなくていい

パッケージのインストールが楽にできる

パッケージ管理ツールを使わない場合、必要なパッケージを全て手作業で一つずつインストールする必要があります。

ハッキリ言ってとてもめんどくさいです。

 

一方パッケージ管理ツールを使えば、コマンド一発で必要なパッケージをすべてインストールすることができます。

 

チーム開発でパッケージやパッケージのバージョンを統一できる

チームでサービスを開発する場合、当たり前ですが、パッケージやパッケージのバージョンは統一する必要があります。

そんなとき、パッケージ管理ツールがなかったらとても大変です。

単に同じパッケージをインストールするだけでなく、バージョンも統一する必要があるため、メンバー間でかなりの精度で認識を共有する必要があるからです。

 

確実に間違ったパッケージやバージョンをインストールする人が現れます。

 

一方、パッケージ管理ツールを使えば、そのような問題は一挙に解決できます。

composer.lock(後ほど詳しく説明します)をGit管理して共有すれば、それだけでメンバー間でパッケージやパッケージのバージョンを統一できるからです。

 

さらに、インストールするパッケージをcomposer.jsonに記述するのも一人だけで良いため、チーム開発の効率も上がるでしょう。

 

パッケージの依存関係を考えなくていい

「パッケージの依存関係を考えなくて良い」とはつまり、“インストールしたいパッケージが使っているパッケージ”を考慮しなくて良いということです。

 

普通、パッケージAをインストールしたければ、そのパッケージが使っているパッケージ(パッケージBとかパッケージCとか)もインストールする必要があります。

 

一方、Composer等のパッケージ管理ツールを使えば、そのような「依存関係」を考える必要はありません。

なぜなら、単にパッケージAをインストールすれば、勝手にパッケージB,Cもインストールしてくれるからです。

composerは依存するライブラリも勝手にインストールしてくれる

 

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.lockの有無によるcomposer installの挙動の違い

 

では、使用するパッケージを追加したい場合や、パッケージのバージョンを変更したい場合はどうすれば良いのでしょうか。

このときには、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参考記事まとめ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA