DIコンテナとAutowireの「魔法」を実装して理解する by 荒巻拓哉

PHPerKaigi 2026
採択
2026/03/22 14:25〜
Track B
レギュラートーク(20分)

DIコンテナとAutowireの「魔法」を実装して理解する

takaram71 荒巻拓哉 takaram71
9

DIコンテナは、Dependency Injection(依存の注入)を利用してクラス間の依存関係の解決を行ってくれます。
具体的には、オブジェクト生成時やメソッド呼び出し時に渡す引数を自動的に生成してくれるなどの機能を有します。
LaravelやSymfonyなど、最近のWebアプリケーションフレームワークの多くにもこの機能が組み込まれているので、普段使っているという人も多いのではないでしょうか。

Autowire機能を持つDIコンテナの場合、コンストラクタやメソッドに型宣言を書いてさえおけば、引数を増やしたり入れ替えたりしても柔軟に動作してくれます。
『これはまるで「魔法」だ』とDIコンテナを知った当時に感じたのを覚えています。

とはいえ、DIコンテナもただのプログラムです。実際には魔法などではなく、PHPのコードとして実装されているのです。

このセッションでは、Autowire機能がどのように実装されているのかを紐解きます。その上で、Autowireによるコンストラクタインジェクション機能を持つDIコンテナを実装してみます。
DIコンテナの裏側を理解し、普段ブラックボックスになっているフレームワークの動作の一端を覗いてみましょう。

話すこと

  • DIコンテナのAutowire機能の実装に必要な技術
  • Autowire機能を持つシンプルなDIコンテナの実装方法

話さないこと

  • DIを用いたソフトウェア設計について(依存関係逆転の原則など)
  • 特定のDIコンテナライブラリの詳細な使い方