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

CakePHPで学ぶDIコンテナ / Learn a DI Container through...

itosho
December 12, 2020

CakePHPで学ぶDIコンテナ / Learn a DI Container through CakePHP

PHPカンファレンス2020の登壇資料です。

itosho

December 12, 2020
Tweet

More Decks by itosho

Other Decks in Programming

Transcript

  1. 自己紹介 ・伊藤 翔 @itoho  ・コネヒト株式会社 執行役員兼CTO ・Backend Engineer / CakePHP

    Contributor  ・エンジニアキャリア(12年): 金融系SIer->Web系受託->CGMサービス->コネヒト(コミュニティサービス)  ・FW遍歴: 独自のFW->Ruby on Rails->CakePHP->echo ・バイアスがあると思うので、切り口の一つとして聞いてください  ・議論のきっかけになればいいなと思っています!
  2. 用語の整理 ・サービス: 特定の機能を提供するオブジェクト / 使われる(依存される)側  ・例: AWS SESを使ったメール送信機能を持つクラス、SendGridを使ったメール送信機能を持つクラスなど ・クライアント: サービスを利用するオブジェクト

    / 使う(依存する)側  ・例: 上述のメール送信機能を利用するコントローラークラスなど ※以降のスライドで登場するサンプルコードの置き場所: https://github.com/itosho/x-cakephp-di-container (スライド内では重要な部分のみを抜粋しています)
  3. 改めて、CakePHPの特徴 ・RailsライクなシンプルなMVCフレームワーク ・CoC(設定より規約)を重視  ・Pros: チーム開発において「縛り」が効果的、どの案件でも似た構成でスキルのポータビリティ性が高い  ・Cons: 「Cake Way」を学ぶイニシャルコスト、「Cake Way」をはみ出すと途端に苦しくなる ・「90%の解を目指す」(UNIXの哲学)

     ・密結合で速く走るためのフレームワーク  ・Laravelのような自由度や柔軟性はない≒Fatなビジネス要件に対処することが相対的に難しい  ・しかし、(いわゆるWeb系の世界では)シンプルなMVCの構成で十分なことが多い
  4. 改めて、CakePHPの特徴 ・RailsライクなシンプルなMVCフレームワーク ・CoC(設定より規約)を重視  ・Pros: チーム開発において「縛り」が効果的、どの案件でも似た構成でスキルのポータビリティ性が高い  ・Cons: 「Cake Way」を学ぶイニシャルコスト、「Cake Way」をはみ出すと途端に苦しくなる ・「90%の解を目指す」(UNIXの哲学)

     ・密結合で速く走るためのフレームワーク  ・Laravelのような自由度や柔軟性はない≒Fatなビジネス要件に対処することが相対的に難しい  ・しかし、(いわゆるWeb系の世界では)シンプルなMVCの構成で十分なことが多い 本当にそうなのか?
  5. CakePHPの歴史と周辺技術の変遷 CakePHP 1.x~ CakePHP 2.x CakePHP 3.x~ CakePHP 4.x~ 2011

    2006 2015 2019 PHP 7.x~ PHP 8.x~ PHP 5.3.x~ PHP ~5.3.x Web 2.0 PHP ~5.0 2004 Microservices Ajax Laravel Hack BFF GraphQL スマートフォンアプリ jQuery アフターデジタル X-Tech Composer SoR / SoE C10K PHP-FIG HTML5 Zend Framework Xdebug 2.0 PSR-0 PSR-1, 2 PSR-7 PSR-11 PSR-15 React REST ※時系列は正確ではありません(あくまで流れを掴む程度にご利用ください) ※当然ながら、全てを網羅しているわけでもありません(例: クラウド、IoTなど) Serverless
  6. 参考資料1/2 【DI / DIコンテナの理解を深めるために参考にさせていただいたみなさん】 ・Inversion of ControlコンテナとDependency Injectionパターン: https://kakutani.com/trans/fowler/injection.html ・Google/Guice(DIコンテナ)のモチベーション:

    https://github.com/google/guice/wiki/Motivation ・History of Dependency Injection (DI): https://yauritux.wordpress.com/2011/04/03/history-of-dependency-injection-di/ ・何故DIコンテナが必要なのか: https://qiita.com/kabosu3d/items/200d14c68b8c0e5b2092 ・IoCとService LocatorとDIの関係: https://yotiky.hatenablog.com/entry/2018/09/28/IoCとService_LocatorとDIの関係 ・やはりあなた方のDependency Injectionはまちがっている。  http://blog.a-way-out.net/blog/2015/08/31/your-dependency-injection-is-wrong-as-I-expected/ 【アーキテクチャの変遷の理解を深めるために参考にさせていただいたみなさん】 ・Smart UI パターンが再評価される世界: https://onk.hatenablog.jp/entry/2020/11/11/024531 ・JetBrainsのPHP25周年インフォグラフィック: https://www.jetbrains.com/ja-jp/lp/php-25/