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
2k
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
71
BDDフレームワークで始める、E2Eテストのススメ
canon1ky
1
360
20200109サポーターズ勉強会
canon1ky
0
270
2019年11月20日 ビアバッシュ LT発表資料
canon1ky
0
360
仲間と起業、経営から廃業に至る中で学んだ「ビジョン」の本当の大切さ
canon1ky
2
65
Other Decks in Programming
See All in Programming
見た目から始める生産性向上
ikumatadokoro
10
1.3k
Sheets API使ってみた
toshi0383
2
160
Ruby Pattern Matching
bkuhlmann
0
930
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
680
Elm 0.19.0 Changes
bkuhlmann
0
500
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
380
雑に思考を整理する技術と効能
konifar
63
30k
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
560
使ってみよう Azure AI Document Intelligence
kosmosebi
2
360
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.4k
MetricKitで予期せぬ終了を検知する話 / Detect unexpected termination with MetricKit
nekowen
1
200
スクラムガイドのスプリントレトロスペクティブを改めて読みかえしてみた / Re-reading the Sprint Retrospective Section in the Scrum Guide
mackey0225
3
480
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
660
120k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Building a Modern Day E-commerce SEO Strategy
aleyda
21
6.4k
A Philosophy of Restraint
colly
197
16k
Happy Clients
brianwarren
92
6.4k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.6k
From Idea to $5000 a Month in 5 Months
shpigford
378
45k
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
Writing Fast Ruby
sferik
622
60k
Clear Off the Table
cherdarchuk
85
310k
Become a Pro
speakerdeck
PRO
12
4.6k
How GitHub (no longer) Works
holman
305
140k
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
ΤϯδχΞେืूʂ ΦϑϥΠϯʹΔະղܾͷ՝Λൃݟ͠ɺ ͦͷ՝ΛΠϯλʔωοτςΫϊϩδʔͰղܾ͍ͨ͠ΤϯδχΞ Λืूͯ͠·͢ʂ গ͠ͰڵຯΛ࣋ͬͨํɺҿ৯ͷαʔϏεʹؔΘΓ͍ͨํɺ ੋඇ͓͠͠·͠ΐ͏ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ