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
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
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
160
OSもどきOS
arkw
0
520
JavaDoc 再入門
nagise
0
320
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
560
Oxlintのカスタムルールの現況
syumai
6
1.1k
RTSPクライアントを自作してみた話
simotin13
0
570
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
270
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
710
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
490
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2k
Lessons from Spec-Driven Development
simas
PRO
0
170
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
390
From π to Pie charts
rasagy
0
210
Chasing Engaging Ingredients in Design
codingconduct
0
220
Building Applications with DynamoDB
mza
96
7.1k
RailsConf 2023
tenderlove
30
1.5k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
580
Google's AI Overviews - The New Search
badams
0
1k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
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 ϕϯνϟʔͰΤϯδχΞਓ৺ࡉ͍ͷͰ༑ͩͪʹͳ͍ͬͯͩ͘͞