LoginSignup
8

More than 5 years have passed since last update.

環境別にcomposer.jsonを使い分ける

Last updated at Posted at 2016-10-31

やり方

Composerはrequire-devで開発環境だけに必要なパッケージを指定できるが、require-prodのような本番だけの指定はできない。

そこで、COMPOSER環境変数でcomposer.jsonファイルを指定することで特定の.jsonを使用することができる。
環境別に例えば、composer-prod.jsoncomposer-dev.jsonを作成し、下記の様にパッケージの更新をかけることで、それぞれの環境でことなるパッケージをrequireすることができる。

COMPOSER=composer-dev.json composer update

.lockファイルもちゃんと使用した.jsonファイルのベースネームで作成してくれる。
例えば、composer-dev.jsonからはcomposer-dev.lockが生成される。

公式ドキュメント

背景

そもそも、なぜこんなことをするかと言うと、OctoberCMSのようなプラグインアーキテクチャで、composer管理したメインプロジェクトのコードベースの中に、同時開発しているプラグインがある場合、composer updateすることで開発中のプラグインがリリース済みのバージョンで上書きされるのを防ぎたかったから。
composerの使い方次第ではあるが、自作プラグインもcomposerで同時にデプロイして欲しいのでcomposer.jsonrequireに入れているため、このような問題が起こる。

この解決策としての自分のやり方はこうだ。

composer-dev.jsonrequireには自作プラグインを含めない。
composer-prodstg.jsonrequireに自分のプラグインを含める。
ステージング環境で下記でプラグインをデプロイする。

COMPOSER=composer-prodstg.json composer update

テストを実施して問題なければ、生成されたcomposer-prodstg.lockをコミットして本番では下記でステージングと同じパッケージ群をデプロイする。

COMPOSER=composer-prodstg.json composer install

いかがでしょう?

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8