Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Laravel × オニオンアーキテクチャで始めるテスト駆動開発

Laravel × オニオンアーキテクチャで始めるテスト駆動開発

PHP Conference 2020
トラック4-3での発表スライドです。

51ae114c2809ff0d2945c751efa7cffc?s=128

kazuma.murata

December 12, 2020
Tweet

Transcript

  1. ଜాओຏ -BSBWFMºΦχΦϯΞʔΩςΫνϟ Ͱ࢝ΊΔςετۦಈ։ൃ 1)1$POGFSFODF

  2. ஫ҙॻ͖ w ೖ໳޲͚ͷ಺༰Ͱ͢ w ࠓճ࿩͢ΦχΦϯΞʔΩςΫνϟ͸ɺख๏Λઆ໌͢Δ্Ͱͷૉࡐఔ౓ͱͯ͠ ͝ཧղ͍ͩ͘͞ɻͳ͓ɺ঺հ͢Δ಺༰͸ଞͷΞʔΩςΫνϟͰ΋ྲྀ༻Ͱ͖· ͢ɻ w εϥΠυ͸%JTDPSE USBDLBMBSBWFMPOJPO

    Ͱڞ༗͠·͢ɻ w ίʔυͷจࣈαΠζ͕গ͠খ͍͞ͷͰɺखݩʹεϥΠυΛ༻ҙͯ͠Έ͍ͯͨͩ ͚ΔͱΑΓݟ΍͍͔͢ͱࢥ͍·͢ɻ
  3. ຊτʔΫͰ࿩͢͜ͱ࿩͞ͳ͍͜ͱ w ࿩͢͜ͱ w ιϑτ΢ΣΞઃܭͱ୯ମςετͷಋೖ࿩ w 5%%ͷखॱ w -BSBWFMͰςετΛॻ͘ɾϨΠϠʔΛ੾ΔͨΊͷख๏ͷ঺հͱ࢖͍ํ w

    ࿩͞ͳ͍͜ͱ w ΦχΦϯΞʔΩςΫνϟͷϕετϓϥΫςΟε w 5%%ʹؔ͢ΔϕετϓϥΫςΟε w ιϑτ΢ΣΞઃܭͷਂ͍࿩
  4. ࣗݾ঺հ w ଜాओຏ w גࣜձࣾ4IPXDBTF(JH γϣʔέʔεΪάʣ w ୲౰όοΫΤϯυΤϯδχΞ w ؼΓಓͰԻήʔ΍Γ͕ͪ

    w 5XJUUFS!DBOPOLZ
  5. ୯ମςετΛॻ͘ར఺ w ςετ͍ͨ͠ՕॴͷΈΛґଘ͢Δଞͷ৔ॴͱ੾Γ཭ͯ͠ݕূͰ͖Δ w ྫ֎ॲཧ΍ࡉ͔͍෼ذͳͲͷςετ͕ߦ͍΍͍͢ w ࣮૷Օॴ͕Ͳ͏ಈ͘΂͖͔Λɺ࣮૷࣌ʹλΠϜϦʔʹݕূͰ͖Δ w ߴ଎ʹςετ࣮ߦΛߦ͑ΔͨΊɺଟ͘ͷݕূΛߦͬͯ΋࣮ߦ͕࣌ؒ୹Ί

  6. ͳͥιϑτ΢ΣΞઃܭ͕େ੾ͳͷ͔ ςετʹয఺Λ౰ͯͨ৔߹ w ෳ਺ͷ੹຿͕ूத͢ΔͱείʔϓΛߜͬͯςετ͢Δ͜ͱ͕Ͱ͖ͳ͍ w %#΁ͷσʔλग़͠ೖΕ w ֎෦"1*ͷݺͼग़͠ w ۀ຿ϞσϧͷՃ޻ɺܭࢉɺ൑அ

  7. ςετ͕͠ʹ͍͘ྫ ෳ਺ͷ੹຿͕ͭͷϞδϡʔϧʹೖ͍ͬͯΔ 3%#ʹΫΤϦΛඈ͹͢ ۀ຿ϩδοΫ ϦΫΤετύϥϝʔλऔಘ Ϩεϙϯεฦ٫

  8. ςετ͕͠΍͍͢ྫ ੹຿͝ͱʹϞδϡʔϧΛ෼ׂ 3%#ʹΫΤϦΛඈ͹͢ Ϟδϡʔϧ ϦΫΤετϨεϙϯεͱ ۀ຿ॲཧͰѻ͏஋ͷม׵Λߦ͏ Ϟδϡʔϧ

  9. ΦχΦϯΞʔΩςΫνϟ Ҿ༻IUUQTRJJUBDPNMJUUMF@IBOE@TJUFNTGCBECGD ϙΠϯτۀ຿ॲཧͰ͋Δ"QQMJDBUJPO4FSWJDF͕*OGSBTUSVDUVSFͰ͋Δ%#ʹґଘ͠ͳ͍

  10. ྫ୊ w ຊΛ؅ཧ͢ΔΞϓϦέʔγϣϯ w ຊ͸CPPLϞσϧͱͯ͠දݱ͞ΕɺԼهͷ஋Λ࣋ͭ w *% λΠτϧ ஶऀ*% w

    1045CPPLT"1*Λୟ͘ͱɺຊ͕ొ࿥͞ΕΔ w *%͸ࣗಈ࠾൪ w ଘࡏ͠ͳ͍ஶऀ*%Λࢦఆͨ͠৔߹͸ɺ/PU'PVOE
  11. Ϋϥεͱґଘํ޲ 6* 1SFTFOUBUJPO "QQMJDBUJPO4FSWJDF *OGSBTUSVDUVSF %PNBJO.PEFM &OUJUZ ۀ຿ॲཧ σʔλͷശ *OUFSGBDF

    ۀ຿Ͱ࢖͏Ϟσϧ &MPRVFOUΛ࢖ͬͨσʔλͷശ %PNBJO4FSWJDF
  12. ֤Ϋϥεͷ໾ׂ w #PPL$POUSPMMFSϦΫΤετΛड͚औΓɺ#PPL6TFDBTFʹॲཧΛґཔͯ͠Ϩ εϙϯε w #PPL6TFDBTFۀ຿ͷखଓ͖ɻ"VUIPS3FQPTJUPSZʹ"VUIPS*%ͷஶऀ͕ଘࡏ ͢Δ͔໰͍߹Θͤɺஶऀ͕͍Ε͹ຊΛ࡞੒ͯ͠#PPL3FQPTJUPSZʹอଘ͢Δɻ w "VUIPS3FQPTJUPSZ *OUFSGBDF

    "VUIPSΛӬଓԽ͓ͯ͘͠ശ w #PPL3FQPTJUPSZ *OUFSGBDF #PPLΛӬଓԽ͓ͯ͘͠ശ w "VUIPS#PPLґଘͷ࠷্ҐͱͳΔϞσϧ
  13. ςετۦಈ։ൃͷखॱ  ςετΛॻ͘  ࣦഊ͢ΔίʔυΛॻ͘  ੒ޭ͢ΔίʔυΛॻ͘  ϦϑΝΫλϦϯά͢Δ

  14. &OUJUZ .PEFM ࣮૷ ۀ຿ॲཧͰ࢖͏ ΦϒδΣΫτ -BSBWFMͷ.PEFMΛ࢖Θͣɺ ϑϨʔϜϫʔΫʹґଘͤ͞ͳ͍

  15. 3FQPTJUPSZ *OUFSGBDF ఆٛ σʔλΛग़͠ೖΕ͢ΔͨΊͷശ อଘઌ͸Ͳ͜Ͱ΋ྑ͍͕ɺ ʮ͜͏͍͏΍ΓํͰσʔλΛอଘͨ͠ΓऔΓग़ͯ͠Ͷʯͱ͍͏એݴ

  16. མͪΔ6TF$BTFςετ࣮૷ ςετΛམͱͨ͢Ίʹ /VMMΛฦͯ͠ΈΔ 6TF$BTFΛݺͿͱɺ ࡞੒͞Εͨຊ͕ฦͬͯ͘Δ ຊΛ࡞੒ͯ͠%#ʹอଘ͢Δ ۀ຿ॲཧΛߦ͏Ϋϥε

  17. ςετ࣮ߦ ςετ͕ಈ͖ɺ མ͍ͪͯΔ͜ͱΛ֬ೝ

  18. ςετ͕མͪΔͱ͜Ζ·Ͱ֬ೝͰ͖ͨΒ  ৽͍͠ຊ͕อଘ͞Εͨ͜ͱ͕ςετ͞ΕΔΑ͏ʹॻ͖଍͢  σʔλग़͠ೖΕͷৼΔ෣͍ΛϞοΫͰςετ  ςετ͕௨ΔΑ͏ʹ௚͢

  19. ϞοΫΦϒδΣΫτ ґଘઌΦϒδΣΫτͷ୅ସ w ςετର৅͕ґଘ͢ΔΫϥεͷಈ࡞Λఆٛɺݕূ͢ΔͨΊͷΦϒδΣΫτ w ςετର৅ͷΫϥε͕ґଘ͢ΔΫϥεΛϞοΫͰࠩ͠ସ͑Δ w ଞͷΫϥεʹґଘ͍ͯ͠ΔΫϥεͷςετΛ༰қʹߦ͏͜ͱ͕Ͱ͖Δ

  20. ϞοΫΦϒδΣΫτ .PDLFSZ w -BSBWFMͰ͸.PDLFSZͱ͍͏ϥΠϒϥϦ͕ඪ४Ͱ༻ҙ͞Ε͍ͯΔ w ґଘઌΫϥεͷؔ਺ݺͼग़͠ͷҾ਺ͷςετ w ґଘઌΫϥεͷؔ਺ݺͼग़͠ճ਺ͷςετ w ґଘઌΫϥεͷؔ਺ͷฦΓ஋ΛఆٛͳͲ

  21. 6TF$BTF5FTU࣮૷ ଓ͖ ஶऀ*%ͰஶऀΛ%#͔Βऔಘ͢ΔৼΔ෣͍͕ߦΘΕɺ ஶऀ໊NVSBUBͷஶऀ͕ฦ͞ΕΔ ࢦఆ͞Εͨஶऀ*%ͱλΠτϧͰɺ %#ͷຊͷ৽ن࡞੒ॲཧ͕౓͚ͩݺ͹ΕΔ ฦΓ஋͕৽ن࡞੒͞ΕͨຊͰ͋Δ 6TF$BTFʹ͸ৼΔ෣͍Λఆٛͨ͠3FQPTJUPSZΛ ֎͔Β஫ೖ %*

  22. 6TF$BTF࣮૷ ଓ͖ 6TF$BTFͰ͸֎͔Β஫ೖ͞Εͨ3FQPTJUPSZΛ ࢖༻͢Δ

  23. ࣮ՔಇͰ͸%#·Ͱܨ͙3FQPTJUPSZͲ͏͢Δͷ

  24. 3FQPTJUPSZ4FSWJDF1SPWJEFS ΠϯλʔϑΣʔε͕஫ೖ͞Εͨ࣌ɺ ࣗಈͰ஫ೖ͞ΕΔ࣮ଶͷΫϥεࢦఆͰ͖Δ ґଘؔ܎ͷҰ൪֎ଆʹ͋Δɺ JOGSBTUSVDUVSFͷΫϥεΛ͜͜Ͱ஫ೖ

  25. &MPRVFOU3FQPTJUPSZςετ࣮૷ #PPL $SFBUFͨ͠Β %#ʹࢦఆͨ͠Ϩίʔυ͕อଘ͞Ε͍ͯΔ͔ ςετ ෳ਺ճ$SFBUFͨ͠Β *%͕"VUP*ODSFNFOU͞Ε͍ͯΔ͔ςετ

  26. &MPRVFOU3FQPTJUPSZ࣮૷ #PPL ͜͜Ͱ-BSBWFMͷ.PEFMΛ࢖༻ 3FQPTJUPSZ4FSWJDF1SPWJEFSͰ͜ͷΫϥεΛ஫ೖ͢ΔͨΊɺ 6TF$BTF͕-BSBWFMͷ.PEFMʹґଘ͠ͳ͍ܗʹͳΔ -BSBWFMͷ.PEFMΛΤϯςΟςΟʹ٧Ίସ͑

  27. &MPRVFOU3FQPTJUPSZςετ࣮૷ "VUIPS ࢦఆͨ͠*%ͷϨίʔυ͕طʹ%#ʹଘࡏͨ͠৔߹ɺ ΤϯςΟςΟʹม׵͞Εͯฦ͞ΕΔ͜ͱΛςετ ࢦఆͨ͠*%ͷϨίʔυ͕%#ʹଘࡏ͠ͳ͍৔߹ɺ /VMM͕ฦ͞ΕΔ͜ͱΛςετ

  28. 'BDUPSZ࣮૷ "VUIPS 'BDUPSZύλʔϯΛ౿ऻͨ͠ -BSBWFMඪ४ͷ࢓૊Έ ਺े݅σʔλΛ·ͱΊͯ༻ҙͨ͠Γɺ ಛఆͷΧϥϜΛϥϯμϜจࣈྻ΍ϥϯμϜ੔਺ͰఆٛͰ͖Δ

  29. &MPRVFOU3FQPTJUPSZ࣮૷ "VUIPS ͜͜Ͱ-BSBWFMͷ.PEFMΛ࢖༻ -BSBWFMͷ.PEFMΛΤϯςΟςΟʹ٧Ίସ͑

  30. 'PSN3FRVFTU5FTU࣮૷ ϦΫΤετύϥϝʔλ͕ਖ਼ৗͷ৔߹͸WBMJE λΠτϧ͕ۭͷ৔߹͸JOWBMJE -BSBWFMඪ४ͷ'PSN3FRVFTUΛ࢖༻

  31. 'PSN3FRVFTU࣮૷ ϦΫΤετύϥϝʔλͷϧʔϧΛఆٛ

  32. $POUSPMMFSςετ࣮૷ -BSBWFMͰ͸ςετͰ "1*Λୟ͘৔߹Ͱ΋ɺ ґଘ͢Δ΋ͷΛ֎෦஫ೖͰ͖Δ 6TF$BTFͷॲཧ͕੒ޭ͢Δͱ 6TF$BTF͔Β/PU'PVOEྫ֎͕ ు͔ΕΔͱ

  33. $POUSPMMFS࣮૷ 6TF$BTF΁ॲཧΛґཔͯ͠ ϦΫΤετϨεϙϯεͷ٧Ίସ͑ ίϯετϥΫλΠϯδΣΫγϣϯ ຊ൪Ͱͷ࣮ߦ࣌ʹ͸ɺ-BSBWFMͰ͸ࣗಈͰґଘઌ ΦϒδΣΫτ͕ੜ੒͞ΕΔ

  34. ςετ

  35. ͍͞͝ʹ w -BSBWFMͰςετۦಈͰ։ൃ͢Δํ๏Λઆ໌͠·ͨ͠ w ੹຿͝ͱʹ࣮૷Λ෼͚ͯςετ͠΍͍͢ίʔυΛॻ͖·͠ΐ͏ w .PDLFSZΛ࢖ͬͯࡉ͔͍ύʔπ͝ͱʹςετΛͯ͠Έ·͠ΐ͏

  36. גࣜձࣾ4IPXDBTF(JH ϛογϣϯ ೔ৗͷফඅʹ༹͚ࠐΉςΫϊϩδʔʹΑΓੜ׆Λ޲্ͤ͞Δ͜ͱ

  37. ϓϩμΫτ ళ಺޲͚ϞόΠϧɾςʔϒϧΦʔμʔαʔϏεɻ ͓٬༷͕ࣗ෼ͷεϚϗͰ஫จ͠ɺ઀٬ελοϑ͸ଞͷαʔϏεʹूதɻ ͜Ε͔Βͷҿ৯ళͷʮ͋ͨΓ·͑ʯΛ೔ʑ։ൃத

  38. ࢖༻ٕज़ ͳͲͳͲ "84'BSHBUF ,VCFSOFUFT

  39. ΤϯδχΞେืूʂ ΦϑϥΠϯʹ຾Δະղܾͷ՝୊Λൃݟ͠ɺ ͦͷ՝୊ΛΠϯλʔωοτςΫϊϩδʔͰղܾ͍ͨ͠ΤϯδχΞ Λืूͯ͠·͢ʂ গ͠Ͱ΋ڵຯΛ࣋ͬͨํɺҿ৯ͷαʔϏεʹؔΘΓ͍ͨํɺ ੋඇ͓࿩͠͠·͠ΐ͏ɻ

  40. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ