Skip to main content

サービスプロバイダとは

サービスプロバイダは、Laravelアプリケーション全体のブートストラップの中心となる場所です。あなた自身のアプリケーションも、Laravelのすべてのコアサービスも、サービスプロバイダを通じてブートストラップされます。 「ブートストラップ」とは、サービスコンテナへのバインディング、イベントリスナー、ミドルウェア、ルートの登録など、さまざまなものを登録することを意味します。サービスプロバイダはアプリケーションの設定を行う中心的な場所です。 Laravelは内部的に、メーラー、キュー、キャッシュなどのコアサービスをブートストラップするために多くのサービスプロバイダを使用しています。これらのプロバイダの多くは「遅延」プロバイダで、すべてのリクエストでロードされるのではなく、提供するサービスが実際に必要になった時だけロードされます。 ユーザー定義のサービスプロバイダはすべて bootstrap/providers.php ファイルで登録します。
Laravelがリクエストをどのように処理するかについて詳しく知りたい場合は、リクエストライフサイクルのドキュメントを参照してください。

サービスプロバイダを書く

すべてのサービスプロバイダは Illuminate\Support\ServiceProvider クラスを継承します。ほとんどのサービスプロバイダには register メソッドと boot メソッドが含まれます。 新しいプロバイダを生成するには、make:provider Artisanコマンドを使います。Laravelは自動的に新しいプロバイダを bootstrap/providers.php に登録します。

registerメソッド

register メソッド内では、サービスコンテナへのバインディングのみを行ってください。イベントリスナー、ルート、その他の機能を register メソッド内で登録しようとしないでください。まだロードされていないサービスプロバイダが提供するサービスを誤って使用してしまう可能性があります。
サービスプロバイダのメソッド内では、常に $this->app プロパティを通じてサービスコンテナにアクセスできます。

bindingsプロパティとsingletonsプロパティ

多くのシンプルなバインディングを登録する場合、各バインディングを手動で登録する代わりに、bindings プロパティと singletons プロパティを使うことができます。フレームワークがサービスプロバイダをロードすると、これらのプロパティを自動的にチェックしてバインディングを登録します。

bootメソッド

サービスプロバイダ内でビューコンポーザーを登録する場合は boot メソッドで行います。このメソッドは他のすべてのサービスプロバイダが登録された後に呼び出されます。つまり、フレームワークが登録した他のすべてのサービスにアクセスできます。
register メソッドと boot メソッドの役割を混同しないでください。register はバインディングの登録のみ、boot はサービスの初期化やその他のセットアップに使います。

bootメソッドの依存性注入

boot メソッドでも型ヒントを使って依存を注入できます。サービスコンテナが必要な依存を自動的に注入します。

サービスプロバイダの登録方法

すべてのサービスプロバイダは bootstrap/providers.php ファイルで登録します。このファイルはアプリケーションのサービスプロバイダのクラス名の配列を返します。
Laravel 13では、config/app.phpproviders 配列ではなく、bootstrap/providers.php でサービスプロバイダを登録します。make:provider コマンドを使うと自動的に追加されます。
make:provider Artisanコマンドを実行すると、Laravelは自動的にファイルへプロバイダを追加します。手動でプロバイダクラスを作成した場合は、手動でクラスを配列に追加してください。

カスタムサービスプロバイダの作成

実際にカスタムサービスプロバイダを作成してみましょう。
1

プロバイダを生成する

Artisanコマンドでサービスプロバイダを生成します。
2

registerメソッドでバインドする

生成されたプロバイダの register メソッドにバインディングを記述します。
3

bootstrap/providers.phpに登録する

make:provider を使った場合は自動登録されます。手動の場合は追加してください。

遅延プロバイダ(Deferred Providers)

プロバイダがサービスコンテナへのバインディングのみを登録している場合、登録されたバインディングが実際に必要になるまでその登録を遅延させることができます。このような遅延プロバイダのロードを遅らせることで、すべてのリクエストでファイルシステムからロードされなくなり、アプリケーションのパフォーマンスが向上します。 遅延プロバイダを作成するには、\Illuminate\Contracts\Support\DeferrableProvider インターフェースを実装し、provides メソッドを定義します。provides メソッドはプロバイダが登録するサービスコンテナのバインディングを返します。
遅延プロバイダは、アプリケーション全体ではなく特定の機能でのみ使うサービスに適しています。不必要なサービスのロードを避けることでパフォーマンスを最適化できます。

次のステップ

サービスコンテナ

サービスコンテナの仕組みとバインディングの詳細を確認します。
最終更新日 2026年4月6日