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 アプリケーション設計晒す
Search
Kazuhei Arai
July 12, 2017
Programming
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
自分のLaravel アプリケーション設計晒す
Kazuhei Arai
July 12, 2017
More Decks by Kazuhei Arai
See All by Kazuhei Arai
CTOがプロダクトを管轄して、変わり始めたスクラム開発
kazuhei0108
0
340
Predefined Interfacesを使って便利な独自クラスを作りましょう
kazuhei0108
0
3.2k
LaravelとAWSで_漸進的なプロダクト開発
kazuhei0108
0
170
モックの泥沼から脱却するために、あえてDBにつないでテストしている話
kazuhei0108
4
3.5k
Laravelのエラーハンドリングをカスタマイズする
kazuhei0108
0
520
サービスコンテナの実践的な活用
kazuhei0108
1
1.2k
クラスを使ってLaravelのviewをキレイにする
kazuhei0108
1
1.8k
Composerのstabilityの話
kazuhei0108
0
76
Other Decks in Programming
See All in Programming
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
580
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
170
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
770
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.1k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.8k
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
360
5分で問診!Composer セキュリティ健康診断
codmoninc
0
270
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
190
自作OSでスライド発表する
uyuki234
1
3.8k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.5k
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Crafting Experiences
bethany
1
220
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
The Mindset for Success: Future Career Progression
greggifford
PRO
0
420
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
How STYLIGHT went responsive
nonsquared
100
6.2k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
650
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
We Are The Robots
honzajavorek
0
280
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
190
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Transcript
!LB[VIFJ !LB[VIFJ@@ ࣗͷ-BSBWFM ΞϓϦέʔγϣϯઃܭࡽ͢ -BSBWFM.FFUVQ5PLZP7PM
!LB[VIFJ ࣗݾհ ߥҪฏ!LB[VIFJ גࣜձࣾ."Ϋϥυ ޒాͷͲϕϯνϟʔ "841)1+BWBTDSJQU4XJGU
!LB[VIFJ ͱ-BSBWFM w ৽͍͠ձࣾʹೖࣾͯ͠৽ن։ൃϓϩδΣΫτΛ͞Εͨ ࠓͷ݄̍ w ΤϯδχΞࣗͻͱΓ σβΠϯ)5.-4$44֎෦
w ։ൃظؒϲ݄ w 1)1ͷܦݧ͕Ұ൪ଟ͔ͬͨͷͰ1)1Ͱ࡞Δ͜ͱʹ w ϑϨʔϜϫʔΫΛௐͨͱ͜Ζ-BSBWFM͕ྑ͛ͩͬͨ͞ Ҏલͷձࣾ ಠࣗ.7$ϑϨʔϜϫʔΫͩͬͨ
!LB[VIFJ ͱ-BSBWFM w ͳΜ͔Έॻ͘ͱڭ͑ͯ͘ΕΔਓ͕͍Δ
!LB[VIFJ
!LB[VIFJ -5ಈػ w -BSBWFMΛ͏ͷॳΊͯ w -BSBWFM͕ࣗ༝͗ͯ͢࠷ॳͲ͏͍͏;͏ʹΜͰ͍͚ྑ͍͔͔Β ͳ͔ͬͨ w ͍ΖΜͳਓͷຊϒϩάಡΜͰࢀߟʹͨ͠ w
ײँͷҹʹͤΊͯࣗͷͭࡽͦ͏ͱࢥͬͨ w ͬͱ͍ΖΜͳਓͷઃܭΓ͍ͨ ࡽͯ͘͠Ε
!LB[VIFJ ใݯ w +BWBݴޠͰֶͿσβΠϯύλʔϯೖ w ΤϯλʔϓϥΠζɾΞϓϦέʔγϣϯɾΞʔΩςΫνϟύλʔ ϯ w ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭ w
-BSBWFMϦϑΝϨϯε w IUUQTSFBEPVCMFDPN
ϨΠϠʔ͚
!LB[VIFJ -BSBWFMͷجຊ 3FRVFTU ϛυϧΣΞ 3PVUFS ίϯτϩʔϥʔ ϏδωεϩδοΫ Ϗϡʔ 3FTQPOTF
!LB[VIFJ -BSBWFMͷجຊ 3FRVFTU ϛυϧΣΞ 3PVUFS ίϯτϩʔϥʔ ϏδωεϩδοΫ Ϗϡʔ 3FTQPOTF
!LB[VIFJ ϨΠϠʔ͚ ϦΫΤετ ίϯτϩʔϥʔ ΞϓϦέʔγϣϯ αʔϏε υϝΠϯ αʔϏε ΤϯςΟςΟ ϦϙδτϦʔ
%BP ίϯόʔλʔ Ϗϡʔ ΞϓϦέʔγϣϯ υϝΠϯ Πϯϑϥ
!LB[VIFJ ϨΠϠʔ͚ ϦΫΤετ ίϯτϩʔϥʔ ΞϓϦέʔγϣϯ αʔϏε υϝΠϯ αʔϏε ϦϙδτϦʔ %BP
ΞϓϦέʔγϣϯ υϝΠϯ Πϯϑϥ 3FRVFTUܕ υϝΠϯͷܕ QSJNJUJWFͳܕ QSJNJUJWFͳܕ
!LB[VIFJ ϨΠϠʔ͚ ίϯτϩʔϥʔ ΞϓϦέʔγϣϯ αʔϏε υϝΠϯ αʔϏε ΤϯςΟςΟ ϦϙδτϦʔ %BP
ίϯόʔλʔ Ϗϡʔ ΞϓϦέʔγϣϯ υϝΠϯ Πϯϑϥ TUE$MBTT υϝΠϯͷܕ 2VFSZ#VJMEFSར༻
Ϋϥε͚
!LB[VIFJ Ϋϥε͚ 6TFS$POUSPMMFSVQEBUF 6TFS6QEBUF3FRVFTUSFRVFTU 3FHJTUFS4FSWJDFVQEBUF SFRVFTU ΞϓϦέʔγϣϯ υϝΠϯ Πϯϑϥ %PNBJOa6TFSa3FHJTUFS4FSWJDFSFHJTUFS
6TFS*EVTFS*E BSSBZQBSBN %PNBJOa6TFSa6TFS3FQPTJUPSZ*OUFSGBDFVQEBUF 6TFS*EVTFS*E BSSBZQBSBN 6TFS %PNBJOa6TFSa6TFS3FQPTJUPSZVQEBUF 6TFS*EVTFS*E BSSBZQBSBN 6TFS *OGSBa6TFSa6TFS%BPVQEBUF JOUVTFS*E BSSBZEBUB TUE$MBTT %PNBJOa6TFSa6TFS$POWFSUFSUP&OUJUZ aTUE$MBTTVTFS 6TFS ࣮ %PNBJOa6TFSa6TFS
σΟϨΫτϦ͚
!LB[VIFJ σΟϨΫτϦ͚ $PNQPTFSKTPO w %PNBJOɺ*OGSBΛՃ
!LB[VIFJ σΟϨΫτϦ͚ "QQ w )UUQҎԼʹ4FSWJDFTΛՃ
!LB[VIFJ σΟϨΫτϦ͚ %PNBJO w EPNBJOΛಠࣗͰՃ w σΟϨΫτϦʹΤϯςΟςΟͱ7BMVF0CKFDUͱϦϙδτϦͱ ίϯόʔλʔΛೖΕ͍ͯΔ
Ωϟογϡ
!LB[VIFJ Ωϟογϡ 6TFS$POUSPMMFSVQEBUF 6TFS6QEBUF3FRVFTUSFRVFTU 3FHJTUFS4FSWJDFVQEBUF SFRVFTU ΞϓϦέʔγϣϯ υϝΠϯ Πϯϑϥ %PNBJOa6TFSa3FHJTUFS4FSWJDFSFHJTUFS
6TFS*EVTFS*E BSSBZQBSBN %PNBJOa6TFSa6TFS3FQPTJUPSZ*OUFSGBDFVQEBUF 6TFS*EVTFS*E BSSBZQBSBN 6TFS %PNBJOa6TFSa6TFS3FQPTJUPSZVQEBUF 6TFS*EVTFS*E BSSBZQBSBN 6TFS *OGSBa6TFSa$BDIF6TFS%BPVQEBUF JOUVTFS*E BSSBZEBUB TUE$MBTT %PNBJOa6TFSa6TFS$POWFSUFSUP&OUJUZ aTUE$MBTTVTFS 6TFS ࣮ %PNBJOa6TFSa6TFS
!LB[VIFJ Ωϟογϡ w %BPͰTUE$MBTTΛΩϟογϡ͢Δ w औಘͨ͠TUE$MBTTΛNFNDBDIFͳͲʹೖΕͯҰఆ࣌ؒDBDIF w ϝϦοτ෭࡞༻͕΄΅ͳ͍ DSFBUF VQEBUF
EFMFUF࣌ʹDBDIFΛফ ͤྑ͍
!LB[VIFJ Ωϟογϡ <?php namespace Infra\Database\Dao\Adviser; use Illuminate\Cache\Repository; class CachedAdviserIndustryCategoryDao extends
AdviserIndustryCategoryDao { const CACHE_TIME = 360; private $cacheRepository; public function __construct(Repository $cacheRepository) { $this->cacheRepository = $cacheRepository; } public function getList(int $userId) { $key = $this->getKey($userId); if ($this->cacheRepository->has($key)) { return $this->cacheRepository->get($key); } $result = parent::getList($userId); $this->cacheRepository->add($key, $result, self::CACHE_TIME); return $result; } public function create(int $userId, int $industryCategory) { $this->cacheRepository->forget($this->getKey($userId)); return parent::create($userId, $industryCategory); } private function getKey(int $userId): string { return __CLASS__ . "getList" . $userId; } }
·ͱΊ
!LB[VIFJ ࡶײ w $POUSPMMFS͔Β3FQPTJUPSZΛݺͼग़͍ͯ͠ΔՕॴͷϧʔϧͮ͘ΓΛ͍ͨ͠ w ࣗͰ%BPͱ$POWFSUFSॻܾ͘ҙ͕ૣ͗ͨ͢ɻ&MPRVFOUΛ͏ͪΐͬͱݕ౼͠ ͯྑ͔ͬͨɻςʔϒϧΛΦϒδΣΫτʹϚοϐϯά͢Δͷ͕ਏ͍ w ࠓඞཁͳ͍͕ΞΫηε͕૿͑ͨΒ3FQPTJUPSZΛTJOHMFUPOʹͯ͠͏Ұ DBDIF͢Δͱྑͦ͞͏
w υϝΠϯͰ݁ߏϓϦϛςΟϒͳܕΛ͍ͬͯΔͷͰɺͬͱͪΌΜͱܕͰ දݱ͍ͨ͠ɻͰେมͦ͏ͩ͠ใΘΕͳͦ͞͏ w ΤϯςΟςΟͷ*%ͷൃ൪Λ%#ͷBVUPJODSFNFOUͰߦ͍ͬͯΔͷͰɺҰ%#ʹ อଘ͠ͳ͍ͱશͳΤϯςΟςΟ͕࡞Εͳ͍ w +PCͱ/PUJpDBUJPOͱ.BJMͷΫϥεͷ͍͚͕͔ͬͯͳͯ͘ແବʹΫϥεॻ ͍ͯΔؾ͕͢Δ
!LB[VIFJ ·ͱΊ w ॳΊͯ-BSBWFMͰΞϓϦέʔγϣϯΛ࡞ͬͨ w -BSBWFMࣗ༝ͳϑϨʔϜϫʔΫͳͷͰ৭ʑࢼͨ͠ w ϒϩάεϥΠυʹ͓ੈʹͳͬͨͷͰࣗࡽ͢ w ͜Ε͔ΒվળΛଓ͚͍ͯ͘
w ϕϯνϟʔͰΤϯδχΞਓ৺ࡉ͍ͷͰ༑ͩͪʹͳ͍ͬͯͩ͘͞