サービスコンテナとサービスプロバイダーの要点

サービスコンテナとサービスプロバイダーの要点についてまとめてます。バインド、解決、依存注入(DI)など理解が難しいかもしれませんが、Laravelの根幹を成す機能なので、動作確認などしながら理解するのをおすすめします。

サービスコンテナ

クラス(サービス)のインスタンス化を管理します。

Illuminate\Container\Containerクラス を継承した
Illuminate\Foundation\Applicationクラス によって実装されています。

インジェクトするクラスを簡単に変更できるので、テストでモックに差し替えたいときなどに便利です。

バインド

サービスコンテナへインスタンス生成方法を結びつけることをバインドと言います。
下記メソッドでバインドできます。

メソッド 概要
bind newで新しくインスタンスを作成して結合
instance すでに存在するインスタンスを結合
singleton 同じインスタンスを返すように結合

以下ケースで活躍します。

  • インターフェースと具象クラスを紐付けたいとき
  • 実行プロセス上で1つのインスタンスを使いまわしたい(singleton)とき

インターフェースに複数の具象クラスが紐づく時、Aクラスのときには、具象クラスAを利用、Bクラスのときには、具象クラスBを利用といった使い方もできます。

インターフェースに依存してないクラスは、リフレクションで解決するのでバインドの必要はありません。

解決

  • サービスコンテナに要求して、インスタンスを取得することを解決と言います。
  • 「Applicationクラスのmakeメソッド」 「resolveヘルパー」などで解決できます。
  • 解決するクラスで、コンストラクタの引数を必要としている場合、ApplicationクラスのmakeWithメソッドを利用できます(5.4~)。
    • ただし、モックには差し替えられません。

依存注入(DI)による解決

コントローラ、イベントリスナ、キュージョブ、ミドルウェアなどについては、タイプヒントで指定すると、サービスコンテナが自動的に解決してくれます。

「コンストラクションインジェクション」と「メソッドインジェクション」が可能です。

  • コンストラクションインジェクション
    • コンストラクタの引数でタイプヒント
  • メソッドインジェクション
    • メソッドの引数でタイプヒント

タイプヒントには、インターフェイスと具象クラスを指定できます。
インターフェイスを指定した場合、コンテナに具象クラスを結合する必要があります。

参考

詳しくは、下記サイトで確認できます。
http://readouble.com/laravel/5.5/ja/container.html

サービスプロバイダー

要点

サービスプロバイダーの要点は以下の通りです。

  • config/app.phpproviders配列にサービスプロバイダーを設定する。
  • サービスプロバイダーは、初期起動時にロードされる。
    • まず全プロバイダーのregisterメソッドが呼び出される。
    • 次に全プロバイダーのbootメソッドが呼び出される。
  • registerメソッドでサービスコンテナにバインドする。
  • $deferプロパティをtrueにすると、遅延登録ができる。

参考

詳しくは、下記サイトで確認できます。
http://readouble.com/laravel/5.5/ja/providers.html

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。