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
Laravel × レイヤードアーキテクチャをやってみている話 / Trying Larave...
Search
Shohei Okada
May 30, 2018
Programming
0
460
Laravel × レイヤードアーキテクチャをやってみている話 / Trying Laravel with layered architecture
2018-05-30 開催の「第126回 PHP勉強会@東京」におけるLT資料です
https://phpstudy.doorkeeper.jp/events/74677
Shohei Okada
May 30, 2018
Tweet
Share
More Decks by Shohei Okada
See All by Shohei Okada
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
730
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
2
2k
パスワードのハッシュ、ソルトってなに? - What is hash and salt for password?
okashoi
3
330
設計の考え方 - インターフェースと腐敗防止層編 #phpconfuk / Interface and Anti Corruption Layer
okashoi
11
5.4k
"config" ってなんだ? / What is "config"?
okashoi
0
1.6k
ファイル先頭の use の意味、説明できますか? 〜PHP の namespace と autoloading の関係を正しく理解しよう〜 / namespace and autoloading in php
okashoi
4
2k
MySQL のインデックスの種類をおさらいしよう! / overviewing indexes in MySQL
okashoi
0
1.2k
PHP における静的解析(あるいはそもそも静的解析とは) / #phpcondo_yasai static analysis for PHP
okashoi
1
1.2k
【PHPカンファレンス沖縄 2023】素朴で考慮漏れのある PHP コードをテストコードとともに補強していく(ライブコーディング補足資料) / #phpcon_okinawa 2023 livecoding supplementary material
okashoi
3
2.1k
Other Decks in Programming
See All in Programming
Fluid Templating in TYPO3 14
s2b
0
130
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.5k
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
780
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
610
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
620
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
140
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
140
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
The SEO identity crisis: Don't let AI make you average
varn
0
330
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
94
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Bash Introduction
62gerente
615
210k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
380
Transcript
Laravel × レイヤードアーキテクチャ をやってみている話 第126回 PHP勉強会@東京
岡田 正平(おかだ しょうへい)@okashoi • 株式会社ウィルゲート 2015年新卒入社 • 開発室 ソリューションユニット 所属
• PHP, Laravel, Vue.js 2 自己紹介 Slides:
• これまで CakePHP で開発してきたが、今回はじめて Laravel を採用 • 技術のキャッチアップ • チームを越えられる人材育成
• 別チームで Laravel をメインに使っていた私 に白羽の矢が立つ 3 背景|とあるチームの新規開発プロジェクト
4 背景|とあるチームの新規開発プロジェクト プロジェクト リーダー 実装者 2 名 インフラ担当 • 別チームから兼任
(稼動の 40%) • 実装方針の策定 • Laravel の知見 伝搬するマン
自分が提供できる価値を考える 「チームはわざわざ『Laravel に切り替える』 というコストを払っている……」
自分が提供できる価値を考える 「なのに Laravel をただの MVC フレームワーク として使うのではメリットが薄いよね?」
「レイヤードアーキテクチャやろう」
8 レイヤードアーキテクチャ? 出典:DDDパターンを活用した Laravelアプリケーション開発/ddd-with-laravel https://speakerdeck.com/shin1x1/ddd-with-laravel (めちゃくちゃ参考にさせてもらってます )
9 レイヤードアーキテクチャ ※DDD(ドメイン駆動設計)と 一緒に語られることが多いが 今回は DDD はやっていない Domain 層はプレーンな PHP
オブジェクトで実装 Laravel 固有の知識・実際のデータ形式の情報などは Application, Infrastructure 層に寄せていく
• Laravel 固有の知識がビジネスロジックに漏れ出ない(=関心の分離) • 例)Eloquent ORM の記述は Infrastructure 層で完結している •
Laravel の ServiceContaner と相性がいい(後述) 10 うまくいっている点
出典:DDDパターンを活用した Laravelアプリケーション開発/ddd-with-laravel by shin1x1 https://speakerdeck.com/shin1x1/ddd-with-laravel?slide=40 11 うまくいっている点|Laravel との相性の良さ
• ServiceProvider 内(UserImageRepository は interface) • 利用箇所(環境に依存しないコードになる) • DI になっているのでテストも書きやすい!
12 うまくいっている点|Laravel との相性の良さ if (app()->environment('production') || app()->environment('staging')) { // 本番環境・ステージング環境のみ、S3 に保存 $this->app->bind(UserImageRepository::class, S3UserImageRepository::class); } else { // それ以外はローカルファイルストレージに保存 $this->app->bind(UserImageRepository::class, LocalUserImageRepository::class); } public function __construct(UserRepository $userRepository, UserImageRepository $userImageRepository) { $this->userRepository = $userRepository; $this->userImageRepository = $userImageRepository; }
• class 数が多くなるので煩雑に感じがち • 勘所を掴むまでは極端すぎるくらいでもいいかな、とも • うまく集約が使いこなせていない感 • User という
Domain Model のコンストラクタの引数が 26 個に • ユーザ名、性別、プロフィール画像、email などなど…… 13 悩んでいる点
• 今後、ビジネスロジックが増えてきたときに Domain 層に寄せていくようにチームの意識をすり合わせていく • 運用保守も始まったときに考え方が守られるかどうか ➢ 個人が考え、チームで議論できる土台・文化づくり 14 これから