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
kazuma.murata
December 12, 2020
Programming
5
2.4k
Laravel × オニオンアーキテクチャで始めるテスト駆動開発
PHP Conference 2020
トラック4-3での発表スライドです。
kazuma.murata
December 12, 2020
Tweet
Share
More Decks by kazuma.murata
See All by kazuma.murata
ROSCAFE_2社に聞く_DevOpsの最新事例__SocialDog発表スライド_.pdf
canon1ky
1
250
BDDフレームワークで始める、E2Eテストのススメ
canon1ky
1
570
20200109サポーターズ勉強会
canon1ky
0
290
2019年11月20日 ビアバッシュ LT発表資料
canon1ky
0
460
仲間と起業、経営から廃業に至る中で学んだ「ビジョン」の本当の大切さ
canon1ky
2
77
Other Decks in Programming
See All in Programming
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
170
どの様にAIエージェントと 協業すべきだったのか?
takefumiyoshii
2
590
Catch Up: Go Style Guide Update
andpad
0
150
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
naofumi
4
3.3k
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
180
CI_CD「健康診断」のススメ。現場でのボトルネック特定から、健康診断を通じた組織的な改善手法
teamlab
PRO
0
170
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
900
iOSアプリの信頼性を向上させる取り組み/ios-app-improve-reliability
shino8rayu9
0
140
麻雀点数計算問題生成タスクから学ぶ Single Agentの限界と Agentic Workflowの底力
po3rin
5
2.1k
フロントエンド開発に役立つクライアントプログラム共通のノウハウ / Universal client-side programming best practices for frontend development
nrslib
7
3.9k
Let's Write a Train Tracking Algorithm
twocentstudios
0
220
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
470
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
339
57k
How to train your dragon (web standard)
notwaldorf
96
6.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
20k
Statistics for Hackers
jakevdp
799
220k
Code Reviewing Like a Champion
maltzj
525
40k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Designing for Performance
lara
610
69k
GitHub's CSS Performance
jonrohan
1032
460k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Transcript
ଜాओຏ -BSBWFMºΦχΦϯΞʔΩςΫνϟ Ͱ࢝ΊΔςετۦಈ։ൃ 1)1$POGFSFODF
ҙॻ͖ w ೖ͚ͷ༰Ͱ͢ w ࠓճ͢ΦχΦϯΞʔΩςΫνϟɺख๏Λઆ໌͢Δ্Ͱͷૉࡐఔͱͯ͠ ͝ཧղ͍ͩ͘͞ɻͳ͓ɺհ͢Δ༰ଞͷΞʔΩςΫνϟͰྲྀ༻Ͱ͖· ͢ɻ w εϥΠυ%JTDPSE USBDLBMBSBWFMPOJPO
Ͱڞ༗͠·͢ɻ w ίʔυͷจࣈαΠζ͕গ͠খ͍͞ͷͰɺखݩʹεϥΠυΛ༻ҙͯ͠Έ͍ͯͨͩ ͚ΔͱΑΓݟ͍͔͢ͱࢥ͍·͢ɻ
ຊτʔΫͰ͢͜ͱ͞ͳ͍͜ͱ w ͢͜ͱ w ιϑτΣΞઃܭͱ୯ମςετͷಋೖ w 5%%ͷखॱ w -BSBWFMͰςετΛॻ͘ɾϨΠϠʔΛΔͨΊͷख๏ͷհͱ͍ํ w
͞ͳ͍͜ͱ w ΦχΦϯΞʔΩςΫνϟͷϕετϓϥΫςΟε w 5%%ʹؔ͢ΔϕετϓϥΫςΟε w ιϑτΣΞઃܭͷਂ͍
ࣗݾհ w ଜాओຏ w גࣜձࣾ4IPXDBTF(JH γϣʔέʔεΪάʣ w ୲όοΫΤϯυΤϯδχΞ w ؼΓಓͰԻήʔΓ͕ͪ
w 5XJUUFS!DBOPOLZ
୯ମςετΛॻ͘ར w ςετ͍ͨ͠ՕॴͷΈΛґଘ͢ΔଞͷॴͱΓͯ͠ݕূͰ͖Δ w ྫ֎ॲཧࡉ͔͍ذͳͲͷςετ͕ߦ͍͍͢ w ࣮Օॴ͕Ͳ͏ಈ͖͔͘Λɺ࣮࣌ʹλΠϜϦʔʹݕূͰ͖Δ w ߴʹςετ࣮ߦΛߦ͑ΔͨΊɺଟ͘ͷݕূΛߦ࣮ͬͯߦ͕࣌ؒΊ
ͳͥιϑτΣΞઃܭ͕େͳͷ͔ ςετʹযΛͯͨ߹ w ෳͷ͕ूத͢ΔͱείʔϓΛߜͬͯςετ͢Δ͜ͱ͕Ͱ͖ͳ͍ w %#ͷσʔλग़͠ೖΕ w ֎෦"1*ͷݺͼग़͠ w ۀϞσϧͷՃɺܭࢉɺஅ
ςετ͕͠ʹ͍͘ྫ ෳͷ͕ͭͷϞδϡʔϧʹೖ͍ͬͯΔ 3%#ʹΫΤϦΛඈ͢ ۀϩδοΫ ϦΫΤετύϥϝʔλऔಘ Ϩεϙϯεฦ٫
ςετ͕͍͢͠ྫ ͝ͱʹϞδϡʔϧΛׂ 3%#ʹΫΤϦΛඈ͢ Ϟδϡʔϧ ϦΫΤετϨεϙϯεͱ ۀॲཧͰѻ͏ͷมΛߦ͏ Ϟδϡʔϧ
ΦχΦϯΞʔΩςΫνϟ Ҿ༻IUUQTRJJUBDPNMJUUMF@IBOE@TJUFNTGCBECGD ϙΠϯτۀॲཧͰ͋Δ"QQMJDBUJPO4FSWJDF͕*OGSBTUSVDUVSFͰ͋Δ%#ʹґଘ͠ͳ͍
ྫ w ຊΛཧ͢ΔΞϓϦέʔγϣϯ w ຊCPPLϞσϧͱͯ͠දݱ͞ΕɺԼهͷΛ࣋ͭ w *% λΠτϧ ஶऀ*% w
1045CPPLT"1*Λୟ͘ͱɺຊ͕ొ͞ΕΔ w *%ࣗಈ࠾൪ w ଘࡏ͠ͳ͍ஶऀ*%Λࢦఆͨ͠߹ɺ/PU'PVOE
Ϋϥεͱґଘํ 6* 1SFTFOUBUJPO "QQMJDBUJPO4FSWJDF *OGSBTUSVDUVSF %PNBJO.PEFM &OUJUZ ۀॲཧ σʔλͷശ *OUFSGBDF
ۀͰ͏Ϟσϧ &MPRVFOUΛͬͨσʔλͷശ %PNBJO4FSWJDF
֤Ϋϥεͷׂ w #PPL$POUSPMMFSϦΫΤετΛड͚औΓɺ#PPL6TFDBTFʹॲཧΛґཔͯ͠Ϩ εϙϯε w #PPL6TFDBTFۀͷखଓ͖ɻ"VUIPS3FQPTJUPSZʹ"VUIPS*%ͷஶऀ͕ଘࡏ ͢Δ͔͍߹Θͤɺஶऀ͕͍ΕຊΛ࡞ͯ͠#PPL3FQPTJUPSZʹอଘ͢Δɻ w "VUIPS3FQPTJUPSZ *OUFSGBDF
"VUIPSΛӬଓԽ͓ͯ͘͠ശ w #PPL3FQPTJUPSZ *OUFSGBDF #PPLΛӬଓԽ͓ͯ͘͠ശ w "VUIPS#PPLґଘͷ࠷্ҐͱͳΔϞσϧ
ςετۦಈ։ൃͷखॱ ςετΛॻ͘ ࣦഊ͢ΔίʔυΛॻ͘ ޭ͢ΔίʔυΛॻ͘ ϦϑΝΫλϦϯά͢Δ
&OUJUZ .PEFM ࣮ ۀॲཧͰ͏ ΦϒδΣΫτ -BSBWFMͷ.PEFMΛΘͣɺ ϑϨʔϜϫʔΫʹґଘͤ͞ͳ͍
3FQPTJUPSZ *OUFSGBDF ఆٛ σʔλΛग़͠ೖΕ͢ΔͨΊͷശ อଘઌͲ͜Ͱྑ͍͕ɺ ʮ͜͏͍͏ΓํͰσʔλΛอଘͨ͠ΓऔΓग़ͯ͠Ͷʯͱ͍͏એݴ
མͪΔ6TF$BTFςετ࣮ ςετΛམͱͨ͢Ίʹ /VMMΛฦͯ͠ΈΔ 6TF$BTFΛݺͿͱɺ ࡞͞Εͨຊ͕ฦͬͯ͘Δ ຊΛ࡞ͯ͠%#ʹอଘ͢Δ ۀॲཧΛߦ͏Ϋϥε
ςετ࣮ߦ ςετ͕ಈ͖ɺ མ͍ͪͯΔ͜ͱΛ֬ೝ
ςετ͕མͪΔͱ͜Ζ·Ͱ֬ೝͰ͖ͨΒ ৽͍͠ຊ͕อଘ͞Εͨ͜ͱ͕ςετ͞ΕΔΑ͏ʹॻ͖͢ σʔλग़͠ೖΕͷৼΔ͍ΛϞοΫͰςετ ςετ͕௨ΔΑ͏ʹ͢
ϞοΫΦϒδΣΫτ ґଘઌΦϒδΣΫτͷସ w ςετର͕ґଘ͢ΔΫϥεͷಈ࡞Λఆٛɺݕূ͢ΔͨΊͷΦϒδΣΫτ w ςετରͷΫϥε͕ґଘ͢ΔΫϥεΛϞοΫͰࠩ͠ସ͑Δ w ଞͷΫϥεʹґଘ͍ͯ͠ΔΫϥεͷςετΛ༰қʹߦ͏͜ͱ͕Ͱ͖Δ
ϞοΫΦϒδΣΫτ .PDLFSZ w -BSBWFMͰ.PDLFSZͱ͍͏ϥΠϒϥϦ͕ඪ४Ͱ༻ҙ͞Ε͍ͯΔ w ґଘઌΫϥεͷؔݺͼग़͠ͷҾͷςετ w ґଘઌΫϥεͷؔݺͼग़͠ճͷςετ w ґଘઌΫϥεͷؔͷฦΓΛఆٛͳͲ
6TF$BTF5FTU࣮ ଓ͖ ஶऀ*%ͰஶऀΛ%#͔Βऔಘ͢ΔৼΔ͍͕ߦΘΕɺ ஶऀ໊NVSBUBͷஶऀ͕ฦ͞ΕΔ ࢦఆ͞Εͨஶऀ*%ͱλΠτϧͰɺ %#ͷຊͷ৽ن࡞ॲཧ͕͚ͩݺΕΔ ฦΓ͕৽ن࡞͞ΕͨຊͰ͋Δ 6TF$BTFʹৼΔ͍Λఆٛͨ͠3FQPTJUPSZΛ ֎͔Βೖ %*
6TF$BTF࣮ ଓ͖ 6TF$BTFͰ֎͔Βೖ͞Εͨ3FQPTJUPSZΛ ༻͢Δ
࣮ՔಇͰ%#·Ͱܨ͙3FQPTJUPSZͲ͏͢Δͷ
3FQPTJUPSZ4FSWJDF1SPWJEFS ΠϯλʔϑΣʔε͕ೖ͞Εͨ࣌ɺ ࣗಈͰೖ͞ΕΔ࣮ଶͷΫϥεࢦఆͰ͖Δ ґଘؔͷҰ൪֎ଆʹ͋Δɺ JOGSBTUSVDUVSFͷΫϥεΛ͜͜Ͱೖ
&MPRVFOU3FQPTJUPSZςετ࣮ #PPL $SFBUFͨ͠Β %#ʹࢦఆͨ͠Ϩίʔυ͕อଘ͞Ε͍ͯΔ͔ ςετ ෳճ$SFBUFͨ͠Β *%͕"VUP*ODSFNFOU͞Ε͍ͯΔ͔ςετ
&MPRVFOU3FQPTJUPSZ࣮ #PPL ͜͜Ͱ-BSBWFMͷ.PEFMΛ༻ 3FQPTJUPSZ4FSWJDF1SPWJEFSͰ͜ͷΫϥεΛೖ͢ΔͨΊɺ 6TF$BTF͕-BSBWFMͷ.PEFMʹґଘ͠ͳ͍ܗʹͳΔ -BSBWFMͷ.PEFMΛΤϯςΟςΟʹ٧Ίସ͑
&MPRVFOU3FQPTJUPSZςετ࣮ "VUIPS ࢦఆͨ͠*%ͷϨίʔυ͕طʹ%#ʹଘࡏͨ͠߹ɺ ΤϯςΟςΟʹม͞Εͯฦ͞ΕΔ͜ͱΛςετ ࢦఆͨ͠*%ͷϨίʔυ͕%#ʹଘࡏ͠ͳ͍߹ɺ /VMM͕ฦ͞ΕΔ͜ͱΛςετ
'BDUPSZ࣮ "VUIPS 'BDUPSZύλʔϯΛ౿ऻͨ͠ -BSBWFMඪ४ͷΈ े݅σʔλΛ·ͱΊͯ༻ҙͨ͠Γɺ ಛఆͷΧϥϜΛϥϯμϜจࣈྻϥϯμϜͰఆٛͰ͖Δ
&MPRVFOU3FQPTJUPSZ࣮ "VUIPS ͜͜Ͱ-BSBWFMͷ.PEFMΛ༻ -BSBWFMͷ.PEFMΛΤϯςΟςΟʹ٧Ίସ͑
'PSN3FRVFTU5FTU࣮ ϦΫΤετύϥϝʔλ͕ਖ਼ৗͷ߹WBMJE λΠτϧ͕ۭͷ߹JOWBMJE -BSBWFMඪ४ͷ'PSN3FRVFTUΛ༻
'PSN3FRVFTU࣮ ϦΫΤετύϥϝʔλͷϧʔϧΛఆٛ
$POUSPMMFSςετ࣮ -BSBWFMͰςετͰ "1*Λୟ͘߹Ͱɺ ґଘ͢ΔͷΛ֎෦ೖͰ͖Δ 6TF$BTFͷॲཧ͕ޭ͢Δͱ 6TF$BTF͔Β/PU'PVOEྫ֎͕ ు͔ΕΔͱ
$POUSPMMFS࣮ 6TF$BTFॲཧΛґཔͯ͠ ϦΫΤετϨεϙϯεͷ٧Ίସ͑ ίϯετϥΫλΠϯδΣΫγϣϯ ຊ൪Ͱͷ࣮ߦ࣌ʹɺ-BSBWFMͰࣗಈͰґଘઌ ΦϒδΣΫτ͕ੜ͞ΕΔ
ςετ
͍͞͝ʹ w -BSBWFMͰςετۦಈͰ։ൃ͢Δํ๏Λઆ໌͠·ͨ͠ w ͝ͱʹ࣮Λ͚ͯςετ͍͢͠ίʔυΛॻ͖·͠ΐ͏ w .PDLFSZΛͬͯࡉ͔͍ύʔπ͝ͱʹςετΛͯ͠Έ·͠ΐ͏
גࣜձࣾ4IPXDBTF(JH ϛογϣϯ ৗͷফඅʹ༹͚ࠐΉςΫϊϩδʔʹΑΓੜ׆Λ্ͤ͞Δ͜ͱ
ϓϩμΫτ ళ͚ϞόΠϧɾςʔϒϧΦʔμʔαʔϏεɻ ͓٬༷͕ࣗͷεϚϗͰจ͠ɺ٬ελοϑଞͷαʔϏεʹूதɻ ͜Ε͔Βͷҿ৯ళͷʮ͋ͨΓ·͑ʯΛʑ։ൃத
༻ٕज़ ͳͲͳͲ "84'BSHBUF ,VCFSOFUFT
ΤϯδχΞେืूʂ ΦϑϥΠϯʹΔະղܾͷ՝Λൃݟ͠ɺ ͦͷ՝ΛΠϯλʔωοτςΫϊϩδʔͰղܾ͍ͨ͠ΤϯδχΞ Λืूͯ͠·͢ʂ গ͠ͰڵຯΛ࣋ͬͨํɺҿ৯ͷαʔϏεʹؔΘΓ͍ͨํɺ ੋඇ͓͠͠·͠ΐ͏ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ