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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kazuhei Arai
July 12, 2017
Programming
99
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.1k
LaravelとAWSで_漸進的なプロダクト開発
kazuhei0108
0
170
モックの泥沼から脱却するために、あえてDBにつないでテストしている話
kazuhei0108
4
3.5k
Laravelのエラーハンドリングをカスタマイズする
kazuhei0108
0
510
サービスコンテナの実践的な活用
kazuhei0108
1
1.2k
クラスを使ってLaravelのviewをキレイにする
kazuhei0108
1
1.7k
Composerのstabilityの話
kazuhei0108
0
72
Other Decks in Programming
See All in Programming
The NotImplementedError Problem in Ruby
koic
1
710
OSもどきOS
arkw
0
520
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
240
AIで効率化できた業務・日常
ochtum
0
120
Lessons from Spec-Driven Development
simas
PRO
0
170
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
200
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
AI時代のUIはどこへ行く?その2!
yusukebe
21
7k
3Dシーンの圧縮
fadis
1
730
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
390
Modding RubyKaigi for Myself
yui_knk
0
920
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
310
Are puppies a ranking factor?
jonoalderson
1
3.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Embracing the Ebb and Flow
colly
88
5.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Writing Fast Ruby
sferik
630
63k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Believing is Seeing
oripsolob
1
140
Done Done
chrislema
186
16k
HDC tutorial
michielstock
2
700
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
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 ϕϯνϟʔͰΤϯδχΞਓ৺ࡉ͍ͷͰ༑ͩͪʹͳ͍ͬͯͩ͘͞