Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

何の話をするの? • フレームワークの使い方の話ではありま せん • この先もプログラマー/エンジニアとし て生き残っていくための話です • PHP + Symfonyは、他の言語・フレーム ワークと堂々と渡り合えます 4 12೥6݄30೔౔༵೔

Slide 12

Slide 12 text

5 12೥6݄30೔౔༵೔

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

7 12೥6݄30೔౔༵೔

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

8 12೥6݄30೔౔༵೔

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

ドメイン • ドメイン=問題領域 • コアドメイン、サポートドメイン • ドメインをとらえる→関心事の分離 • ドメイン駆動設計(DDD) 11 ドメインモデルを実装するドメインレイ ヤーと、アプリケーションのレイヤーと を明確に分離して扱う 12೥6݄30೔౔༵೔

Slide 42

Slide 42 text

12 12೥6݄30೔౔༵೔

Slide 43

Slide 43 text

12 12೥6݄30೔౔༵೔

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

13 12೥6݄30೔౔༵೔

Slide 46

Slide 46 text

13 12೥6݄30೔౔༵೔

Slide 47

Slide 47 text

13 12೥6݄30೔౔༵೔

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

良いフレームワーク 15 12೥6݄30೔౔༵೔

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

17 12೥6݄30೔౔༵೔

Slide 67

Slide 67 text

18 12೥6݄30೔౔༵೔

Slide 68

Slide 68 text

18 12೥6݄30೔౔༵೔

Slide 69

Slide 69 text

18 12೥6݄30೔౔༵೔

Slide 70

Slide 70 text

18 12೥6݄30೔౔༵೔

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

23 Symfony 12೥6݄30೔౔༵೔

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

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

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ • DependencyInjectionコンポーネント • DSLシステム • Configコンポーネント この組み合わせを基盤として いるため非常に柔軟で強力 12೥6݄30೔౔༵೔

Slide 95

Slide 95 text

まとめ 24 12೥6݄30೔౔༵೔

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

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

Slide 98

Slide 98 text

まとめ • 良いソフトウェアを開発するためには、 先人の知見を学び利用・適用することが 必要 • ドメインレイヤーを大切にするフレーム ワークが必要 • Symfonyはドメインレイヤーを意識して開 発され、上記要件を十分に満たす 24 12೥6݄30೔౔༵೔

Slide 99

Slide 99 text

まとめ(2) 25 12೥6݄30೔౔༵೔

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

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

Slide 103

Slide 103 text

ドメイン駆動設計 27 • エリック・エヴァン スのドメイン駆動設 計 • 基本的な考え方・取 り組み方から、実践 に適用可能なパター ンまで幅広く解説 12೥6݄30೔౔༵೔

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

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

Slide 106

Slide 106 text

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