Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「DI」と仲良くなる

 「DI」と仲良くなる

PHP カンファレンス北海道 2024 登壇資料 #phpcondo

Masaru Yamagishi

January 13, 2024
Tweet

More Decks by Masaru Yamagishi

Other Decks in Technology

Transcript

  1. 「DI」と仲良くなる
    PHPカンファレンス北海道2024 - やまゆ

    View full-size slide

  2. セッション概要
    こんにちは。やまゆです。
    みなさん、 new してますか?私は、最近はあまりしていないです。なぜなら、インスタンス化はほとんど DI コン
    テナ に任せてしまうからです。お客様のプロダクトにも DI コンテナが含まれているのではないでしょうか?活用
    出来ていますでしょうか?
    Dependency Inversion 、つまり 「依存性の逆転」 をすることで、より疎結合で柔軟性の高い設計を行うことが出
    来ます。
    それを実現する Dependency Injection 、つまり 「依存関係の注入」 をするのが DI コンテナ です。
    今回は以下の内容を話してみたいと思っています。
    - Dependency Inversion と Dependency Injection
    - DI コンテナ
    - DI コンテナを自作してみよう

    View full-size slide

  3. 赤魔道士系エンジニア
    ㈱インフィニットループ at 札幌/仙台 

    やまゆ
    この画像は自撮りでも
    いつも使っているアイコンでも構いません

    View full-size slide

  4. DI
    しってるひとー!

    View full-size slide

  5. DI
    使ってるひとー!

    View full-size slide

  6. Dependency Inversion
    Dependency Injection

    View full-size slide

  7. Dependency Inversion
    Dependency Injection
    依存性の逆転
    依存性の注入

    View full-size slide

  8. Dependency Inversion
    Dependency Injection
    依存性の逆転
    依存性の注入
    別物!!!

    View full-size slide

  9. Dependency Inversion
    Dependency Injection
    依存性の逆転
    依存性の注入
    ☝の方が大

    View full-size slide

  10. DI
    と聞くと...

    View full-size slide

  11. どっからきてんねん

    View full-size slide

  12. オワコンです

    View full-size slide

  13. こんなもんは
    DI の本質
    とちゃうねん

    View full-size slide

  14. Dependency
    Inversion
    依存性の逆転

    View full-size slide

  15. これは設計の
    おはなし

    View full-size slide

  16. DI は設計の話で出てくる仕組みの一つ
    - Controller に全部書いてあるコードでは不要!
    - 規模が大きい、複数人で開発している、アーキテクチャ云々の時に出る
    - 規模が大きい=依存関係が複雑になってくる
    - 依存関係を綺麗に保つことがメンテナンス性の向上につながる!

    View full-size slide

  17. Dependency
    Inversion

    依存性の逆転

    View full-size slide

  18. 依存性?

    View full-size slide

  19. 依存性?
    壱百満天原サロメ
    👈金属性

    View full-size slide

  20. 依存性?
    壱百満天原サロメ
    👈金属性
    「壱百満天原サロメと
    いうカードは、金属性と
    いう属性に依存してい
    る」

    View full-size slide

  21. 依存性?
    壱百満天原サロメ
    👈金属性
    「金属性は、壱百満天
    原サロメというカードに
    依存している」
    「壱百満天原サロメと
    いうカードは、金属性と
    いう属性に依存してい
    る」

    View full-size slide

  22. 依存性?
    壱百満天原サロメ
    👈金属性
    「壱百満天原サロメと
    いうカードは、金属性と
    いう属性に依存してい
    る」
    「金属性は、壱百満天
    原サロメというカードに
    依存している」

    View full-size slide

  23. 壱百満天原サロメ

    View full-size slide

  24. 👈パッケージ

    View full-size slide

  25. Dependency
    Inversion

    依存性の逆転

    View full-size slide

  26. 逆転すべき!

    View full-size slide

  27. 何故依存性の逆転が必要なのか?
    - パッケージの「凝集度」と「結合度」の関係
    - 各パッケージが持つ 「知識」を分離して、凝集度を高める
    - パッケージ間の「結合度」を下げて、メンテナンスを容易にする
    - OOP の詳しいお話は割愛
    - より簡便に記すと☟
    - 「Aさんが知っていることを減らし、Bさんとは決まったルートでだけ会話する」

    View full-size slide

  28. Card パッケージが DB と
    かどうとか関係ないやん

    View full-size slide

  29. Card パッケージは永続化さえさ
    れれば良くて、
    MySQL とか Redis とか
    そういうのはどうでも良い!

    View full-size slide

  30. Dependency
    Inversion

    依存性の逆転

    View full-size slide

  31. 矢印が反転している!

    View full-size slide

  32. Dependency
    Inversion
    依存性の逆転

    View full-size slide

  33. Dependency Inversion まとめ
    - 規模の大きいプロダクトはパッケージングを行う(≒設計)
    - パッケージ間の依存関係が生まれる
    - 知らなくても良いパッケージに依存するとメンテが大変
    - 良いとされる設計≒パッケージの依存関係が適切な設計
    - 依存関係が適切であれば、パッケージごとに分離して開発可能(理想論)

    View full-size slide

  34. 誰が繋げるの?

    View full-size slide

  35. Dependency
    Injection
    依存性の注入

    View full-size slide

  36. Dependency
    Injection
    依存性の注入

    View full-size slide

  37. 注入?
    - インスタンスを作って流し込む
    - 作り方を知っている神クラス(DI Container)が構築する

    View full-size slide

  38. Dependency Injection

    Dependency Inversion
    を実現するキー

    View full-size slide

  39. DI(Inversion と Injection)
    すこし
    わかってもらえれば
    うれしいです!

    View full-size slide

  40. https://www.infiniteloop.co.jp
    We are hiring!

    View full-size slide