Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第8回Symfony勉強会 基礎編資料
Search
hidenorigoto
May 26, 2013
Programming
1
1.7k
第8回Symfony勉強会 基礎編資料
hidenorigoto
May 26, 2013
Tweet
Share
More Decks by hidenorigoto
See All by hidenorigoto
ドメインと向き合う - 旅行予約編
hidenorigoto
4
1.1k
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
3.3k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
570
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8.4k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
320
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
4.2k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.7k
抽象化って何? (What is abstraction?)
hidenorigoto
11
7.2k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
6.3k
Other Decks in Programming
See All in Programming
AWS CDKの推しポイントN選
akihisaikeda
1
240
愛される翻訳の秘訣
kishikawakatsumi
1
280
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
360
CSC509 Lecture 14
javiergs
PRO
0
220
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7k
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
1.2k
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
310
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
200
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
420
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
140
CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム
ternbusty
7
2k
sbt 2
xuwei_k
0
220
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.8k
Thoughts on Productivity
jonyablonski
73
5k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Transcript
基 礎 日本Symfonyユーザー会 PHPメンターズ 後藤 秀宣 @hidenorigoto 1 Symfony勉強会 #8
2013.05.25 135݄26༵
後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 • Symfony Midnight • 翻訳温泉ツアー •
WEB+DB PRESS 2 135݄26༵
WEB+DB PRESS #wdpress • 巨人の肩からPHP • vol.69 Behatによる振舞駆動開発 • vol.70
Phake,Mockeryによるオブジェクト指向プログラミング • vol.71 SymfonyではじめるDI • vol.72 HTTPでのキャッシュとESI • vol.73 BEAR.SundayでRESTfulなWeb開発 • vol.74 TYPO3 Flowでドメイン駆動設計入門 • vol.75 (Symfony Config) 3 135݄26༵
キーワード • 分けて考える • レイヤー • ドメイン 4 135݄26༵
アジェンダ 1.関心事の分離 2.標準的なフレームワーク 3.新しめの技術(少し) 4.テスタビリティ(DIなど) などについてバラバラと話します 5 135݄26༵
1. 関心事の分離 6 135݄26༵
関心事の分離 • かんしんじ • Separation of Concerns (SoC) • 分けて考える
• 分け方には、いろいろある • 分け方がデファクトスタンダードに従ってい ると、それだけで分かりやすい • 実装時の指針・目安になる 7 135݄26༵
分け方 • 粒度大 • MVCアーキテクチャスタイル • レイヤー化アーキテクチャ • ドメイン駆動設計アーキテクチャスタイル •
粒度小 • デザインパターン • 責務駆動設計ステレオタイプ • AOP 8 135݄26༵
分け方 • 分かれすぎていることのデメリットもあ る • (ディレクトリ分散、ファイル分散) • が、構造がなさすぎるよりも、分かれ て整理されている方が良い 9
135݄26༵
うまく扱う • IDEによるファイルナビゲーション • ショートカットキーなどと併用 • 将来的なIDE • Adobe Edge
Code Editor http://html.adobe.com/edge/code/ • (実装面)DI/DIコンテナ 10 135݄26༵
11 135݄26༵
12 (興味ある方) • DSLエディタ(言語ワークベンチ) • インテンショナルプログラミング 135݄26༵
13 レイヤ化アーキテクチャ 135݄26༵
14 ドメイン駆動設計 135݄26༵
ここまでのまとめ • 分けて考える • 分け方がデファクトスタンダードに従ってい ると、それだけで分かりやすい • 実装時の指針・目安になる 15 135݄26༵
2. 標準的な フレームワーク 16 135݄26༵
MVC • アーキテクチャスタイル • モデル、ビュー、コントローラに分けて考え ましょう(関心事の分離) • 実装にはさまざまなパターンがある 17 135݄26༵
SymfonyのMVC • M・・・ドメインレイヤー • V・・・Twigテンプレート • C・・・コントローラクラス • リクエスト、レスポンス、ルーティング 18
ざっくりとした流れをコードとともに見てみましょう 135݄26༵
SymfonyのMVC 19 135݄26༵
リクエスト、レスポンス 20 135݄26༵
リクエスト、レスポンス • web/app.php(フロントコントローラ) 21 135݄26༵
ルーティング、コントローラ 22 135݄26༵
ルーティング、コントローラ • src/Acme/DemoBundle/Controller DemoController.php 23 135݄26༵
コントローラ、ドメインレイヤー 24 135݄26༵
コントローラ、ドメインレイヤー • src/Acme/DemoBundle/Controller DemoController.php等 25 135݄26༵
テンプレート、レスポンス 26 135݄26༵
テンプレート、レスポンス • src/Acme/DemoBundle/Controller DemoController.php等 27 135݄26༵
ここまでのまとめ • Symfonyは標準的なMVCフレームワーク • ごく普通、素直 • かつ洗練されている • 分かりやすい 28
135݄26༵
3. 新しめの技術 29 135݄26༵
新しめの技術 • 名前空間、PSR • Composerによるインストーラ • アセットパイプライン(Assetic) • アノテーション •
ESI(Edge Side Include) 30 135݄26༵
4. テスタビリティ 31 135݄26༵
テスタビリティ • ユニットテスト、Webテスト対応 • フレームワークのコードに、きち んとしたテストがある • ドメインレイヤーのクラスをピュ アに書ける 32
135݄26༵
ユニットテスト • クラス単体のテスト • 依存してるものは・・・? 33 135݄26༵
こんなテストしてませんか? 34 ユニット テスト? 何を テストした い? テストデータ を用意してメ ソッドの入出
力をテストし ている 135݄26༵
問題 • スローテスト • テストスイートの実行に時間がかかるようになる • テストケースの漏れ • 入出力のパターンが網羅しきれない •
テスト作成にかかる手間・時間 • 気軽にテストできない、テストを書けない • リファクタリングの障壁 35 135݄26༵
36 契約による設計 • Design by Contract (DbC) • 分けて考える際の基本 •
API、インターフェイス 135݄26༵
37 ৴པ͢Δ モックで 置き換える 振舞の テスト DBアクセス ライブラリ プロジェクト のコード
135݄26༵
38 さらに • 依存オブジェクトをどう取得するか? • とってくる(サービスロケーター) • サービスコンテナが常に必要 • 外から受け取る(依存性注入:DI)
• テスト時にミニマムになるのは、DIスタ イル 135݄26༵
サービスロケーター 39 135݄26༵
テストコード 40 135݄26༵
DI 41 135݄26༵
テストコード 42 135݄26༵
43 フレームワークのテストコード • モックが使われているか? ただし、DIスタイルかサービスロ ケータスタイルかは見極めが必要 135݄26༵
44 まとめ 135݄26༵
まとめ 45 • ソフトウェアの世界で積み上げられた知 見を学ぼう • ソフトウェアエンジニアとしてブレない 軸を持とう • Symfonyは良い線を行っている
135݄26༵
46 参考書籍 135݄26༵
ドメイン駆動設計 47 • 基本的な考え方・取 り組み方から、実践 に適用可能なパター ンまで幅広く解説 135݄26༵
アジャイルソフトウェア開発の奥義 48 • オブジェクト指向ク ラス設計の原則 (SOLID原則)、ク ラスの安定性等 135݄26༵
ジェネレーティブプログラミング • DSL、AOP、インテン ショナルプログラミ ング、ドメイン工学 等包括的に扱う 49 135݄26༵
PofEAA • 現在のフレームワー ク等でも使われてい るパターンが多数収 録 50 135݄26༵