Pro Yearly is on sale from $80 to $50! »

Laravelで設計する際の ベストプラクティスを探る

Laravelで設計する際の ベストプラクティスを探る

06eac74c79982646011109881f1d6996?s=128

NakanishiTetsuhiro

October 12, 2019
Tweet

Transcript

  1. LaravelͰઃܭ͢Δࡍͷ ϕετϓϥΫςΟεΛ୳Δ גࣜձࣾRe:Build ͯͭ (Twitter: @kaoru6strings) 2019೥10݄12೔ʢ౔ʣ PHPΧϯϑΝϨϯεԭೄ 2019 https://phpcon.okinawa.jp/

  2. ࣗݾ঺հ • த੢ ఩େʢͯͭʣ@kaoru6strings • גࣜձࣾRe:Buildॴଐ • Laravel + Nuxt.jsͰ࢓ࣄΛ͍ͯ͠·͢

    • झຯɿԻָɺΪλʔɺόϯυ
  3. ٕज़ؔ࿈ͷεΩϧηοτ Ͱ͖Δ ͪΐͬͱͰ͖Δ ษڧத ϑϩϯτΤϯυ +4  7VFKT /VYUKT 

    K2VFSZ όοΫΤϯυ -BSBWFM  3VCZPOSBJMT 1ZUIPO Πϯϑϥ %PDLFS  -JOVY  "84  7JSUVBM#PY 7BHSBOU .BDLFSFM ,VCFSOFUFT ($1
  4. ຊεϥΠυͱαϯϓϧίʔυ͸ طʹެ։͞Ε͍ͯ·͢ • αϯϓϧίʔυ • https://github.com/NakanishiTetsuhiro/php-conf-okinawa-2019

  5. ઃܭͱ͸ʁ Powered by Google

  6. ຊηογϣϯ͕໨ࢦ͢ʮྑ͍ઃܭʯͷఆٛ • มߋʹڧ͍ίʔυͰ͋Δ͜ͱ • ϓϩδΣΫτͱແؔ܎ͳಡΈख͕ɺಡΈ΍͍͢ίʔυ͋Δ͜ͱ • ϏδωεαΠυɺσϕϩούʔɺαʔϏεར༻ऀ͕3ํྑ͠Ͱ͋ Δ͜ͱ

  7. ຊ౰ʹ͋ͬͨා͍࿩ ʢϑΟΫγϣϯͰ͢ʣ

  8. ͱ͋ΔϓϩδΣΫτͰͷ͜ͱͩͬͨ… • ίϯτϩʔϥʔʹ΄΅શͯͷॲཧ͕ॻ͔Ε͍ͯΔ • ܗ֚Խͨ͠ϦϙδτϦύλʔϯ • ແବʹSlackʹు͖ग़͞Εଓ͚ΔΤϥʔ௨஌

  9. ͜Θ͍…

  10. ͳͥਏ͍ͷ͔… • ॏཁͳܾࡁͷॲཧ͕ίϯτϩʔϥʔ΁هड़͞Ε͍ͯΔ • ίϐϖίʔυ͕େྔʹൃੜ͍ͯͨ͠ • ॏཁͳόά͕ى͖ͨΤϥʔ௨஌Λ୭΋ؾʹ͠ͳ͘ͳ͍ͬͯͨ

  11. ࠓ೔͸͍ͭ͜Λ ϦϑΝΫλϦϯά͍͖ͯ͠·͢

  12. STEP 1 ϦϙδτϦύλʔϯͷഉআ

  13. Repositoryύλʔϯͷ֓ཁ • DB΁ΞΫηε͢ΔͨΊͷෳࡶͳΫΤϦΛӅṭͰ͖Δ • σʔλૢ࡞ͷ࣮ࡍͷํ๏ΛӅṭͰ͖Δ • σʔλͷετΞઌ͕มΘͬͨ৔߹ͷվम͕༰қ • ྫɿDBΤϯδϯΛMySQL͔ΒPostgres΁มߋ

  14. RepositoryύλʔϯΛഉআͨ͠ཧ༝ • RepositoryύλʔϯΛཧղ͠࢖͍͜ͳͤΔϝϯόʔ͕গͳ͔ͬͨ • ෳ਺ͳΫΤϦ͕͋·Γଘࡏ͠ͳ͍ • DBͷΤϯδϯ͕·Δ·ΔೖΕସΘΔ৔໘͸ߟ͑ʹ͍͘

  15. ϦϑΝΫλϦϯά͢Δલ

  16. ϦϑΝΫλϦϯάޙ

  17. STEP 2 ServiceΫϥεͱ Ϟσϧ΁ॲཧΛಀ͕͢

  18. Service΁ಀ͕͢ॲཧ • ίϯτϩʔϥ͸σʔλͷड͚౉͠Λ୲͏ΫϥεͳͷͰϏδωεϩ δοΫ͸ؙʑServiceΫϥε΁Ҡߦ • Controller -> Service -> Model(Eloquent)

    ͷྲྀΕΛҙࣝ͢Δ
  19. Model΁ಀ͕͢ॲཧ • ࣗ෼Ҏ֎ͷModelʹؔ࿈ੑ͕ͳ͍ॲཧΛModelʹҠಈ • ྫ1ɿΧʔτͷத਎Λͱͬͯ͘Δॲཧ • ྫ2ɿϢʔβʔͷੜ೥݄೔Λऔಘ͢Δॲཧ

  20. ϦϑΝΫλϦϯάલʢίϯτϩʔϥʔʣ

  21. ϦϑΝΫλϦϯάޙʢίϯτϩʔϥʔʣ

  22. ϦϑΝΫλϦϯάޙʢServiceΫϥεʣ

  23. ϦϑΝΫλϦϯάޙʢServiceΫϥεʣ

  24. ϦϑΝΫλϦϯάޙʢServiceΫϥεʣ

  25. ϦϑΝΫλϦϯάޙʢCartΫϥεʣ

  26. STEP 3 ྫ֎ॲཧΛద੾ʹ࢓ֻ͚Δ

  27. ྫ֎ॲཧ͸Ͳ͏͢Δʁ • ෆཁͳtry-catchΛ࡟আ • ෆ໌ͳΤϥʔ͕ى͖ͨͱ͖ɺ։ൃऀʹ௨஌Λ͠ɺϢʔβʔʹ͸Τ ϥʔ෼Λฦ͢ॲཧΛଓߦ͢ΔΑ͏ʹ͢Δ

  28. ϦϑΝΫλϦϯάޙʢOrderServiceΫϥεʣ

  29. ϦϑΝΫλϦϯάޙʢPaymentServiceΫϥεʣ

  30. ৼΓฦͬͯΈΔ

  31. ຊηογϣϯͰʮྑ͍ઃܭʯΛୡ੒Ͱ͖͔ͨ • ίϯτϩʔϥ͔ΒϏδωεϩδοΫΛ෼཭ͨ͠ • ෼཭ͨ͠ίʔυ͸ServiceΫϥεɺModelʹৼΓ෼͚ͨ 1. มߋʹڧ͍ίʔυͰ͋Δ͜ͱ

  32. ຊηογϣϯͰʮྑ͍ઃܭʯΛୡ੒Ͱ͖͔ͨ • ҰൠతͳσβΠϯύλʔϯΛऔΓೖΕΔ͜ͱͰΤϯδχΞಉ͕࢜ ίϛϡχέʔγϣϯΛͱΓ΍͍͢ίʔυʹ͢Δ͜ͱ͕Ͱ͖ͨ • ϓϩδΣΫτͷن໛ʹԠͯ͡࢖͏σβΠϯύλʔϯΛߜΔ͜ͱͰ γϯϓϧͳίʔυʹ͢Δ͜ͱ͕Ͱ͖ͨ 2. ϓϩδΣΫτͱແؔ܎ͳಡΈख͕ɺಡΈ΍͍͢ίʔυ͋Δ͜ͱ

  33. ຊηογϣϯͰʮྑ͍ઃܭʯΛୡ੒Ͱ͖͔ͨ • ϏδωεαΠυ: • มߋʹڧ͍ίʔυʹ͢Δ͜ͱͰɺϏδωεαΠυͷཁٻʹ ૉૣ͘ରԠͰ͖ΔΑ͏ʹͳͬͨ • σϕϩούʔ: • ಡΈ΍͍͢ίʔυʹ͢Δ͜ͱͰ͜Ε͔Βͷ࣮૷ΛָʹͰ͖ͨ

    • ར༻ऀ: • ίʔυΛ੔ཧ͢Δ͜ͱͰόάΛগͳ͘͢Δ͜ͱ͕Ͱ͖ͨ 3. ϏδωεαΠυɺσϕϩούʔɺར༻ऀ͕3ํྑ͠Ͱ͋Δ͜ͱ
  34. ݱ࣮ੈքͰLaravelΛߟ͑ͯΈΔ

  35. େاۀʹ͓٬͞Μ͕དྷͨʢϦϑΝΫλલʣ ड෇ ͓٬͞Μ ސ٬৘ใ

  36. େاۀʹ͓٬͞Μ͕དྷͨʢϦϑΝΫλޙʣ ड෇ Ӧۀ෦ ͓٬͞Μ ސ٬৘ใ

  37. Laravelͷ໾ׂͰ໊લΛ͚ͭΔͱ͜Μͳײ͡ $POUSPMMFS 4FSWJDF $MBTT )5513FRVFTU &MPRVFOU

  38. ॴײ • σβΠϯύλʔϯ͚ͩΛͨͩೖΕΔͷ͸΍ΊΑ͏ • ద౰ʹྫ֎ॲཧΛೖΕΔͷ͸΍ΊΑ͏ • Πϝʔδ͕͔ͭͳ͍ਓ͸ݱ࣮ੈքͷॲཧʹམͱ͠ࠐΜͰߟ͑ͯΈΑ͏

  39. ࢀߟॻ੶ɾ͓͢͢Ίॻ੶

  40. ࢀߟॻ੶ɾ͓͢͢Ίॻ੶

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