Skip to content
Latchkey

Composer vs npm: CIにおけるPHPとNodeの依存関係マネージャー

ComposerはPHPの依存関係マネージャー、npmはNodeの依存関係マネージャーです。多くのフルスタックリポジトリでは両方を使うため、本当の問いはCIでそれぞれがどう振る舞うかです。

Composerはcomposer.json/composer.lockからPHPの依存関係とオートローディングを管理します。npmはpackage.json/package-lock.jsonからNodeパッケージを管理します。対象とするランタイムは異なりますが、lockfileとキャッシュという同じパターンを共有しています。

Composernpm
エコシステムPHP (Packagist)JavaScript (npm registry)
Lockfilecomposer.lockpackage-lock.json
CIでのインストールcomposer install --no-dev (prod)npm ci
オートローディングPSR-4オートローダー生成モジュール解決 (Node)
再現性lockからlockから

CIでの挙動

どちらもコミットされたlockfileと決定論的なインストールコマンドを必要とします。composer install (本番環境では多くの場合 --no-dev --optimize-autoloader 付き) と npm ci です。フルスタックアプリでは、これら両方のステップを1つのjobで実行することがよくあります - PHP依存関係はComposerで、フロントエンド依存関係はnpmで。それぞれcacheが温まっていれば高速ですが、ネイティブパッケージやオートロードの重いパッケージを大量にコールドインストールする場合は遅くなります。

両方をcacheする

Composerのvendorディレクトリ (composer.lockをキーにする) と npmのnode_modules/cache (package-lock.jsonをキーにする) を個別にcacheしましょう。どちらのインストールもCI runner上で実行されます。より高速なマネージドrunnerは、支配的になるコールドインストールを短縮します。

結論

両者は交換可能ではありません - PHPにはComposer、Nodeにはnpmです。フルスタックのパイプラインでは両方を使います。各lockfileをコミットし、決定論的なインストールコマンドを使い、各エコシステムのディレクトリを個別にキャッシュしましょう。

関連ガイド