LoginSignup
27
19

More than 5 years have passed since last update.

[Laravel5]composerでrequire-devのものをproviders/aliasesに登録したい時の一工夫

Last updated at Posted at 2015-09-25

現象

composer update --no-dev

をするとcomposer.jsonのrequire-devはロードされない。
しかし、Laravelのconifg/app.phpでaliases/providersに登録しているとcomposer updateが失敗してしまう。
特にLaravelではLaravelDebugBarがよく使われており、このパッケージはproduction環境では必要ないため、requre-devに設定されることが多い。すると上記コマンドでは

(Class 'Barryvdh\Debugbar\ServiceProvider' not found)

とエラーメッセージが出てしまう。
気にせずcomposer updateをすれば、成功はするのだが、不必要なパッケージまでデプロイするべきではない。
以下では2つの方法で上記の現象を解消したので紹介する。

対処法

1. config/app.php内で切り分ける

config/app.phpは以下のように記述されている

<?php

return [
        ~~~~~~
    'providers' => [
         'Illuminate\Auth\AuthServiceProvider',
         ....
    ],
    'aliases' => [
        'App'       => 'Illuminate\Support\Facades\App',
        ....
    ]
];

なので、一旦return されているものを tmp とし、env('APP_ENV')がlocalの場合追加してあげれば良い。
以下のようなコードになる

<?php

$tmp = [
        ~~~~~~
    'providers' => [
         'Illuminate\Auth\AuthServiceProvider',
         ....
    ],
    'aliases' => [
        'App'       => 'Illuminate\Support\Facades\App',
        ....
    ]
];
if (env('APP_ENV') == 'local') {
  $tmp['providers'][] = 'Barryvdh\Debugbar\ServiceProvider';
  $tmp['aliases']['Debugbar']  = 'Barryvdh\Debugbar\Facade';
}
return $tmp;

これで動くは動くがなんかLaravelらしくない。

2.serviceproviderを作る

1の方法で実装していたが、serviceproviderで実装する方法があったので実装した。
http://blog.piotrows.pl/en/laravel-5-load-serviceprovider-depend-on-env-file/
リンク先のFinal ServiceProvider codeと同じため(コメントの一部を日本語化したぐらい)のためここにはコードはアップしない。
gistには参考までにupしてある。
https://gist.github.com/ytacky/b5aca6598ca1770a92f6

気をつけることは、config/app.phpのproviderに

'App\Providers\LocalEnviromentServiceProvider',

を追加すること

まとめ

LaravelDebugBarを紹介している記事ではほぼconifg/app.phpでaliases/providersの設定をしている。個人用のプログラムで本番環境に不要なパッケージがデプロイされても特に問題ないならば、その実装方法でも問題ない。基本的には composer update --no-devしてdev環境以外でいらないパッケージはデプロイしないようにしたほうがいい。

27
19
0

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
27
19