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
950
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
3.2k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
540
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8.4k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
310
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
4.1k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.6k
抽象化って何? (What is abstraction?)
hidenorigoto
11
7.1k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
6.1k
Other Decks in Programming
See All in Programming
Kiroで始めるAI-DLC
kaonash
2
620
時間軸から考えるTerraformを使う理由と留意点
fufuhu
16
4.8k
スケールする組織の実現に向けた インナーソース育成術 - ISGT2025
teamlab
PRO
1
160
Deep Dive into Kotlin Flow
jmatsu
1
360
1から理解するWeb Push
dora1998
7
1.9k
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
130
速いWebフレームワークを作る
yusukebe
5
1.7k
基礎から学ぶ大画面対応(Learning Large-Screen Support from the Ground Up)
tomoya0x00
0
3.3k
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
340
個人軟體時代
ethanhuang13
0
330
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
280
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
520
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
The World Runs on Bad Software
bkeepers
PRO
70
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Producing Creativity
orderedlist
PRO
347
40k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Unsuck your backbone
ammeep
671
58k
Designing for humans not robots
tammielis
253
25k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Scaling GitHub
holman
463
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
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༵