Container)を事前に理解しておく必要があります。サービスプロバイダーの説明の前に下記の文書を読んでいることをおすすめしています。サービスプロバーダーへのコード記述サービスプロバイダーとはサービスプロバイダーの役目はサービスコンテナへのサービスの登録です。Laravelではサービスコンテナに登録されているサービスを利用してアプリケーションの開発を行なっていきます。サービスコンテナはサービスを入れる入れ物の役割をもっており、サービスを利用するためには、サービスコンテナに事前にサービスを登録しておく必要があります。そのサービスを登録する役目をもつものがサービスプロバイダーです。Laravelのサービスとはメール送信、暗号化やファイル操作といったLaravelアプリケーションで利用する機能です。サービスプロバイダーを理解サービスプロバイダーを登録する場所と登録したサービスの利用方法の確認、最後に自分でサービスプロバイダーを作成するを通してサービスプロバーダーの理解を深めていきます。サービスプロバイダーの登録場所サービスプロバイダーを使ったサービスの登録はどこで行われているのか確認していきましょう。ブラウザからアクセスがあるとpubicフォルダのindex.phpが実行され、bootstrapフォルダのapp.phpが読み込まれます。__DIR__.'/../bootstrap/app.php';bootstrapフォルダのapp.phpからLaravelのコアであるApplicationクラスがインスタンス化されています。dirname(__DIR__));このIlluminate\Foundation\Application.phpの中身を見るとregisterConfirureProvidersメソッドで、サービプロバイダーを登録している箇所があります。サービプロバイダーはconfig[‘app.providers’]を使って読み込まれています。});configフォルダのapp.phpを開いて、providersを確認するとサービスプロバイダーの一覧を確認することができます。Illuminate\Filesystem\FilesystemServiceProvider::class,サービスプロバイダーの中身を確認Laravelのサービスは、config/app.phpファイルに記述されているサービスプロバイダーから登録されます。サービスプロバイダーに関する情報がconfig/app.phpにあることがわかったので、記述されているサービスプロバイダーの個別の中身を確認します。コードがわかりやすいEncryptionServiceProviderとFilesystemServiceProviderを使ってサービスプロバイダーの処理内容を確認するのがおすすめです。ここではEncryptionServiceProvider.phpを使います。Encryptionは暗号化という意味を持ち、Encryptionは暗号化を行う際に利用するサービスです。FilesystemServiceProviderはファイルシステムのファイルを操作する際に利用するサービスです。EncryptionServiceProvider.phpを開くとregisterメソッドの中でsingletonメソッドを使ってサービスコンテナへの登録を行なっています。singletonメソッドは一度インスタンスを作成すると何度singletonメソッドを実行しても同じインスタンスを利用します。});}上記はsingletonメソッドを使ってencrypterという名前でサービスコンテナへの登録を行なっています。Encrypterクラスをインスタンス化するためには、configファイルからキーを取得する必要があるためキーに関する処理が行われています。サービスコンテナへはencrypterという名前で登録されているため、このサービスを使いたいときはencrypterを下記のように記述することで使用することが可能になります。動作確認のためにweb.phpに下記のコードを記述します。する前のpasswordが表示dd($encrypt->decrypt($password));(1)によって、サービスコンテナに登録されたEncryptionサービスを利用します。Encrypterクラスはencryptメソッドによって文字列を暗号化することが可能なので、(2)で暗号化を行なっています。Encrypterクラスは暗号化した文字列を復号化するメソッドも持っており、(3)のdecryptメソッドで復号化しています。サービスプロバイダーを使って、サービスコンテナの登録を行わなければ、Encryptionを使うためには毎回以下のようなコードが必要となります。$config['cipher']);しかし、サービスプロバイダーで登録されれば、一行で終わらせることが可能です。app()->make('encrypter');サービスプロバイダーを作成するサービスプロバイダーの登録する場所と登録方法がわかったので自分のオリジナルのサービスプロバイダーを作って登録を行ってみましょう。make:providerで作成することができます。successfully.実行するとapp\Providersの下にOwnServiceProvider.phpファイルが作成されます。OwnServiceProvider.phpの中には、regiterメソッドとbootメソッドが記述されいます。}}registerメソッドはサービスコンテナにサービスを登録するコードを記述します。bootメソッドは、すべてのサービスプロバイダーが読み込まれたあとに実行したいコードを記述します。bindメソッドでサービス登録と実行サービスプロバイダーをつかってサービスの登録を行う前にサービスコンテナへの登録方法を確認しておきます。下記のbindメソッドを使用することでサービスコンテナへの登録が行えます。先程のEncrypterではsingletonメソッドを用いていましたが、今回はbindメソッドを使います。bindを使った場合はクラスをインスタンスする度に毎回異なるインスタンスを作成します。app()->bind()メソッドはweb.phpに記述しています。app()はヘルパー関数のため、コントローラーなどどこに記述しても実行することができます。Doe';});登録したmyNameというサービスを利用したい場合は、makeメソッドを使います。Doeが表示されます。先程作成したbindメソッドをOwnServiceProvider.phpのregisterメソッドの中に記述します。}bindメソッドの記述方法は別のServiceProvicerと同様に下記でも行うことができます。これだけではサービスコンテナへの登録は行われないので、config/app.phpへの追加も忘れないで行う必要があります。app.phpを開いてOwnServiceProviderを追加します。Doeが表示されればサービスプロバイダーを使ったサービスコンテナへのサービス登録は成功しています。app()->make('myName');dd($name);この文章を読む前まではサービスプロバイダーはわからなかった人もサービスプロバイダーの追加がこんなにも簡単だと驚いたのではないでしょうか。ここまで理解できればLaravelのコア部分であるサービスコンテナとサービスプロバイダーへの不安が解消されたと思います。サービスプロバーダーへのコード。