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
78
Other Decks in Programming
See All in Programming
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
150
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
260
Go 1.27 における memory allocation の高速化
andpad
0
140
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.7k
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.2k
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
610
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
220
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
310
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
370
yield再入門 #phpcon
o0h
PRO
0
1k
AIが無かった頃の素敵な出会いの話
codmoninc
1
400
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
Ruling the World: When Life Gets Gamed
codingconduct
0
290
Speed Design
sergeychernyshev
33
2k
Building Applications with DynamoDB
mza
96
7.2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
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 ϕϯνϟʔͰΤϯδχΞਓ৺ࡉ͍ͷͰ༑ͩͪʹͳ͍ͬͯͩ͘͞