Slide 1

Slide 1 text

PHP Conference Japan 2021 Day2 SymfonyͱDoctrineͰ 
 ؆୯ΫϦʔϯΞʔΩςΫνϟ ʙϓϩτλΠϐϯάʹͦ͜ΫϦʔϯͳTDD͕׆͖ͨ࿩ʙ

Slide 2

Slide 2 text

֯ాɹҰฏ • ޿ౡݝग़਎ɺେࡕ෎ࡏॅ • ϑϦʔϥϯε Webσϕϩούʔ • Symfony Meetup KansaiӡӦ౳ 
 ίϛϡχςΟ׆ಈ΍ͬͯ·͢ WordCamp Osaka 2019 ippei Wapuu sukisuki

Slide 3

Slide 3 text

ͨͳ͔ɹͻͯ͞Δ • ಉ͘͡େࡕͷ PHPer Ͱ͢ • ͜ͱ͹ݚڀॴɾॴ௕ • ͳ͔ͥωοτͱٕज़ࢽͰϚϯΨ Λඳ͍͍ͯ·͢ SoftwareDesign PHP ΧϯϑΝϨϯε௨৴

Slide 4

Slide 4 text

• Symfony+DoctrineͰΫϦʔϯΞʔΩςΫνϟͳ࣮Ҋ݅Λ΍ͬͨΑ • Symfony, Doctrine, ΫϦʔϯΞʔΩςΫνϟ௒֓ཁ • ͳʹΛͲͷΑ͏ʹ࡞͍͔ͬͯͬͨ • Symfony, Doctrine, ΫϦʔϯΞʔΩςΫνϟ·ͰͷOOP • ৄࡉͳίʔυͷઆ໌ ↑͓࿩͠͠·͢ ↓ׂѪ͠·͢ ࠓ೔͓͸ͳ͢͠Δ಺༰

Slide 5

Slide 5 text

͜ͱͷ͸͡·Γ

Slide 6

Slide 6 text

͋͟·͢ʔʂ΍Γ·͢ʔʂ ϓϩτλΠϓͭ͘Δ͓࢓ࣄ͋ΔΜͰ͕͢ɺͲ͏Ͱ͔͢ʁ ͍ͬ͠ΐʹͲ͏Ͱ͔͢ʁ

Slide 7

Slide 7 text

ࠓճͷҊ݅֓ཁʢԾ૝ʣ ϦΞϧλΠϜಈը഑৴αʔϏεͷϓϥοτϑΥʔϜ ར༻اۀA ར༻اۀB AͷϢʔβʔ BͷϢʔβʔ Ϛελʔίϯςϯπ ൪૊දA ൪૊දB ೝূɾ഑৴ ஫: ͏ͦ΍Ͱ

Slide 8

Slide 8 text

͍͟ϓϩτλΠϐϯά ͦͷલʹ

Slide 9

Slide 9 text

։ൃํ਑ͷ૬ஊɺࡦఆ #1

Slide 10

Slide 10 text

Ͱ͢Ͷʔɻ ͱΓ͍͋͑ͣͬͨΜू·Γ·͔͢ʁ

Slide 11

Slide 11 text

·ͣ͸ཁٻ֬ೝ • ͍͍ͨͩͨཁٻΛ֬ೝ • ͦΕΛͲͷΑ͏ͳٕज़ɺํ๏Ͱ࡞͍͔ͬͯ͘૬ஊ

Slide 12

Slide 12 text

֎෦αʔϏεͱ͔ɺԿ࢖͏͔΋Θ͔Βͳ͍Ͱ͢͠Ͷʔ ͍ͬ͡͞ޙͰͲ͏มߋ͞ΕΔ͔Θ͔Μͳ͍ͷͰɺ ͳΔ΂͘ૉͷPHPͰ͔ͨΊ·͠ΐ͏͔ɻ Ͱ͋Ε͹ɺ͜ͷΞʔΩςΫνϟ͍ͬͯΈ·͔͢

Slide 13

Slide 13 text

ΫϦʔϯΞʔΩςΫνϟ ઃܭํ਑͸ Λ࠾༻

Slide 14

Slide 14 text

؆୯ͳΫϦʔϯΞʔΩςΫνϟͷઆ໌ • ґଘํ޲Λ಺෦ʹ޲͔͏Α͏ʹ޲͚ͯͶ • ҎԼͷ༷ʹ࣮૷Λ৺͕͚ΔͱΑ͍Α • EntitiesʢԫʣʹυϝΠϯϞσϧΛ • Use Casesʢ੺ʣʹۀ຿ͷػೳཁ݅Λ • Controllersʢ྘ʣʹӬଓԽͱೖग़ྗΛ • Devices / DB / UIʢ੨ʣʹٕज़తͳԼࢧ͑΍ϑϩϯτΤϯυΛ • ্هͷ࡞ΓํΛνʔϜͰҙࣝͯ͠࡞ΔͱΈΜͳ͕޾ͤͩΑ • มʹݻࣥ͠ͳ͍Α͏ʹ͖Λ͚ͭͯͶ

Slide 15

Slide 15 text

֎ଆ ٕज़Λϓϩάϥϛϯά͢Δͱ͜Ζ ը໘΍ετϨʔδͳͲ ಺ଆ ۀ຿Λϓϩάϥϛϯά͢Δͱ͜Ζ ݴޠʹΑΔ७ਮͳϩδοΫ ͖Ε͍ʹอ͍ͪͨ ґଘํ޲ DIPΛ׆͔ͯ͠಺ଆ͔Β֎ଆ΁ґଘ͠ͳ͍Α͏ʹ use implement 🙅

Slide 16

Slide 16 text

ͳ͖ͥΕ͍ʹอ͍ͪͨʁ • ۀ຿ʹΑٕͬͯज़͕มΘΔͷ͸Α͋͘Δ͜ͱ • ۀ຿ϩδοΫ͕ٕज़ʹґଘ͍ͯ͠Δͱɺٕज़ͷӨڹͰۀ຿ϩδοΫ͕มΘΔ ͜ͱʹͳΔ ۀ຿ϩδοΫ͕ෳࡶʹͳΔݪҼΛݮΒ͍ͨ͠

Slide 17

Slide 17 text

֎ଆ ಺ଆ ϩάΛMySQLʹอଘ ྫɿμʔςΟʔͳϩάอଘ ϩά͸MySQLʹอଘ MySQL ❓

Slide 18

Slide 18 text

֎ଆ ಺ଆ ϩάΛDynamoDBʹอଘ ྫɿμʔςΟʔͳϩάอଘ DynamoDBʹม͑·͢ ۀ຿ϩδοΫΛ 
 मਖ਼͠ͳ͍ͱ͍͚ͳ͍ DynamoDB MySQL ❗❓

Slide 19

Slide 19 text

֎ଆ ϩάΛMySQLʹӬଓԽ ಺ଆ ϩάσʔλΛ࡞੒͢Δ ґଘํ޲ ྫɿΫϦʔϯͳϩάอଘ ϩά͸MySQLʹอଘ

Slide 20

Slide 20 text

֎ଆ ϩάΛDynamoDBʹӬଓԽ ಺ଆ ϩάσʔλΛ࡞੒͢Δ ґଘํ޲ ྫɿΫϦʔϯͳϩάอଘ DynamoDBʹม͑·͢

Slide 21

Slide 21 text

SymfonyͰ͔͢Ͷʔ ͳΔ΂͘ૉͷPHPͰݻΊΔͳΒɺϑϨʔϜϫʔΫ͸

Slide 22

Slide 22 text

όοΫΤϯυ ϑϩϯτΤϯυ

Slide 23

Slide 23 text

ͳͥSymfony+Doctrine?

Slide 24

Slide 24 text

ͳͥSymfony + DoctrineΛબΜ͔ͩ • ཁٻ͕ΦϒδΣΫτΛෳ਺ίϯςΩετͰฤू͠Α͏ͱͯ͠Δ • ActiveRecordͩͱΫϥε͕ංେͯͪ͠ΐͬͱେม͔΋͠Εͳ͍ • Doctrine ͸ Data Mapper ܕͷ ORM →ϑϨʔϜϫʔΫͱಠཱͨ͠ϥΠϒϥϦ͔ͩΒ →Entity ͕ POPO ͳͷͰҙਤͤͣDB͕ಈ͘৺഑͕ͳ͍ • ΦʔτϫΠϠϦϯάͰඞཁͳΫϥεΛࣗಈͰ஫ೖͰ͖Δ • ඞཁʹͳͬͨ࣌఺ͰɺػೳΛίϯϙʔωϯτͱͯ͠ΠϯετʔϧͰ͖Δ

Slide 25

Slide 25 text

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ੜ੒

Slide 26

Slide 26 text

Symfony ͷΦʔτϫΠϠϦϯά • ΦʔτϫΠϠϦϯά = DI ͷઃఆʹొ৔͠ͳ͍Φϒ δΣΫτͰ΋ɺܕએݴʹ߹͏ΦϒδΣΫτΛࣗಈత ʹ஫ೖͯ͠ੜ੒͢Δػೳ • Laravel ͳͲଟ͘ͷ PHP จԽͰ͸ʮఆٛ͞Εͨ΋ͷ ͷத͔Βదͨ͠΋ͷʯΛ஫ೖ͢Δ͜ͱ • Symfony ͷ৔߹ɺݸผఆ͍ٛͯ͠ͳ͍ΫϥεͰ΋஫ ೖ͢ΔΦϒδΣΫτʹͳΕΔ!! • → ஫ೖʮ͞ΕΔଆʯͱʮ͢Δ΋ͷʯͷ۠ผ͕ෆཁͳ ͷͰɺؾܰʹґଘΛνΣʔϯ͢Δઃܭ͕Ͱ͖Δ ͜͜ʹ͋ΔΫϥε͸ (ྫ֎Λআ͍ͯ) ͥΜͿ ࣗಈͰґଘղܾͨ͠Ζ

Slide 27

Slide 27 text

։ൃ؀ڥ ޙʹඞཁʹͳͬͨͷͰ௥Ճ

Slide 28

Slide 28 text

͜͜·Ͱ·ͱΊ • ϓϩτλΠϓΛ࡞Δʹ͋ͨͬͯɺཁٻΛ֬ೝ • ࢖༻͢ΔϞσϦϯάٕ๏ɺϑϨʔϜϫʔΫΛબఆ • ͳΔ΂͘ૉͷPHPͰϏδωεϩδοΫΛ։ൃ͍ͯ͘͜͠ͱΛ֬ೝ

Slide 29

Slide 29 text

ϖΞϓϩͰσϞ։ൃ #2

Slide 30

Slide 30 text

Ͱ͢Ͷʔɻ ͜ͷํ਑ͰͲ͏΍ͬͯ࡞͍͔ͬͯ͘ɺҰ౓ϖΞϓϩ͠·͠ΐ͏͔ɻ

Slide 31

Slide 31 text

։ൃର৅ mapping

Slide 32

Slide 32 text

͔ͤͬ͘ͳΜͰɺΦϯϥΠϯͰ͜Εˢ΍ͬͯΈ·ͤΜʁ

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Symfony CLI + Symfony Console ͍Ζ͍Ζ࡞ۀͷ͓ख఻͍ • symfony console make:”࡞Γ͍ͨ΋ͷ” 
 ΤϯςΟςΟ΍ɺίϯτϩʔϥʔʢ&ςϯϓϨʔτʣͳͲͷ࡞੒΢Οβʔυ • symfony console doctrine:schema:update —force 
 ΤϯςΟςΟΫϥεͱDBͷࠩҟΛௐ΂ɺςʔϒϧߏ੒Λߋ৽ • Symfony console doctrine:migrations:di ff
 ΤϯςΟςΟΫϥεͱDBͷࠩҟΛௐ΂ɺϚΠάϨʔγϣϯϑΝΠϧΛ࡞੒

Slide 35

Slide 35 text

1. ΤϯςΟςΟ࡞੒ উखʹೖΕͯ͘ΕΔ ͋ͬͯ΋ͳͯ͘΋ςετͷಈ࡞ʹ͸ ؔ܎ͳ͍͔Βͦͷ··͍࣍͜͏

Slide 36

Slide 36 text

2. ςετ࡞੒ (PHPUnit) ࢦఆͨ͠಺༰ͰΤϯςΟςΟ͕ 
 ࡞ΒΕΕ͹0,

Slide 37

Slide 37 text

3. Ϣʔεέʔε࡞੒

Slide 38

Slide 38 text

3-a. ςετௐ੔ ύεϫʔυϋογϡԽΛϞοΫ ࢦఆͨ͠಺༰ͰΤϯςΟςΟ͕ 
 ࡞ΒΕΕ͹0,

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

4. WebαʔϏεʹ૊ΈࠐΈ ϧʔςΟϯά ࡞ͬͨϢʔεέʔε

Slide 41

Slide 41 text

5. ϑϩϯτ࡞੒ (TypeScript+JSX)

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Ͱ͢Ͷʔɻ ͳΜ͔͍͚ͦ͏Ͱ͢Ͷɻ

Slide 44

Slide 44 text

͜͜·Ͱ·ͱΊ • ࣮ࡍʹબఆͨ͠΋ͷ͕ػೳ͢Δ͔খ͘͞࡞ͬͯࢼ͢ͱ٢ • ΫϦʔϯΞʔΩςΫνϟΛҙࣝͯ͋͠Δఔ౓Ϋϥε࡞੒ • ͜͜ͰTDDɻ • Ϣʔεέʔεʹରͯ͠ςετΛهड़ • DBʹอଘ͠ͳ͍ͷͰɺEntity͕Ͱ͖Ε͹OK • ϖΞϓϩʹ͸Code with Me͕ศརͰͨ͠

Slide 45

Slide 45 text

Ϩοπϓϩτʂ #3

Slide 46

Slide 46 text

ϓϩτͰ࡞ΔετʔϦʔΛચ͍ग़͠·͠ΐ͏͔

Slide 47

Slide 47 text

ϢʔβʔετʔϦʔϚοϐϯά

Slide 48

Slide 48 text

ϢʔβʔετʔϦʔϚοϐϯάͱ͸ • ϢʔβʔͷετʔϦʔΛ࣌ܥྻͰચ͍ग़͠ɺ༏ઌ౓Λ͚͍ͭͯ͘ • ϓϩδΣΫτࢀըऀશһͰ࣮ࢪ • ࣌ܥྻɾ༏ઌ౓Ͱ੔ཧ͢Δ͜ͱͰɺҎԼΛ೺Ѳ͢Δ • ։ൃॱংʢ·ͣͲ͜ʹ஫ྗ͢Δඞཁ͕͋Δ͔ʣ • ൈ͚࿙Ε͕ͳ͍͔ • ϓϩδΣΫτʹࠐΊͨࢥ͍ʢΊ͋ͯʣ

Slide 49

Slide 49 text

༏ઌ౓௿ ༏ઌ౓ߴ Ϣʔβ࣌ܥྻ اۀొ࿥ ϓϥϯ࡞੒ ϓϥϯҰཡ اۀฤू … اۀ৘ใΛొ࿥ ୅දऀΛొ࿥ ࢧ෷͍ํ๏Λ 
 ొ࿥ ࣄલϓϥϯ͔Β 
 ࡞੒ ProgramΛ 
 ௥Ճ ΧελϚΠζ 
 ͯ͠࡞੒ ϓϥϯҰཡΛ 
 Ӿཡ ϓϥϯͷৄࡉΛ 
 Ӿཡ اۀ৘ใΛฤू ࢧ෷͍ํ๏Λ 
 ฤू … Twitterͱ࿈ܞ ઈରඞཁ ૣΊʹཉ͍͠ ٸ͗Ͱ͸ͳ͍ ϓϩτ։ൃର৅ ϢʔβΛొ࿥ ୅දऀΛฤू ˞ಛʹॏཁͳՕॴͷΈ

Slide 50

Slide 50 text

Γΐ͏͔͍Ͱ͢ʔ Ͱ͸؆୯ͳϞσϦϯά͍͖ͯ͠·͠ΐ͏͔ ·ͣ͸Entityͷચ͍ग़͔͠Βʙ

Slide 51

Slide 51 text

ॳظͷཁٻ࢓༷ʢԾ૝ʣ • ܖ໿๏ਓ͸ࣗ෼ͷ഑৴αΠτͰ഑৴͠์୊ • ऩ࿥ࡁΈͷίϯςϯπ୯ҐΛʰϓϩάϥϜʱͱݺͿ • ϓϩάϥϜΛ഑৴νϟϯωϧͷʰϓϥϯʱʹฒ΂Δ • ഑৴ऀ͸ϓϥϯΛΧελϚΠζͰ͖Δ • ഑৴αΠτ͸ϓϥϯΛෳ਺νϟϯωϧઃ͚Δ͜ͱ΋Ͱ͖Δ • ӡӦ͔Βࣄલఆٛ͞Εͨϓϥϯ͕ఏڙ͞ΕΔ • ࢹௌऀΞΫλʔ͸ϓϩάϥϜ୯ମͷΞʔΧΠϒΛ؍Δ͜ͱ͕Ͱ͖Δ ஫: ͏ͦ΍Ͱ

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

͋ʔͦ͏͔ͦ͏͔ɻ͡Όɺ͜Ε͸εΫϦʔϯͬͯײ͡Ͱ͔͢Ͷʁ ͳΜ͔ཁ๬ͷ༻ޠ͕͔ͭΈͲ͜Ζͳ͍ͳ͋ɻ 
 ͜Εͬͯ΋࣮͠෺͕͋ͬͨΒөըؗΈ͍ͨͳ΋ͷͰʙ ϐϯͱ͖·ͨ͠Ͷʙɻ͜͜͸Ͱ͢Ͷ… ΈΜͳ༻ޠΛ औΓҧ͑Δ

Slide 54

Slide 54 text

࣮ମΛΠϝʔδͰ͖Δ΋ͷʹஔ͖׵͑Δ ※ Մࢉ໊ࢺʹ͢ΔͱΦϒδΣΫτʹ͠΍͍͢

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

͜͜͸؆୯ʹݴ͑͹͜͏͍͏͜ͱͰ͢ΑͶʔ ͜Εͬͯɺཁ͸͜͏͍͏͜ͱͰ͢ΑͶʔʢ࡞੒ͨ͠ਤΛݟͳ͕Βʣ Ͱ͢Ͷʔ ϞσϦϯάͨ݁͠ՌΛશһʹڞ༗ ୭΋ޡղ͠ͳ͘ ͳͬͨ 💯

Slide 57

Slide 57 text

Γΐ͏͔͍Ͱ͢ʔ ͭ͗͸ϢʔεέʔεͷϞσϦϯά͠·͠ΐ͏͔ʔ Ͱ͸ϢʔβʔετʔϦʔϚοϐϯάͷʙ͔ΒखΛ͚ͭ·͠ΐ͏

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

͍͞͠ΐʹͲ͏΍ͬͯ࡞Δ͔࿩͠߹ͬͨͷ͕ޮ͍ͯ·͢Ͷ ͍͞͠ΐʹ૬ஊͯ͠࡞ͬͨϨΠϠʔʹ͋Θ͍ͤͯ͘ͱ͜Μͳײ͡Ͱ͔͢Ͷ Ͱ͸ɺίʔυʹམͱͯ͠Έ·͔͢…

Slide 60

Slide 60 text

өըؗͰձһొ࿥͢Δײ͡Ͱ͢ΑͶʔ Ϣʔβ௥Ճ͢Δͱɺ͜͏ͳΔͬͯ͜ͱͰ͢ΑͶʢ࣮ߦ݁ՌΛݟͳ͕Βʣ Ͱ͢Ͷʔ ίʔυʹམͱͨ݁͠ՌΛશһʹڞ༗

Slide 61

Slide 61 text

Ͱ͢Ͷʔ ͡ΌɺϝʔϧΛૹͬͯɺϢʔβ͕ඞཁͳ৘ใೖྗͨ͠Βొ࿥Ͱ͢Ͷʔ ࣮ࡍ͸ϢʔβʹԾొ࿥ϝʔϧૹΔ͔Μ͡Ͱ͔͢Ͷʔ ೝࣝ߹Θͤͳ͕ΒϒϥογϡΞοϓ͢ΔՕॴΛ֬ೝ

Slide 62

Slide 62 text

ͳͷͰɺϢʔβͷσʔλ͸͜Μͳײ͡Ͱ͓࣋ͬͯ͘ͷͲ͏Ͱ͔͢ʁ ͋ͬɺ΋͔ͨ͠͠Β͜Μͳӡ༻χʔζ΍ 
 ͋Μͳӡ༻χʔζ͕ग़ͯ͘Δ͔΋ɻೝূ͸ΞΫλʔ͝ͱʹ෼͚ͣɺ 
 ΈΜͳڞ௨͕౎߹ྑ͍ͱࢥ͏ΜͰ͕͢Ͳ͏Ͱ͔͢ʁ ͳΔ΄Ͳʔ ࡞੒࣌ͷؾ͖ͮΛϑΟʔυόοΫ

Slide 63

Slide 63 text

ίʔυͷ௥Ճɾมߋɾഁغ͕ଟൃ ࡞੒࣌ͷؾ͖ͮΛϑΟʔυόοΫ ʹ

Slide 64

Slide 64 text

͜͜ͰSymfony + Doctrine͕׆༂!

Slide 65

Slide 65 text

͜͜ͳ Ϣʔεέʔε͸DBอଘॲཧΛ࣋ͨͳ͍ʂ 4BWFΛݺͿ͡Όͳͯ͘ʮಉظ͢ΔʯΠϝʔδɻϢʔεέʔε͸ʮอଘʯΛҙࣝ͠ͳ͍͍͔ͯ͘Β͍͡Γ΍͍͢ɻ

Slide 66

Slide 66 text

ʮςʔϒϧ͔Βʙͳσʔλऔಘ͢Δ͜ͱͳʂʯͰςετͰ͖Δɻ ςετͰͷDBݕࡧ͸ϞοΫͰ୅༻Մʂ

Slide 67

Slide 67 text

Ͱ͢Ͷʔ ίʔυ͔͠৺഑͠ͳ͍͍ͯ͘ͷָɻβΫβΫ΍ͬͪΌ͍·ͨ͠ɻ 
 ͳΜ͔͍͚ͦ͏Ͱ͢Ͷ

Slide 68

Slide 68 text

ϞσϦϯά ςετ࡞Δ ։ൃ ςετௐ੔ ΈΜͳʹڞ༗ɾϑΟʔυόοΫ ʰϞσϦϯάˠڞ༗ʱ Λ܁Γฦͯ͠ɺ 
 ϓϩτΛ࡞੒ σϞɾ׬ྃ

Slide 69

Slide 69 text

͍Ζ͍Ζ͋ͬͨ͜ͱ

Slide 70

Slide 70 text

ϑϩϯτΤϯυͷਓ͕ͳ͔ͳ͔Έ͔ͭΒͳͯ͘…

Slide 71

Slide 71 text

͜ΕɺTwigʹ͍͍ͯ͠Ͱ͔͢Ͷʁ PHPer ͩͦ͠ͷํ͕εϐʔυग़·͢ΑͶɻ 
 Ϣʔεέʔε͸มΘΒͳ͍͠ࢍ੒ʙ

Slide 72

Slide 72 text

όοΫΤϯυ

Slide 73

Slide 73 text

΍Γ͍ͨ͜ͱΑΓ΋ݟͤΔ͜ͱʹ஫ྗ • ૣ͘࡞ͬͯɺૣ͘ϓϩτݟ͍ͤͨͷͰ׳ΕͯΔٕज़ʹγϑτͨ͠ ※ ৔߹ʹΑΔ • Next.jsʢ& TypeScriptʣͷຽͰ͸ͳ͔ͬͨͷͰɺ଎౓͕ࢥ͍ͷ֎ग़ͳ͔ͬͨ ͷ΋͋Δɻ

Slide 74

Slide 74 text

ϢʔεέʔεʹRepositoryʢςʔϒϧʣ͕ͲΜͲΜ͍ࢗͬͯ͘͞ͳʔ…

Slide 75

Slide 75 text

ར༻͢Δςʔϒϧ਺͚ͩҾ਺͕૿͑Δ…

Slide 76

Slide 76 text

ඞཁͳςʔϒϧ͕૿͑Δ͝ͱʹɺมߋ͕ඞཁ ແବʹςετͷमਖ਼͕૿͑ͯ͠·͏…

Slide 77

Slide 77 text

͜Εɺࠓ͸଱͑Ε·͚͢Ͳޙʑ͠ΜͲ͘ͳΓ·͢Ͷʔ ͻΒΊ͍ͨ

Slide 78

Slide 78 text

%BUB4FSWJDF*OUFSGBDFΛ ͭ͘Δ %BUB4FSWJDFͰ ࣮૷ 4FSWJDFͰ3FQPTJUPSZΛ 
 ར༻

Slide 79

Slide 79 text

Repositoryʢςʔϒϧʣʹґଘ͠ͳ͍࡞Γʹʂ

Slide 80

Slide 80 text

ΦʔτϫΠϠϦϯά ࣮૷Ϋϥεʹ޷͖ͳ͚ͩRepositoryΛૠͤΔ

Slide 81

Slide 81 text

ʮ%#͔Βʙͳσʔλऔಘ͢Δ͜ͱͳʂʯͰςετͰ͖Δɻ ςετͷमਖ਼΋ෆཁʹʂ ςʔϒϧ͕૿͑ͯ΋มߋͷඞཁ͕ͳ͍

Slide 82

Slide 82 text

DBͱͷ΍ΓͱΓΛServiceʹ·ͱΊΔ • Ϣʔεέʔε͝ͱʹDBͷ΍ΓͱΓΛInterfaceͱͯ͠ఆٛ͢Δ • ϦϙδτϦ܈Λ·ͱΊΔϑΝαʔυ໾ͷײ͡ • ςετͷमਖ਼΋ָʹͳΔ • ͜͜͸SymfonyͷΦʔτϫΠϠϦϯά͕େ׆༂ʂ

Slide 83

Slide 83 text

ʢը໘ʴίϯτϩʔϥʔɺؒʹ߹͏͔ͳʔ… Ϣʔεέʔε͸ॱௐͦ͏Ͱ͚͢Ͳɺը໘पΓ͸େৎ෉Ͱ͔͢ʁ ։ൃظؒ΋ͦΖͦΖऴ൫Ͱ͢͠ɺ࡞͍͖ͬͯ·͢Ͷʔ

Slide 84

Slide 84 text

ͳΜ͔ɺ͜ΕΊͬͪΌૣ͘࡞Εͯٯʹෆ҆ͳΜͰ͚͢Ͳ… ࢥͬͯͨҎ্ʹ໎͏͜ͱͳ͍Ͱ͢Ͷ ։ൃத

Slide 85

Slide 85 text

ೖྗ஋Λ༻ҙ͢Δ ϢʔεέʔεΛ࢖͏ ݁ՌΛ֬ೝ͢Δ ೖྗ஋Λड͚औΔ ϢʔεέʔεΛ࢖͏ ݁ՌΛը໘දࣔ͢Δ Ϣʔεέʔεςετ ίϯτϩʔϥʔʴը໘ ͕͜͜มΘ͚ͬͨͩ DBͱಉظ

Slide 86

Slide 86 text

ೖྗ஋Λ༻ҙ͢Δ ϢʔεέʔεΛ࢖͏ ݁ՌΛ֬ೝ͢Δ ೖྗ஋Λड͚औΔ ϢʔεέʔεΛ࢖͏ ݁ՌΛը໘දࣔ͢Δ Ϣʔεέʔεςετ ίϯτϩʔϥʔʴը໘ ͕͜͜ΫϦʔϯͳ΄Ͳɺ 
 ίϯτϩʔϥʔͰ΍Δ͜ͱ͕গͳ͍ DBͱಉظ

Slide 87

Slide 87 text

͋ͱͰɺͦͦͬ͘͜͜͞ΓೖΕΔ͜ͱͰ͖ΔΜͰେৎ෉Ͱ͢Αʂ ͜ͷϖʔδ͸ೝূޙͷϖʔδͳΜͰ͕͢ɻ ࠓ͸Πϝʔδڞ༗Λ༏ઌͯ͠ΔͷͰɺೝূͬ͢ͱ͹ͯ͠·͢

Slide 88

Slide 88 text

ೖྗ஋Λड͚औΔ ϢʔεέʔεΛ࢖͏ ݁ՌΛը໘දࣔ͢Δ ίϯτϩʔϥʔʴը໘ DBͱಉظ Ϣʔβೝূ͢Δ ͜ΕΛ௥Ճ

Slide 89

Slide 89 text

ࠓݟͯΔਓ͕ݟͨ͜ͱ͋Δ͔Λ 
 ஌Δʹ͸ೝূ͕͍Δ ݟͨ͜ͱ͕͋Δ

Slide 90

Slide 90 text

ೖྗ஋Λड͚औΔ ϢʔεέʔεΛ࢖͏ ݁ՌΛը໘දࣔ͢Δ ίϯτϩʔϥʔʴը໘ DBͱಉظ Ϣʔβೝূ͢Δ ඞཁʹͳͬͨ࣌఺Ͱૠೖ

Slide 91

Slide 91 text

ೝূΛ͔͚Δ৔ॴ ೝূͷઃఆ ର৅Ϣʔβͷઃఆ

Slide 92

Slide 92 text

͜ΕΛ΋ͱʹຊ։ൃʹ͏ͭΕΔͱࢥ͍·͢ɻ ϓϩτ͜Μͳײ͡Ͱ͢ େ·͔ͳ࢖༻ײ΍՝୊΋ݟ͖͑ͯ·ͨ͠ɻ

Slide 93

Slide 93 text

ϓϩτ։ൃ׬ྃ🎉

Slide 94

Slide 94 text

ΫϦʔϯΞΩςΫνϟ …ͬͯԿͳͷʁʲ࠶ʳ ͪΐͬ͜ͱͻͯ͞Δ͞Μίʔφʔ ޠΒͤͯ

Slide 95

Slide 95 text

ΫϦʔϯΞΩςΫνϟ͸ந৅ • ͜Ε͚ͩ͸ಡΊ: https://blog.tai2.net/the_clean_architecture.html • > هࣄ๯಄ͷਤ͸ɺ͜ΕΒ (ΦχΦϯ΍ϔΩαΰφϧͳͲ) ͷΞʔΩ ςΫνϟΛ୯Ұͷ֓೦ʹແཧͳ͘౷߹͢ΔࢼΈͰ͋Δɻ • ಉ৺ԁͷਤ͸ͨͩͷྫͰ͔͠ͳ͍ɻ 
 ΦχΦϯΞʔΩςΫνϟͱ΄΅ಉ͡ਤ → • ΦχΦϯ/ϔΩαΰφϧ/DCI/… ʹ ۩৅ΞʔΩςΫνϟ • ΫϦʔϯΞʔΩςΫνϟ = ΞʔΩςΫνϟͷσβΠϯύλʔϯ

Slide 96

Slide 96 text

ΫϦʔϯΞΩςΫνϟ͸഑ஔਤͰ͸ͳ͍ • ༏ΕͨΞʔΩςΫνϟʹڞ௨͢Δಛ௃: ✓ த৺΄ͲϏδωεͷຊ࣭ ✓ ֎प΄Ͳίϯϐϡʔλʔͷࣄ৘ ✓ ૚͸จ຺Λม׵͢ΔΞμϓλʔͩ ✓ ґଘΛͭͶʹத৺ͷ҆ఆʹ޲͚Δ • ʮ͜ΕͲΜͳΞʔΩςΫνϟʹ΋ৗࣝͳʯ • ʮ΋ͪΖΜ܅Β͕ࣗ෼ͷϓϩμΫτʹ࡞ΔΞʔΩςΫνϟʹ΋΍Ͱʯ

Slide 97

Slide 97 text

໰.ϑϨʔϜϫʔΫ͸ΠϯϑϥετϥΫνϟ͔ • ΫϦʔϯΞΩςΫνϟຊʹ͸ʮWeb ϑϨʔϜϫʔΫ͸֎ଆʯͱॻ͍ͯ͋Δ • Ͱ΋ૄ݁߹ͳઃܭΛαϙʔτ͢ΔͨΊͷϑϨʔϜϫʔΫ΋͋Δ • ಉ͡ϑϨʔϜϫʔΫͱ͍͏໊Ͱ΋ͦΕͧΕΧόʔൣғ͕શ͘ҧ͏ • Կ͕ґଘͯ͠΋Α͍҆ఆ֓೦͔ɺԿ͕ෆ҆ఆ͞Λট͘۩৅ͳͷ͔ΛݟۃΊΑ • ḏࢠఆنʹΞʔΩςΫνϟਤͷܗ௨Γʹ͢Δ౒ྗ͸ແବ

Slide 98

Slide 98 text

·ͱΊ

Slide 99

Slide 99 text

͜Μͳϓϩτͷ࡞ΓํͰͨ͠ #1 ։ൃํ਑ܾఆ ܾΊͨ։ൃํ਑ʹ͸ݻࣥ͠ͳ͍Α͏ʹ #2 ํ਑֬ೝ ظ଴௨Γ͔খ͘͞ࢼ͢ #3 ετʔϦʔϚοϐϯά ϓϩμΫτͷࢥ͍΍༏ઌ౓ͷߴ͍λεΫͷચ͍ग़͢ #4 ϞσϦϯάɺ։ൃɺϨϏϡʔ ϞσϦϯάʙϨϏϡʔΛ܁Γฦ͢ɻςετ͕ޮ͍ͯ͘Δ

Slide 100

Slide 100 text

ґଘํ޲Λҙࣝ͠΍͍͢ Ϣʔεέʔεͷσʔλґଘ͕গͳ͍ ϞοΫ͕༻ҙ͠΍͍͢ ςετ͕खް͘ͳΔ ΦʔτϫΠϠϦϯάͰґଘղܾ Symfony + ɹDoctrineΛ࢖͏͜ͱͰ ίʔυͷมߋʹڧ͍

Slide 101

Slide 101 text

⭕ Α͔ͬͨ͜ͱ • ࠷ॳʹߟ͑ͨʰ։ൃࢦ਑ʱʹ͸ΊΔ͜ͱͰ։ൃεϐʔυ͕ૣ͔ͬͨ • มߋʢ࢓༷มߋɾϦϑΝΫλʣʹڧ͔ͬͨ • ʢࠓճͷܦݧΛܦͯʣ͖Ε͍ʹͭ͘Ζ͏ͬͯҙ͕ࣝժੜ͑ͨ 
 Ϟσϧతʹ΋ίʔυతʹ΋ • ͜ͷޙͷຊ։ൃʹ΋ϓϩτͷίʔυ͕׆͖ͨ

Slide 102

Slide 102 text

✅ վળ఺ • ։ൃʹ͍ͭͯͷυΩϡϝϯτΛ·ͱΊ͓͚ͯ͹Α͔ͬͨɻ • ຊ։ൃͰϑΝοτίϯτϩʔϥʔؾຯʹͳͬͨͷͰɺΞʔΩςΫνϟͷҙ ٛΛͪΌΜͱ఻͑ͳ͍ͱ؆୯ʹ่Εͯ͠·͏ • Ұ෦ɺυϝΠϯϩδοΫ͕ͬͪ͝Όʹͳͬͯ͠·ͬͨɻ • ΋ͬͱΠϕϯτʹཔΕ͹Α͔ͬͨɻ • Next.jsͰಥ͖௨͢ͷ΋ͳ͠Ͱ͸ͳ͔ͬͨɻ • ͨͿΜɺ΋ͬͱ͖Ε͍ʹͰ͖Δ

Slide 103

Slide 103 text

ࢼ࣌ͦ͢͜ɺΞʔΩςΫνϟΛҙࣝ͢Δ

Slide 104

Slide 104 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ