Laravel のサービスコンテナが提供している主な価値はどれですか。
コンストラクタに型を書くだけで、その型のインスタンスが自動で渡ってきます。インターフェースに実装を bind しておけば、呼び出し側を変えずに差し替えられ、テストでモックにできます。
面接官が見ているのは「勝手に動いている仕組み」を説明できるか。
よくある答えと、面談でどう見られるか
- 依存を自動で解決して注入し、インターフェースに対する実装を差し替え可能にする
その通りです。テストでモックに差し替えられるのが、実務上いちばん効きます。 - DB 接続をプールして高速化する
接続管理とは別の仕組みです。 - クラスを自動でキャッシュして起動を速くする
起動最適化は別の話(オートローダ最適化など)です。 - クラスのインスタンスを自動生成してくれるので、new を書かなくて済む
現象としては合っていますが、それは手段です。価値は「差し替えられること」です。
面接官は何を見ているか
- コンストラクタインジェクションが自動で解決されることに触れた
- ServiceProvider で bind した経験、または役割を説明できた
- 何が嬉しいのか(差し替え可能性 / テスト)を言えた
模範解答
コントローラのコンストラクタに型を書いておくと、コンテナがその型のインスタンスを自動で作って渡してくれます。インターフェースに対して実装を bind しておけば、呼び出し側を変えずに実装を差し替えられる。テストでモックに差し替えられるのが実務上いちばん効きます。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
観点をすべて押さえられた場合
bind と singleton の違いは何ですか。singleton にして困る場面はありますか。一部しか触れられなかった場合
コントローラのコンストラクタに型を書くだけでインスタンスが渡ってくるのは、なぜですか。