Symfony勉強会#6 一歩先ゆくエンジニアから見たSymfony

Symfony勉強会#6 一歩先ゆくエンジニアから見たSymfony

2012/6/30 Symfony勉強会 #6 一歩先ゆくエンジニアから見たSymfonyのセッションで使用したスライド。先人たちの知見、ドメインモデル等について。

Ba8ecb9f1d269e44056ff4e7dca4c5e0?s=128

hidenorigoto

June 30, 2012
Tweet

Transcript

  1. 一歩先ゆくエンジニ アから見たSymfony PHPメンターズ/日本Symfonyユーザー会 後藤 秀宣 @hidenorigoto 1 Symfony勉強会 #6 12೥6݄30೔౔༵೔

  2. 後藤秀宣(ごとうひでのり) PHPメンターズ 2 12೥6݄30೔౔༵೔

  3. 後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 2 12೥6݄30೔౔༵೔

  4. 後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 • Symfony Midnight 2 12೥6݄30೔౔༵೔

  5. 後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 • Symfony Midnight • 翻訳温泉ツアー 2

    12೥6݄30೔౔༵೔
  6. 後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 • Symfony Midnight • 翻訳温泉ツアー •

    WEB+DB PRESS 2 12೥6݄30೔౔༵೔
  7. 3 WEB+DB PRESS vol. 69 12೥6݄30೔౔༵೔

  8. 何の話をするの? 4 12೥6݄30೔౔༵೔

  9. 何の話をするの? • フレームワークの使い方の話ではありま せん 4 12೥6݄30೔౔༵೔

  10. 何の話をするの? • フレームワークの使い方の話ではありま せん • この先もプログラマー/エンジニアとし て生き残っていくための話です 4 12೥6݄30೔౔༵೔

  11. 何の話をするの? • フレームワークの使い方の話ではありま せん • この先もプログラマー/エンジニアとし て生き残っていくための話です • PHP +

    Symfonyは、他の言語・フレーム ワークと堂々と渡り合えます 4 12೥6݄30೔౔༵೔
  12. 5 12೥6݄30೔౔༵೔

  13. 5 զʑͷؒʹ͸ɺνʔϜϓϨʔͳͲͱ ͍͏౎߹ͷΑ͍ݴ͍༁͸ଘࡏͤΜɻ ༗Δͱ͢Ε͹ελϯυϓϨʔ͔Βੜ ͡ΔɺνʔϜϫʔΫ͚ͩͩɻ 12೥6݄30೔౔༵೔

  14. 5 զʑͷؒʹ͸ɺνʔϜϓϨʔͳͲͱ ͍͏౎߹ͷΑ͍ݴ͍༁͸ଘࡏͤΜɻ ༗Δͱ͢Ε͹ελϯυϓϨʔ͔Βੜ ͡ΔɺνʔϜϫʔΫ͚ͩͩɻ ߥרେีެ҆̕՝՝௕ 12೥6݄30೔౔༵೔

  15. 問 なぜSymfonyが 良いと言えるのか? 6 12೥6݄30೔౔༵೔

  16. 7 12೥6݄30೔౔༵೔

  17. 7 •速い?軽い? 12೥6݄30೔౔༵೔

  18. 7 •速い?軽い? •簡単? 12೥6݄30೔౔༵೔

  19. 7 •速い?軽い? •簡単? •自由? 12೥6݄30೔౔༵೔

  20. 7 •速い?軽い? •簡単? •自由? 12೥6݄30೔౔༵೔

  21. 8 12೥6݄30೔౔༵೔

  22. 8 ソフトウェア開発の歴 史の中で培われてきた 汎用的な知見を適用可 能か? 12೥6݄30೔౔༵೔

  23. 8 ソフトウェア開発の歴 史の中で培われてきた 汎用的な知見を適用可 能か? 自分の取り組んでいる問題領域へ 12೥6݄30೔౔༵೔

  24. 9 汎用的な知見 12೥6݄30೔౔༵೔

  25. 9 • クラス設計パターン 汎用的な知見 12೥6݄30೔౔༵೔

  26. 9 • クラス設計パターン • 設計・開発手法、プロセス 汎用的な知見 12೥6݄30೔౔༵೔

  27. 9 • クラス設計パターン • 設計・開発手法、プロセス • テスト手法 汎用的な知見 12೥6݄30೔౔༵೔

  28. 9 • クラス設計パターン • 設計・開発手法、プロセス • テスト手法 汎用的な知見 巨人の肩の上に立つ 12೥6݄30೔౔༵೔

  29. 10 汎用的な知見の適用に必要な技術要素 12೥6݄30೔౔༵೔

  30. 10 • オブジェクト指向 汎用的な知見の適用に必要な技術要素 12೥6݄30೔౔༵೔

  31. 10 • オブジェクト指向 • レイヤードアーキテクチャ 汎用的な知見の適用に必要な技術要素 12೥6݄30೔౔༵೔

  32. 10 • オブジェクト指向 • レイヤードアーキテクチャ • ドメインレイヤー 汎用的な知見の適用に必要な技術要素 12೥6݄30೔౔༵೔

  33. 10 • オブジェクト指向 • レイヤードアーキテクチャ • ドメインレイヤー 汎用的な知見の適用に必要な技術要素 12೥6݄30೔౔༵೔

  34. 10 • オブジェクト指向 • レイヤードアーキテクチャ • ドメインレイヤー 汎用的な知見の適用に必要な技術要素 12೥6݄30೔౔༵೔

  35. 10 • オブジェクト指向 • レイヤードアーキテクチャ • ドメインレイヤー 汎用的な知見の適用に必要な技術要素 ??? 12೥6݄30೔౔༵೔

  36. ドメイン 11 12೥6݄30೔౔༵೔

  37. ドメイン • ドメイン=問題領域 11 12೥6݄30೔౔༵೔

  38. ドメイン • ドメイン=問題領域 • コアドメイン、サポートドメイン 11 12೥6݄30೔౔༵೔

  39. ドメイン • ドメイン=問題領域 • コアドメイン、サポートドメイン • ドメインをとらえる→関心事の分離 11 12೥6݄30೔౔༵೔

  40. ドメイン • ドメイン=問題領域 • コアドメイン、サポートドメイン • ドメインをとらえる→関心事の分離 • ドメイン駆動設計(DDD) 11

    12೥6݄30೔౔༵೔
  41. ドメイン • ドメイン=問題領域 • コアドメイン、サポートドメイン • ドメインをとらえる→関心事の分離 • ドメイン駆動設計(DDD) 11

    ドメインモデルを実装するドメインレイ ヤーと、アプリケーションのレイヤーと を明確に分離して扱う 12೥6݄30೔౔༵೔
  42. 12 12೥6݄30೔౔༵೔

  43. 12 12೥6݄30೔౔༵೔

  44. 12 ࿦֎ 12೥6݄30೔౔༵೔

  45. 13 12೥6݄30೔౔༵೔

  46. 13 12೥6݄30೔౔༵೔

  47. 13 12೥6݄30೔౔༵೔

  48. 13 ドメインモデル? 12೥6݄30೔౔༵೔

  49. 14 問題点 12೥6݄30೔౔༵೔

  50. 14 問題点 • すべてが渾然一体、一枚岩 12೥6݄30೔౔༵೔

  51. 14 問題点 • すべてが渾然一体、一枚岩 • すべてがフレームワークに依存 12೥6݄30೔౔༵೔

  52. 14 問題点 • すべてが渾然一体、一枚岩 • すべてがフレームワークに依存 • モデル等もアプリケーションフレーム ワークのクラスを継承? 12೥6݄30೔౔༵೔

  53. 14 問題点 • すべてが渾然一体、一枚岩 • すべてがフレームワークに依存 • モデル等もアプリケーションフレーム ワークのクラスを継承? •

    フレームワーク ロックイン 12೥6݄30೔౔༵೔
  54. 14 問題点 • すべてが渾然一体、一枚岩 • すべてがフレームワークに依存 • モデル等もアプリケーションフレーム ワークのクラスを継承? •

    フレームワーク ロックイン • 自由と言えるのか? 12೥6݄30೔౔༵೔
  55. 良いフレームワーク 15 12೥6݄30೔౔༵೔

  56. 良いフレームワーク • ドメインレイヤーを重視する 15 12೥6݄30೔౔༵೔

  57. 良いフレームワーク • ドメインレイヤーを重視する • 自身がアプリケーションレイヤーのフ レームワークである、ということに自 覚的である 15 12೥6݄30೔౔༵೔

  58. 良いフレームワーク • ドメインレイヤーを重視する • 自身がアプリケーションレイヤーのフ レームワークである、ということに自 覚的である 15 Webアプリケーションフレームワーク 12೥6݄30೔౔༵೔

  59. 16 Symfonyを使った開発とは 12೥6݄30೔౔༵೔

  60. 16 Symfonyを使った開発とは • ドメインモデルを実装する 12೥6݄30೔౔༵೔

  61. 16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 12೥6݄30೔౔༵೔

  62. 16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 • Symfonyと関係がない部分 12೥6݄30೔౔༵೔

  63. 16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 • Symfonyと関係がない部分 • アプリケーションコードを実装する

    12೥6݄30೔౔༵೔
  64. 16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 • Symfonyと関係がない部分 • アプリケーションコードを実装する

    • Webアプリケーションドメイン 12೥6݄30೔౔༵೔
  65. 16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 • Symfonyと関係がない部分 • アプリケーションコードを実装する

    • Webアプリケーションドメイン • 他のアプリケーションドメイン(CLI) 12೥6݄30೔౔༵೔
  66. 17 12೥6݄30೔౔༵೔

  67. 18 12೥6݄30೔౔༵೔

  68. 18 12೥6݄30೔౔༵೔

  69. 18 12೥6݄30೔౔༵೔

  70. 18 12೥6݄30೔౔༵೔

  71. 18 開発者の 手で実装 12೥6݄30೔౔༵೔

  72. 18 開発者の 手で実装 オブジェクト指向設計 12೥6݄30೔౔༵೔

  73. 18 開発者の 手で実装 オブジェクト指向設計 ドメイン駆動設計 12೥6݄30೔౔༵೔

  74. 18 開発者の 手で実装 オブジェクト指向設計 DCIアーキテクチャ ドメイン駆動設計 12೥6݄30೔౔༵೔

  75. 18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 12೥6݄30೔౔༵೔

  76. 18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 12೥6݄30೔౔༵೔

  77. 18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 12೥6݄30೔౔༵೔

  78. 18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 12೥6݄30೔౔༵೔

  79. 18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 12೥6݄30೔౔༵೔

  80. 19 これが 本当の 自由だーー! 12೥6݄30೔౔༵೔

  81. 20 本当の自由とは 12೥6݄30೔౔༵೔

  82. 20 本当の自由とは • 過去から積み上げられてきたソフ トウェア開発に関する知見を、コ アとなる問題の解決に直接的に適 用できる自由 12೥6݄30೔౔༵೔

  83. 20 本当の自由とは • 過去から積み上げられてきたソフ トウェア開発に関する知見を、コ アとなる問題の解決に直接的に適 用できる自由 プロフェッショナルが、プロ フェッショナルの仕事をするため の自由!!

    12೥6݄30೔౔༵೔
  84. この意味で •Symfonyは自由な フレームワーク 21 12೥6݄30೔౔༵೔

  85. 22 で、Symfonyの部分は どうなのよ?? 12೥6݄30೔౔༵೔

  86. 23 Symfony 12೥6݄30೔౔༵೔

  87. 23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク 12೥6݄30೔౔༵೔

  88. 23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 12೥6݄30೔౔༵೔

  89. 23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ 12೥6݄30೔౔༵೔

  90. 23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •

    DependencyInjectionコンポーネント 12೥6݄30೔౔༵೔
  91. 23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •

    DependencyInjectionコンポーネント • DSLシステム 12೥6݄30೔౔༵೔
  92. 23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •

    DependencyInjectionコンポーネント • DSLシステム • Configコンポーネント 12೥6݄30೔౔༵೔
  93. 23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •

    DependencyInjectionコンポーネント • DSLシステム • Configコンポーネント 12೥6݄30೔౔༵೔
  94. 23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •

    DependencyInjectionコンポーネント • DSLシステム • Configコンポーネント この組み合わせを基盤として いるため非常に柔軟で強力 12೥6݄30೔౔༵೔
  95. まとめ 24 12೥6݄30೔౔༵೔

  96. まとめ • 良いソフトウェアを開発するためには、 先人の知見を学び利用・適用することが 必要 24 12೥6݄30೔౔༵೔

  97. まとめ • 良いソフトウェアを開発するためには、 先人の知見を学び利用・適用することが 必要 • ドメインレイヤーを大切にするフレーム ワークが必要 24 12೥6݄30೔౔༵೔

  98. まとめ • 良いソフトウェアを開発するためには、 先人の知見を学び利用・適用することが 必要 • ドメインレイヤーを大切にするフレーム ワークが必要 • Symfonyはドメインレイヤーを意識して開

    発され、上記要件を十分に満たす 24 12೥6݄30೔౔༵೔
  99. まとめ(2) 25 12೥6݄30೔౔༵೔

  100. まとめ(2) • このような視点にもとづいていれば、ア プリケーションフレームワークの流行 り?などに振り回されることはありませ ん 25 12೥6݄30೔౔༵೔

  101. まとめ(2) • このような視点にもとづいていれば、ア プリケーションフレームワークの流行 り?などに振り回されることはありませ ん • 芯のとおった技術と知識を身につけるこ とで、長く生き残れます 25

    12೥6݄30೔౔༵೔
  102. 26 ガイドとなる 技術・書籍 12೥6݄30೔౔༵೔

  103. ドメイン駆動設計 27 • エリック・エヴァン スのドメイン駆動設 計 • 基本的な考え方・取 り組み方から、実践 に適用可能なパター

    ンまで幅広く解説 12೥6݄30೔౔༵೔
  104. ドメイン工学、DSL • ジェネレーティブプ ログラミング(クシ シュトフ・チャル ネッキ/ウールリ シュ・W・アイセン アッカ) 28 12೥6݄30೔౔༵೔

  105. オブジェクト指向技術 • 後ほどのセッションにて紹介します 29 12೥6݄30೔౔༵೔

  106. 30 ありがとう ございました! 12೥6݄30೔౔༵೔