Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Laravel × オニオンアーキテクチャで始めるテスト駆動開発
kazuma.murata
December 12, 2020
Programming
3
340
Laravel × オニオンアーキテクチャで始めるテスト駆動開発
PHP Conference 2020
トラック4-3での発表スライドです。
kazuma.murata
December 12, 2020
Tweet
Share
More Decks by kazuma.murata
See All by kazuma.murata
canon1ky
1
74
canon1ky
0
220
canon1ky
0
120
canon1ky
1
28
Other Decks in Programming
See All in Programming
horie1024
1
330
yosuke_furukawa
PRO
13
3.6k
momofff
0
160
sullis
0
110
cocoeyes02
0
220
kyoheig3
0
410
aratayokoyama
0
190
viteinfinite
0
140
decoc
1
320
akatsukinewgrad
0
130
nbkouhou
1
1k
line_developers_tw2
0
550
Featured
See All Featured
eileencodes
113
25k
chriscoyier
145
19k
jeffersonlam
328
15k
davidbonilla
69
3.5k
destraynor
146
19k
morganepeng
92
13k
vanstee
116
4.8k
jensimmons
207
10k
lara
172
9.5k
pauljervisheath
196
15k
afnizarnur
176
14k
bkeepers
408
57k
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
ΤϯδχΞେืूʂ ΦϑϥΠϯʹΔະղܾͷ՝Λൃݟ͠ɺ ͦͷ՝ΛΠϯλʔωοτςΫϊϩδʔͰղܾ͍ͨ͠ΤϯδχΞ Λืूͯ͠·͢ʂ গ͠ͰڵຯΛ࣋ͬͨํɺҿ৯ͷαʔϏεʹؔΘΓ͍ͨํɺ ੋඇ͓͠͠·͠ΐ͏ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ