LoginSignup
0
2

More than 5 years have passed since last update.

[Laravel5] スマートに開発用パッケージをprovider登録する方法

Posted at

Laravelでのサービス開発を容易にするために多くのパッケージをインストールします。
パッケージ管理には開発時のみ使用したいパッケージと常に使用したいパッケージがあります。
Laravelでパッケージの管理をするには、composer.jsonでrequirerequire-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 vendorpublish

config/dev-booter.phpの中には以下の3つのキーが存在します。

  1. dev_environments(開発環境を指定することができます)
  2. dev_providers_config_key(設定ファイルのどこに開発用プロバイダ配列があるかを指定できます)
  3. dev_aliases_config_key(設定ファイルのどこに開発用エイリアス配列があるかを指定することができます)

使用法

登録の仕方は通常のプロバイダーと同じように開発用サービスプロバイダーを設定することだけです。
これを除いて、2種類のサービスプロバイダを完全に分離し、不要なサービスプロバイダを本番環境にロードしたり登録したりすることはありません。
同じく開発環境でのみ使用できるクラスエイリアスを設定することもできます。

'dev_providers' => [
    Barryvdh\Debugbar\ServiceProvider::class,
],

'dev-aliases' => [
    'Debugbar' => Barryvdh\Debugbar\Facades::class,
]

まとめ

これらはもう少し簡易的でも良い場合、簡単にコードとして自作することもできます。
ですがそれには作成、管理コストが発生するため、多くも場合はパッケージを頼ることも重要です。
Laravel公式として対応してくれるのが一番良いのですがね。

0
2
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
0
2