$30 off During Our Annual Pro Sale. View Details »

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

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

NakanishiTetsuhiro

October 12, 2019
Tweet

More Decks by NakanishiTetsuhiro

Other Decks in Technology

Transcript

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

    View Slide

  2. ࣗݾ঺հ
    • த੢ ఩େʢͯͭʣ@kaoru6strings
    • גࣜձࣾRe:Buildॴଐ
    • Laravel + Nuxt.jsͰ࢓ࣄΛ͍ͯ͠·͢
    • झຯɿԻָɺΪλʔɺόϯυ

    View Slide

  3. ٕज़ؔ࿈ͷεΩϧηοτ
    Ͱ͖Δ ͪΐͬͱͰ͖Δ ษڧத
    ϑϩϯτΤϯυ
    +4
    7VFKT
    /VYUKT
    K2VFSZ
    όοΫΤϯυ
    -BSBWFM
    3VCZPOSBJMT
    1ZUIPO
    Πϯϑϥ
    %PDLFS
    -JOVY
    "84
    7JSUVBM#PY 7BHSBOU
    .BDLFSFM
    ,VCFSOFUFT
    ($1

    View Slide

  4. ຊεϥΠυͱαϯϓϧίʔυ͸
    طʹެ։͞Ε͍ͯ·͢
    • αϯϓϧίʔυ
    • https://github.com/NakanishiTetsuhiro/php-conf-okinawa-2019

    View Slide

  5. ઃܭͱ͸ʁ
    Powered by Google

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. ͜Θ͍…

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. ϦϑΝΫλϦϯάޙ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  30. ৼΓฦͬͯΈΔ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. ݱ࣮ੈքͰLaravelΛߟ͑ͯΈΔ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide