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
2.1k
Symfony勉強会#6 一歩先ゆくエンジニアから見たSymfony
2012/6/30 Symfony勉強会 #6 一歩先ゆくエンジニアから見たSymfonyのセッションで使用したスライド。先人たちの知見、ドメインモデル等について。
hidenorigoto
June 30, 2012
Tweet
Share
More Decks by hidenorigoto
See All by hidenorigoto
ドメインと向き合う - 旅行予約編
hidenorigoto
4
740
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
2.8k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
440
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8.1k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
270
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
3.9k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.4k
抽象化って何? (What is abstraction?)
hidenorigoto
11
6.7k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
5.9k
Other Decks in Programming
See All in Programming
Androidアプリの One Experience リリース
nein37
0
1.1k
知られざるDMMデータエンジニアの生態 〜かつてツチノコと呼ばれし者〜
takaha4k
1
370
令和7年版 あなたが使ってよいフロントエンド機能とは
mugi_uno
10
5.1k
Package Traits
ikesyo
1
210
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
280
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
770
良いユニットテストを書こう
mototakatsu
11
3.6k
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
140
いりゃあせ、PHPカンファレンス名古屋2025 / Welcome to PHP Conference Nagoya 2025
ttskch
1
170
Lookerは可視化だけじゃない。UIコンポーネントもあるんだ!
ymd65536
1
130
テストコード書いてみませんか?
onopon
2
340
VisionProで部屋の明るさを反映させるシェーダーを作った話
segur
0
100
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
96
5.3k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
192
16k
Into the Great Unknown - MozCon
thekraken
34
1.6k
Speed Design
sergeychernyshev
25
730
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7.1k
Code Review Best Practice
trishagee
65
17k
Adopting Sorbet at Scale
ufuk
74
9.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
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༵