Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Symfony勉強会#6 一歩先ゆくエンジニアから見たSymfony
Search
hidenorigoto
June 30, 2012
Programming
1
2k
Symfony勉強会#6 一歩先ゆくエンジニアから見たSymfony
2012/6/30 Symfony勉強会 #6 一歩先ゆくエンジニアから見たSymfonyのセッションで使用したスライド。先人たちの知見、ドメインモデル等について。
hidenorigoto
June 30, 2012
Tweet
Share
More Decks by hidenorigoto
See All by hidenorigoto
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
340
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
7.6k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
230
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
3.6k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.1k
抽象化って何? (What is abstraction?)
hidenorigoto
11
5.3k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
5.4k
SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則編(拡大版)〜
hidenorigoto
6
4.7k
SOLIDの原則ってどんなふうに使うの?
hidenorigoto
50
28k
Other Decks in Programming
See All in Programming
WebGLで始める コンピュータグラフィックス入門
heller77
0
290
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
1k
"config" ってなんだ? / What is "config"?
okashoi
0
330
dbtのドメイン分割による データ基盤の改善とDigdagとの連携
sakama
0
450
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
10
1.5k
Ruby Pattern Matching
bkuhlmann
0
930
Polars入門
daikikatsuragawa
1
180
Native Federation: The Future of Micro Frontends in Angular
manfredsteyer
PRO
0
100
TCAとKMPを用いた新規動画配信アプリ 「ABEMA Live」の設計
tomu28
2
130
パフォーマンスを求めてDBに機能を寄せる戦略
aoyagikouhei
0
110
大規模UIKitベースアプリへのTCAの段階的導入/gradual-adoption-of-tca-in-a-large-scale-uikit-based-app
takehilo
2
210
Three ways to use AI on Android: The Good, the Bad and the Ugly
marxallski
0
110
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
515
39k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
275
13k
Web development in the modern age
philhawksworth
203
10k
Debugging Ruby Performance
tmm1
70
11k
Infographics Made Easy
chrislema
238
18k
Rails Girls Zürich Keynote
gr2m
91
13k
The Mythical Team-Month
searls
217
42k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Git: the NoSQL Database
bkeepers
PRO
423
63k
Fantastic passwords and where to find them - at NoRuKo
philnash
39
2.5k
Transcript
一歩先ゆくエンジニ アから見たSymfony PHPメンターズ/日本Symfonyユーザー会 後藤 秀宣 @hidenorigoto 1 Symfony勉強会 #6 126݄30༵
後藤秀宣(ごとうひでのり) PHPメンターズ 2 126݄30༵
後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 2 126݄30༵
後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 • Symfony Midnight 2 126݄30༵
後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 • Symfony Midnight • 翻訳温泉ツアー 2
126݄30༵
後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 • Symfony Midnight • 翻訳温泉ツアー •
WEB+DB PRESS 2 126݄30༵
3 WEB+DB PRESS vol. 69 126݄30༵
何の話をするの? 4 126݄30༵
何の話をするの? • フレームワークの使い方の話ではありま せん 4 126݄30༵
何の話をするの? • フレームワークの使い方の話ではありま せん • この先もプログラマー/エンジニアとし て生き残っていくための話です 4 126݄30༵
何の話をするの? • フレームワークの使い方の話ではありま せん • この先もプログラマー/エンジニアとし て生き残っていくための話です • PHP +
Symfonyは、他の言語・フレーム ワークと堂々と渡り合えます 4 126݄30༵
5 126݄30༵
5 զʑͷؒʹɺνʔϜϓϨʔͳͲͱ ͍͏߹ͷΑ͍ݴ͍༁ଘࡏͤΜɻ ༗Δͱ͢ΕελϯυϓϨʔ͔Βੜ ͡ΔɺνʔϜϫʔΫ͚ͩͩɻ 126݄30༵
5 զʑͷؒʹɺνʔϜϓϨʔͳͲͱ ͍͏߹ͷΑ͍ݴ͍༁ଘࡏͤΜɻ ༗Δͱ͢ΕελϯυϓϨʔ͔Βੜ ͡ΔɺνʔϜϫʔΫ͚ͩͩɻ ߥרେีެ҆̕՝՝ 126݄30༵
問 なぜSymfonyが 良いと言えるのか? 6 126݄30༵
7 126݄30༵
7 •速い?軽い? 126݄30༵
7 •速い?軽い? •簡単? 126݄30༵
7 •速い?軽い? •簡単? •自由? 126݄30༵
7 •速い?軽い? •簡単? •自由? 126݄30༵
8 126݄30༵
8 ソフトウェア開発の歴 史の中で培われてきた 汎用的な知見を適用可 能か? 126݄30༵
8 ソフトウェア開発の歴 史の中で培われてきた 汎用的な知見を適用可 能か? 自分の取り組んでいる問題領域へ 126݄30༵
9 汎用的な知見 126݄30༵
9 • クラス設計パターン 汎用的な知見 126݄30༵
9 • クラス設計パターン • 設計・開発手法、プロセス 汎用的な知見 126݄30༵
9 • クラス設計パターン • 設計・開発手法、プロセス • テスト手法 汎用的な知見 126݄30༵
9 • クラス設計パターン • 設計・開発手法、プロセス • テスト手法 汎用的な知見 巨人の肩の上に立つ 126݄30༵
10 汎用的な知見の適用に必要な技術要素 126݄30༵
10 • オブジェクト指向 汎用的な知見の適用に必要な技術要素 126݄30༵
10 • オブジェクト指向 • レイヤードアーキテクチャ 汎用的な知見の適用に必要な技術要素 126݄30༵
10 • オブジェクト指向 • レイヤードアーキテクチャ • ドメインレイヤー 汎用的な知見の適用に必要な技術要素 126݄30༵
10 • オブジェクト指向 • レイヤードアーキテクチャ • ドメインレイヤー 汎用的な知見の適用に必要な技術要素 126݄30༵
10 • オブジェクト指向 • レイヤードアーキテクチャ • ドメインレイヤー 汎用的な知見の適用に必要な技術要素 126݄30༵
10 • オブジェクト指向 • レイヤードアーキテクチャ • ドメインレイヤー 汎用的な知見の適用に必要な技術要素 ??? 126݄30༵
ドメイン 11 126݄30༵
ドメイン • ドメイン=問題領域 11 126݄30༵
ドメイン • ドメイン=問題領域 • コアドメイン、サポートドメイン 11 126݄30༵
ドメイン • ドメイン=問題領域 • コアドメイン、サポートドメイン • ドメインをとらえる→関心事の分離 11 126݄30༵
ドメイン • ドメイン=問題領域 • コアドメイン、サポートドメイン • ドメインをとらえる→関心事の分離 • ドメイン駆動設計(DDD) 11
126݄30༵
ドメイン • ドメイン=問題領域 • コアドメイン、サポートドメイン • ドメインをとらえる→関心事の分離 • ドメイン駆動設計(DDD) 11
ドメインモデルを実装するドメインレイ ヤーと、アプリケーションのレイヤーと を明確に分離して扱う 126݄30༵
12 126݄30༵
12 126݄30༵
12 ֎ 126݄30༵
13 126݄30༵
13 126݄30༵
13 126݄30༵
13 ドメインモデル? 126݄30༵
14 問題点 126݄30༵
14 問題点 • すべてが渾然一体、一枚岩 126݄30༵
14 問題点 • すべてが渾然一体、一枚岩 • すべてがフレームワークに依存 126݄30༵
14 問題点 • すべてが渾然一体、一枚岩 • すべてがフレームワークに依存 • モデル等もアプリケーションフレーム ワークのクラスを継承? 126݄30༵
14 問題点 • すべてが渾然一体、一枚岩 • すべてがフレームワークに依存 • モデル等もアプリケーションフレーム ワークのクラスを継承? •
フレームワーク ロックイン 126݄30༵
14 問題点 • すべてが渾然一体、一枚岩 • すべてがフレームワークに依存 • モデル等もアプリケーションフレーム ワークのクラスを継承? •
フレームワーク ロックイン • 自由と言えるのか? 126݄30༵
良いフレームワーク 15 126݄30༵
良いフレームワーク • ドメインレイヤーを重視する 15 126݄30༵
良いフレームワーク • ドメインレイヤーを重視する • 自身がアプリケーションレイヤーのフ レームワークである、ということに自 覚的である 15 126݄30༵
良いフレームワーク • ドメインレイヤーを重視する • 自身がアプリケーションレイヤーのフ レームワークである、ということに自 覚的である 15 Webアプリケーションフレームワーク 126݄30༵
16 Symfonyを使った開発とは 126݄30༵
16 Symfonyを使った開発とは • ドメインモデルを実装する 126݄30༵
16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 126݄30༵
16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 • Symfonyと関係がない部分 126݄30༵
16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 • Symfonyと関係がない部分 • アプリケーションコードを実装する
126݄30༵
16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 • Symfonyと関係がない部分 • アプリケーションコードを実装する
• Webアプリケーションドメイン 126݄30༵
16 Symfonyを使った開発とは • ドメインモデルを実装する • ここが問題の中心 • Symfonyと関係がない部分 • アプリケーションコードを実装する
• Webアプリケーションドメイン • 他のアプリケーションドメイン(CLI) 126݄30༵
17 126݄30༵
18 126݄30༵
18 126݄30༵
18 126݄30༵
18 126݄30༵
18 開発者の 手で実装 126݄30༵
18 開発者の 手で実装 オブジェクト指向設計 126݄30༵
18 開発者の 手で実装 オブジェクト指向設計 ドメイン駆動設計 126݄30༵
18 開発者の 手で実装 オブジェクト指向設計 DCIアーキテクチャ ドメイン駆動設計 126݄30༵
18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 126݄30༵
18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 126݄30༵
18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 126݄30༵
18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 126݄30༵
18 開発者の 手で実装 オブジェクト指向設計 各種パターン DCIアーキテクチャ ドメイン駆動設計 126݄30༵
19 これが 本当の 自由だーー! 126݄30༵
20 本当の自由とは 126݄30༵
20 本当の自由とは • 過去から積み上げられてきたソフ トウェア開発に関する知見を、コ アとなる問題の解決に直接的に適 用できる自由 126݄30༵
20 本当の自由とは • 過去から積み上げられてきたソフ トウェア開発に関する知見を、コ アとなる問題の解決に直接的に適 用できる自由 プロフェッショナルが、プロ フェッショナルの仕事をするため の自由!!
126݄30༵
この意味で •Symfonyは自由な フレームワーク 21 126݄30༵
22 で、Symfonyの部分は どうなのよ?? 126݄30༵
23 Symfony 126݄30༵
23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク 126݄30༵
23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 126݄30༵
23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ 126݄30༵
23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •
DependencyInjectionコンポーネント 126݄30༵
23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •
DependencyInjectionコンポーネント • DSLシステム 126݄30༵
23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •
DependencyInjectionコンポーネント • DSLシステム • Configコンポーネント 126݄30༵
23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •
DependencyInjectionコンポーネント • DSLシステム • Configコンポーネント 126݄30༵
23 Symfony • 多数のSymfonyコンポーネント、バンドル 等で構成されたフレームワーク • 疎結合 • DIコンテナ •
DependencyInjectionコンポーネント • DSLシステム • Configコンポーネント この組み合わせを基盤として いるため非常に柔軟で強力 126݄30༵
まとめ 24 126݄30༵
まとめ • 良いソフトウェアを開発するためには、 先人の知見を学び利用・適用することが 必要 24 126݄30༵
まとめ • 良いソフトウェアを開発するためには、 先人の知見を学び利用・適用することが 必要 • ドメインレイヤーを大切にするフレーム ワークが必要 24 126݄30༵
まとめ • 良いソフトウェアを開発するためには、 先人の知見を学び利用・適用することが 必要 • ドメインレイヤーを大切にするフレーム ワークが必要 • Symfonyはドメインレイヤーを意識して開
発され、上記要件を十分に満たす 24 126݄30༵
まとめ(2) 25 126݄30༵
まとめ(2) • このような視点にもとづいていれば、ア プリケーションフレームワークの流行 り?などに振り回されることはありませ ん 25 126݄30༵
まとめ(2) • このような視点にもとづいていれば、ア プリケーションフレームワークの流行 り?などに振り回されることはありませ ん • 芯のとおった技術と知識を身につけるこ とで、長く生き残れます 25
126݄30༵
26 ガイドとなる 技術・書籍 126݄30༵
ドメイン駆動設計 27 • エリック・エヴァン スのドメイン駆動設 計 • 基本的な考え方・取 り組み方から、実践 に適用可能なパター
ンまで幅広く解説 126݄30༵
ドメイン工学、DSL • ジェネレーティブプ ログラミング(クシ シュトフ・チャル ネッキ/ウールリ シュ・W・アイセン アッカ) 28 126݄30༵
オブジェクト指向技術 • 後ほどのセッションにて紹介します 29 126݄30༵
30 ありがとう ございました! 126݄30༵