Composerとは何か - PHPの依存関係マネージャーを解説
ComposerはPHPの依存関係マネージャーです。プロジェクトに必要なライブラリを解決してインストールし、それらがそのまま動くようにautoloaderを生成します。
Composerは、モダンでlockfile駆動の依存関係管理とオートローディングをもたらすことで、PHP開発を変革しました。要件をcomposer.jsonに宣言すると、Composerがバージョンを解決し、Packagistからパッケージをインストールし、コードがそれらを使えるようにautoloaderを組み立てます。
Composerとは
Composerはプロジェクト単位のPHP依存関係マネージャーです。composer.jsonを読み取り、互換性のあるパッケージバージョンのセットを解決し、それらをvendor/以下にインストールし、正確なバージョンをcomposer.lockに記録します。デフォルトではPackagistレジストリからパッケージを取得し、PSR-4のautoloaderを生成します。
動作の仕組み
composer.jsonには必要なパッケージと制約がリストされます。「composer install」はcomposer.lock(存在する場合)を読み取り、まさにそれらのバージョンをインストールします。「composer update」は再解決してlockfileを書き換えます。生成されたvendor/autoload.phpにより、手動のrequire文なしにコードが必要に応じてクラスを読み込めるようになります。
使用例
パッケージをrequireし、その後lockfileからインストールします。
# add a dependency
composer require guzzlehttp/guzzle
# install exactly from the lockfile (use in CI)
composer install --no-interaction --prefer-distCI/CDでの役割
CIでは「composer install」がロックされた依存関係セットを復元し、「--no-interaction」を使うことでログをクリーンに保てます。vendor/ディレクトリやComposerのcacheを実行間でcacheすることで、パッケージの再ダウンロードを回避できます。composer.lockをコミットすることで、開発者がテストしたのと同じバージョンをCIがインストールするようになり、buildの再現性が保たれます。
代替手段
Composer以前、PHPはPEARに依存していましたが、アプリケーションの依存関係についてはComposerがほぼこれを置き換えました。主流の競合マネージャーは存在せず、Composerが事実上の標準であり、Packagistがその中央レジストリとなっています。
重要なポイント
- ComposerはPHPの依存関係を管理し、autoloaderを生成します。
- composer.jsonが要件を宣言し、composer.lockが解決されたセットを固定します。
- CIでは「composer install」をcacheと組み合わせて使い、再現可能で高速なbuildを実現します。