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.3k
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
220
BDDフレームワークで始める、E2Eテストのススメ
canon1ky
1
560
20200109サポーターズ勉強会
canon1ky
0
290
2019年11月20日 ビアバッシュ LT発表資料
canon1ky
0
460
仲間と起業、経営から廃業に至る中で学んだ「ビジョン」の本当の大切さ
canon1ky
2
77
Other Decks in Programming
See All in Programming
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
120
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
710
チームのテスト力を総合的に鍛えて品質、スピード、レジリエンスを共立させる/Testing approach that improves quality, speed, and resilience
goyoki
4
740
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
350
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
630
Result型で“失敗”を型にするPHPコードの書き方
kajitack
5
610
Node-RED を(HTTP で)つなげる MCP サーバーを作ってみた
highu
0
120
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
12
3.1k
0626 Findy Product Manager LT Night_高田スライド_speaker deck用
mana_takada
0
160
A2A プロトコルを試してみる
azukiazusa1
2
1.3k
LINEヤフー データグループ紹介
lycorp_recruit_jp
1
2.4k
GraphRAGの仕組みまるわかり
tosuri13
8
530
Featured
See All Featured
Practical Orchestrator
shlominoach
188
11k
A Tale of Four Properties
chriscoyier
160
23k
Fireside Chat
paigeccino
37
3.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
950
Unsuck your backbone
ammeep
671
58k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Raft: Consensus for Rubyists
vanstee
140
7k
Designing for Performance
lara
610
69k
Building an army of robots
kneath
306
45k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
It's Worth the Effort
3n
185
28k
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
ΤϯδχΞେืूʂ ΦϑϥΠϯʹΔະղܾͷ՝Λൃݟ͠ɺ ͦͷ՝ΛΠϯλʔωοτςΫϊϩδʔͰղܾ͍ͨ͠ΤϯδχΞ Λืूͯ͠·͢ʂ গ͠ͰڵຯΛ࣋ͬͨํɺҿ৯ͷαʔϏεʹؔΘΓ͍ͨํɺ ੋඇ͓͠͠·͠ΐ͏ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ