Laravelの心臓部!丸わかりサービスプロバイダ入門

サービスプロバイダとは

サービスプロバイダは難しい概念ではありますが、

Laravel自体を理解する上で重要な概念です。

サービスコンテナに理解できてない場合は,

まずはこちらで理解をしてから本記事にお戻りください。

サービスプロバイダの説明ですが、まずはlaravel公式から引用します。

Service providers are the central place of all Laravel application bootstrapping. Your own application, as well as all of Laravel's core services are bootstrapped via service providers.

訳:
サービスプロバイダーとは,laravel アプリーケションを”準備する”ための中心部になります。laravelのコアの部分はもちろんのこと、あなた自身のアプリにおいてもサービスプロバイダにおいて”自動でその準備”がされます。

なかなか難しい表現ではありますが、

一言でいうと

Laravelの根幹を担う処理をまとめたコードの倉庫のような場所です。

その役割とは

ここでいう準備(bootstrap)とは、必要な事柄をアプリケーションで使えるように自動で登録するということになります。

具体的には、下記のような役割の登録を行なっていきます。

  • サービスコンテナの結合を行う
  • それ以外のイベントリスナーやミドルウェア、ルーティングの登録や外部のライブラリやコンポーネントを読み込み

ローディングについて

サービスプロバイダのロードは、
ユーザー自身が書いたビジネスロジックをロードする前の
一番最初のロード段階で読み込み処理が行われます。

そのタイミングはすぐロードされるものと
遅延ロードされる2種類にわけて処理することができます。

Laravelの根幹の処理をロードするため全ての処理を一度にロードしてしまったら、実行が遅くなってしまいます。
このように遅延でローディングするのは合理的であると言えます。

方法としては、遅延ロードしたいプロバイダークラスにprotected $defer = true;を入れるだけと簡単ですね!

サービスプロバイダーの作成の仕方

上述した通り、役割は色々とあるのですが、
ここではサービスコンテナの作成について記載していきます。

(1),サービスコンテナの作成

作成場所はどこでも構いませんが、
一般的にはappServices配下に作成することが多いため、
ここにDogClassを作成してください。

<?php
namespace App\Providers;
 
class Dog
{
 
  public static function bow()
  {
    return 'わんわん';
  }
 
}

(2),サービスプロバイダの作成

下記コマンドでサービスプロバイダは作成できます。

php artisan make:provider DogServiceProvider

app/Providers/DogServiceProvider.php にファイルが作成されていますので、いじっていきましょう。

RegisterメソッドとBootメソッド

Registerメソッドにはサービスコンテナの結合処理だけを行います。

これ以外の処理は絶対に書かないようにしてください。

今回は、サービスコンテナの処理になりますので、

registerメソッドの中に下記を記載してください。

$this->app()->bind(‘dog’,’app\Services\Dog’);

$this->app()はサービスコンテナを指しています。

*bootメソッドは、イベントリスナーやサービスプロバイダを登録してください。

このメソッドは他の全サービスプロバイダが登録し終えてから呼び出されます。

そのため、この段階で結合が完了している全てのサービスに
アクセスできることを意味します。

(3),サービスプロバイダの登録

登録はconfig/app.phpファイルにて設定ができます。

このファイルのproviders配列に自身が登録したいプロバイダを登録してください。

'providers' => [
    App\Providers\DogServiceProvider::class,
]

まとめ

サービスプロバイダって難しいですよね・・

今回の記事で理解ができましたら、ぜひご自身でも使用してみてください。
最初のうちは必要性がわからないですが、自身で拡張して行く際には必要になってきます。

コメントを残す