🐘

[PHP] Deployerでステージング環境へのデプロイ時にはcomposer installに--no-devを付けないようにする

2020/06/13に公開

小ネタですが知らなかった人にとっては意外とお役立ち情報かもしれません😇

PHPのデプロイツール Deployer は、「レシピ」という予め用意されている設定ファイルを利用すれば、設定の記述量がすごく少なくて済むので便利です。

参考
https://deployer.org/recipes.html
https://github.com/deployphp/deployer/tree/master/recipe

ただ、時にはレシピの設定を一部変更して使いたいこともありますよね。

例えば、Deployerではデフォルトで composer install--no-dev で実行されるようになっていますが、ステージング環境では --no-dev なしでインストールしたいというケースもあると思います。

というわけでその方法を説明していくのですが、実はすごく簡単です。

そもそも composer install --no-dev しているコードは以下の箇所です。

https://github.com/deployphp/deployer/blob/39e5fbda61e780dab5bcc33a362563fc7b9c5d90/recipe/deploy/vendors.php#L15

そしてこの {{composer_options}} は以下の箇所で設定されており、

https://github.com/deployphp/deployer/blob/39e5fbda61e780dab5bcc33a362563fc7b9c5d90/recipe/common.php#L93

ここに --no-dev が入っています。

なので、この {{composer_options}} 変数の値を自分の deployer.php で上書きしてあげればいいだけです👍

やり方は、公式ドキュメント にあるとおり、ホスト設定の set() メソッドを使うだけです。

具体的には、以下のようにステージング環境のホスト設定でのみ、 composer_options の値を --no-dev を含まない内容に変更すればよいです。

host('prod')
    ->hostname('xxx.com')
    ->user('xxx')
    ->addSshOption('StrictHostKeyChecking', 'no')
    ->set('branch', 'release')
    ->set('deploy_path', '/path/to/deploy')
;

host('staging')
    ->hostname('staging.xxx.com')
    ->user('xxx')
    ->addSshOption('StrictHostKeyChecking', 'no')
    ->set('branch', 'master')
    ->set('deploy_path', '/path/to/deploy')
    ->set('composer_options', '{{composer_action}} --verbose --prefer-dist --no-progress --no-interaction --optimize-autoloader --no-suggest')
;

これで、ステージングへのデプロイは --no-dev なしで composer install が実行されるようになります。めでたしめでたし。

GitHubで編集を提案

Discussion