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

SymfonyとDoctrineで
簡単クリーンアーキテクチャ

 SymfonyとDoctrineで
簡単クリーンアーキテクチャ

2021/10/02, 03に開催されてPHP Conference Japan 2021の登壇でお話ししたスライドです。

#phpcon2021 #phpcon #php

Ippei Sumida

October 03, 2021
Tweet

More Decks by Ippei Sumida

Other Decks in Programming

Transcript

  1. • Symfony+DoctrineͰΫϦʔϯΞʔΩςΫνϟͳ࣮Ҋ݅Λ΍ͬͨΑ • Symfony, Doctrine, ΫϦʔϯΞʔΩςΫνϟ௒֓ཁ • ͳʹΛͲͷΑ͏ʹ࡞͍͔ͬͯͬͨ • Symfony,

    Doctrine, ΫϦʔϯΞʔΩςΫνϟ·ͰͷOOP • ৄࡉͳίʔυͷઆ໌ ↑͓࿩͠͠·͢ ↓ׂѪ͠·͢ ࠓ೔͓͸ͳ͢͠Δ಺༰
  2. ؆୯ͳΫϦʔϯΞʔΩςΫνϟͷઆ໌ • ґଘํ޲Λ಺෦ʹ޲͔͏Α͏ʹ޲͚ͯͶ • ҎԼͷ༷ʹ࣮૷Λ৺͕͚ΔͱΑ͍Α • EntitiesʢԫʣʹυϝΠϯϞσϧΛ • Use Casesʢ੺ʣʹۀ຿ͷػೳཁ݅Λ

    • Controllersʢ྘ʣʹӬଓԽͱೖग़ྗΛ • Devices / DB / UIʢ੨ʣʹٕज़తͳԼࢧ͑΍ϑϩϯτΤϯυΛ • ্هͷ࡞ΓํΛνʔϜͰҙࣝͯ͠࡞ΔͱΈΜͳ͕޾ͤͩΑ • มʹݻࣥ͠ͳ͍Α͏ʹ͖Λ͚ͭͯͶ
  3. ͳͥSymfony + DoctrineΛબΜ͔ͩ • ཁٻ͕ΦϒδΣΫτΛෳ਺ίϯςΩετͰฤू͠Α͏ͱͯ͠Δ • ActiveRecordͩͱΫϥε͕ංେͯͪ͠ΐͬͱେม͔΋͠Εͳ͍ • Doctrine ͸

    Data Mapper ܕͷ ORM →ϑϨʔϜϫʔΫͱಠཱͨ͠ϥΠϒϥϦ͔ͩΒ →Entity ͕ POPO ͳͷͰҙਤͤͣDB͕ಈ͘৺഑͕ͳ͍ • ΦʔτϫΠϠϦϯάͰඞཁͳΫϥεΛࣗಈͰ஫ೖͰ͖Δ • ඞཁʹͳͬͨ࣌఺ͰɺػೳΛίϯϙʔωϯτͱͯ͠ΠϯετʔϧͰ͖Δ
  4. Data Mapper ܕ v.s. Active Record ܕ id=1 id=4 id=1

    id=4 id=4 id=1 id=1 id=1 id=4 ࢀর ίϐʔ ૢ࡞ ૢ࡞ ϏδωεϩδοΫ ->save() -> f lush() ஗Ԇ ϑΣον Entity Manager ಉظ ->save() ->save() ίϯτϩʔϥʔ ΫΤϦ͝ͱʹҟͳΔΠϯελϯεੜ੒ɻ ΠϯελϯεʹҰҙੑ͕ͳ͍ɻ != Entity DB ࣮ମ͕ͳ͍ͱ੔߹ੑ͕੒Γཱͨͳ͍ɻ ϏδωεϩδοΫ͕ʮDBอଘʯ੹຿Λ࣋ͭɻ ͢΂ͯͷ Entity ͸Ծ૝తʹΦϯϝϞϦͰ ଍Γͳ͍΋ͷ͚ͩΛ஗ԆϑΣονɻ Repository ͸ࢀরΛఏڙ͢Δ͚ͩɻ ϏδωεϩδοΫ͸OOP͚ͩͰ׬݁͢Δɻ ࠩ෼SQLੜ੒
  5. Symfony ͷΦʔτϫΠϠϦϯά • ΦʔτϫΠϠϦϯά = DI ͷઃఆʹొ৔͠ͳ͍Φϒ δΣΫτͰ΋ɺܕએݴʹ߹͏ΦϒδΣΫτΛࣗಈత ʹ஫ೖͯ͠ੜ੒͢Δػೳ •

    Laravel ͳͲଟ͘ͷ PHP จԽͰ͸ʮఆٛ͞Εͨ΋ͷ ͷத͔Βదͨ͠΋ͷʯΛ஫ೖ͢Δ͜ͱ • Symfony ͷ৔߹ɺݸผఆ͍ٛͯ͠ͳ͍ΫϥεͰ΋஫ ೖ͢ΔΦϒδΣΫτʹͳΕΔ!! • → ஫ೖʮ͞ΕΔଆʯͱʮ͢Δ΋ͷʯͷ۠ผ͕ෆཁͳ ͷͰɺؾܰʹґଘΛνΣʔϯ͢Δઃܭ͕Ͱ͖Δ ͜͜ʹ͋ΔΫϥε͸ (ྫ֎Λআ͍ͯ) ͥΜͿ ࣗಈͰґଘղܾͨ͠Ζ
  6. Symfony CLI ͍Ζ͍Ζ࡞ۀͷ͓ख఻͍ • symfony ( php | pecl |

    composer | console … ) 
 .php-versionͰࢦఆͨ͠PHPͷόʔδϣϯͰίϚϯυΛ࣮ߦ 
 ෳ਺όʔδϣϯͷPHP͕ೖ͍ͬͯΔ࣌ศརʂ • symfony server:start -d 
 ϩʔΧϧWebαʔόʔىಈɻ 
 docker-compose.ymlͷ಺༰͔Β؀ڥม਺Λੜ੒
  7. Symfony CLI + Symfony Console ͍Ζ͍Ζ࡞ۀͷ͓ख఻͍ • symfony console make:”࡞Γ͍ͨ΋ͷ”

    
 ΤϯςΟςΟ΍ɺίϯτϩʔϥʔʢ&ςϯϓϨʔτʣͳͲͷ࡞੒΢Οβʔυ • symfony console doctrine:schema:update —force 
 ΤϯςΟςΟΫϥεͱDBͷࠩҟΛௐ΂ɺςʔϒϧߏ੒Λߋ৽ • Symfony console doctrine:migrations:di ff
 ΤϯςΟςΟΫϥεͱDBͷࠩҟΛௐ΂ɺϚΠάϨʔγϣϯϑΝΠϧΛ࡞੒
  8. ༏ઌ౓௿ ༏ઌ౓ߴ Ϣʔβ࣌ܥྻ اۀొ࿥ ϓϥϯ࡞੒ ϓϥϯҰཡ اۀฤू … اۀ৘ใΛొ࿥ ୅දऀΛొ࿥

    ࢧ෷͍ํ๏Λ 
 ొ࿥ ࣄલϓϥϯ͔Β 
 ࡞੒ ProgramΛ 
 ௥Ճ ΧελϚΠζ 
 ͯ͠࡞੒ ϓϥϯҰཡΛ 
 Ӿཡ ϓϥϯͷৄࡉΛ 
 Ӿཡ اۀ৘ใΛฤू ࢧ෷͍ํ๏Λ 
 ฤू … Twitterͱ࿈ܞ ઈରඞཁ ૣΊʹཉ͍͠ ٸ͗Ͱ͸ͳ͍ ϓϩτ։ൃର৅ ϢʔβΛొ࿥ ୅දऀΛฤू ˞ಛʹॏཁͳՕॴͷΈ
  9. ॳظͷཁٻ࢓༷ʢԾ૝ʣ • ܖ໿๏ਓ͸ࣗ෼ͷ഑৴αΠτͰ഑৴͠์୊ • ऩ࿥ࡁΈͷίϯςϯπ୯ҐΛʰϓϩάϥϜʱͱݺͿ • ϓϩάϥϜΛ഑৴νϟϯωϧͷʰϓϥϯʱʹฒ΂Δ • ഑৴ऀ͸ϓϥϯΛΧελϚΠζͰ͖Δ •

    ഑৴αΠτ͸ϓϥϯΛෳ਺νϟϯωϧઃ͚Δ͜ͱ΋Ͱ͖Δ • ӡӦ͔Βࣄલఆٛ͞Εͨϓϥϯ͕ఏڙ͞ΕΔ • ࢹௌऀΞΫλʔ͸ϓϩάϥϜ୯ମͷΞʔΧΠϒΛ؍Δ͜ͱ͕Ͱ͖Δ ஫: ͏ͦ΍Ͱ
  10. ΫϦʔϯΞΩςΫνϟ͸ந৅ • ͜Ε͚ͩ͸ಡΊ: https://blog.tai2.net/the_clean_architecture.html • > هࣄ๯಄ͷਤ͸ɺ͜ΕΒ (ΦχΦϯ΍ϔΩαΰφϧͳͲ) ͷΞʔΩ ςΫνϟΛ୯Ұͷ֓೦ʹແཧͳ͘౷߹͢ΔࢼΈͰ͋Δɻ

    • ಉ৺ԁͷਤ͸ͨͩͷྫͰ͔͠ͳ͍ɻ 
 ΦχΦϯΞʔΩςΫνϟͱ΄΅ಉ͡ਤ → • ΦχΦϯ/ϔΩαΰφϧ/DCI/… ʹ ۩৅ΞʔΩςΫνϟ • ΫϦʔϯΞʔΩςΫνϟ = ΞʔΩςΫνϟͷσβΠϯύλʔϯ
  11. ΫϦʔϯΞΩςΫνϟ͸഑ஔਤͰ͸ͳ͍ • ༏ΕͨΞʔΩςΫνϟʹڞ௨͢Δಛ௃: ✓ த৺΄ͲϏδωεͷຊ࣭ ✓ ֎प΄Ͳίϯϐϡʔλʔͷࣄ৘ ✓ ૚͸จ຺Λม׵͢ΔΞμϓλʔͩ ✓

    ґଘΛͭͶʹத৺ͷ҆ఆʹ޲͚Δ • ʮ͜ΕͲΜͳΞʔΩςΫνϟʹ΋ৗࣝͳʯ • ʮ΋ͪΖΜ܅Β͕ࣗ෼ͷϓϩμΫτʹ࡞ΔΞʔΩςΫνϟʹ΋΍Ͱʯ