Laravelでのサービス開発を容易にするために多くのパッケージをインストールします。
パッケージ管理には開発時のみ使用したいパッケージと常に使用したいパッケージがあります。
Laravelでパッケージの管理をするには、composer.jsonでrequire
とrequire-dev
を使用します。
require-dev
は本番環境でインストールされて欲しくないパッケージ群を登録します。
問題
パッケージをインストールしprovider
として登録したいが、Laravelではproviderの登録は開発用、本番用で分割されていません。
そのため開発用パッケージをprovider
として登録すると、本番環境ではインストールされていないパッケージが使われるのでclass not found
が発生します。
解決策
解決策としては開発時のみ読み込む、dev-provider
のようなものがあればスマートに解決できそうです。
Laravel Dev Booterはこれを解決してくれます。
$ composer require percymamedy/laravel-dev-booter
解説
インストールと追加
config/app.php
のサービスプロバイダー配列に以下を追加しましょう。
'providers' => [
...
PercyMamedy\LaravelDevBooter\ServiceProvider::class、
]、
DevBooterのコンフィグが見たい場合
以下のコマンドを実行しPercyMamedy\LaravelDevBooter\ServiceProvider
の項目を選択しましょう。
隠れていたconfig/dev-booter.php
が見える場所に生成され、編集できます。
必要なくなれば削除しても良いです。
$ php artisan vendor:publish
config/dev-booter.php
の中には以下の3つのキーが存在します。
- dev_environments(開発環境を指定することができます)
- dev_providers_config_key(設定ファイルのどこに開発用プロバイダ配列があるかを指定できます)
- dev_aliases_config_key(設定ファイルのどこに開発用エイリアス配列があるかを指定することができます)
使用法
登録の仕方は通常のプロバイダーと同じように開発用サービスプロバイダーを設定することだけです。
これを除いて、2種類のサービスプロバイダを完全に分離し、不要なサービスプロバイダを本番環境にロードしたり登録したりすることはありません。
同じく開発環境でのみ使用できるクラスエイリアスを設定することもできます。
'dev_providers' => [
Barryvdh\Debugbar\ServiceProvider::class,
],
'dev-aliases' => [
'Debugbar' => Barryvdh\Debugbar\Facades::class,
]
まとめ
これらはもう少し簡易的でも良い場合、簡単にコードとして自作することもできます。
ですがそれには作成、管理コストが発生するため、多くも場合はパッケージを頼ることも重要です。
Laravel公式として対応してくれるのが一番良いのですがね。