Slide 1

Slide 1 text

!LB[VIFJ !LB[VIFJ@@ ϞοΫͷటপ͔Β୤٫͢ΔͨΊʹɺ ͋͑ͯ%#ʹͭͳ͍Ͱςετ͍ͯ͠Δ࿩ 1)1FS,BJHJ 

Slide 2

Slide 2 text

ࣗݾ঺հ ߥҪ࿨ฏ!LB[VIFJ גࣜձࣾ."Ϋϥ΢υ$50 ৽॓ޚԓελʔτΞοϓ

Slide 3

Slide 3 text

ς Ϋ ϊ ϩ δ ʔ ͷ ྗ Ͱ M & A ʹ ྲྀ ௨ ֵ ໋ Λ

Slide 4

Slide 4 text

."ͷϦΫφϏͷΑ͏ͳαʔϏε ങ͍खاۀ͕ങऩχʔζΛܝࡌ͠ɺ
 ചΓख͕ͦΕʹରͯ͠ਃ͠ࠐΉͱ͍͏ܗͷ
 ৽͍͠.ˍ"ϚονϯάϓϥοτϑΥʔϜ

Slide 5

Slide 5 text

࢖͍ͬͯΔٕज़ɾπʔϧ GSPOUFOE CBDLFOE NJEEMFXBSF JOGSB UPPMT

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

໨࣍ w ϞοΫΛ࢖ͬͨϢχοτςετͷ໰୊఺ w ͋͑ͯɺ%#ʹͭͳ͍Ͱςετ͢Δ w ·ͱΊ

Slide 8

Slide 8 text

ϞοΫΛ࢖ͬͨ Ϣχοτςετͷ໰୊఺

Slide 9

Slide 9 text

Ϣχοτςετʹ͍ͭͯ Ϣχοτςετ͸ɺϝιου΍ؔ਺ͳͲখ͞ͳϢχοτ୯Ґ ʹߜΓࠐΜͩࣗಈςετɻݱ୅తͳϓϩάϥϛϯάʹ͔ܽͤ ͳ͍

Slide 10

Slide 10 text

ϞοΫ͠ͳ͍Ϣχοτςετ ୯ҰͷΫϥεʹσʔλͱϩδοΫ͕ด͍ͯ͡Δ΋ͷ͸ ؆୯ʹςετग़དྷΔɻ

Slide 11

Slide 11 text

ϞοΫ͠ͳ͍Ϣχοτςετ class CommonTime { 
 public function __construct(int $timestamp) { $this->timestamp = $timestamp; } 
 public static function fromString($string) { return new static(strtotime($string)); } 
 public function getHour(): string { return date('H', $this->timestamp); }

Slide 12

Slide 12 text

ϞοΫ͠ͳ͍Ϣχοτςετ public function testGetHour() { $time = CommonTime::fromString('2017-01-01 10:21:00'); $this->assertEquals('10', $time->getHour()); } จࣈྻ͔Β$PNNPO5JNFΫϥεΛ࡞ͬͯɺHFU)PVS͕࣌ؒ Λฦ͢͜ͱΛςετ

Slide 13

Slide 13 text

ϞοΫΛ࢖ͬͨϢχοτςετ %#ΞΫηε͍ͯ͠Δ౳ɺΫϥε಺ʹσʔλ͕ด͍ͯ͡ ͳ͍৔߹ͷςετ͸ϞοΫΛ࢖ͬͯςετ͢Δ

Slide 14

Slide 14 text

ϞοΫΛ࢖ͬͨϢχοτςετ class MessageDomainService { 
 public function notifyMessage(MessageId $messageId): void { $message = $this->messageRepository->get($messageId); if ($message->needsNotification()) { $this->notificationRepository->add($message->notification()); } } ϝοηʔδΛऔಘͯ͠ɺඞཁͳΒ௨஌΋௥Ճ͢Δͱ͍͏Α͏ ͳॲཧ

Slide 15

Slide 15 text

ϞοΫΛ࢖ͬͨϢχοτςετ public function testNotifyMessage() { $needsNotifyMessage = new Message(...); $this->mock(MessageRepository::class, function ($mock) use ($needsNotifyMessage) { $mock->shouldReceive('get') ->andReturn($needsNotifyMessage); }); $this->mock(NotificationRepository::class, function ($mock) use ($needsNotifyMessage) { $mock->shouldReceive('add') ->with($needsNotifyMessage->notification()); }); $domainService = app()->make(MessageDomainService::class); $domainService->notifyMessage($needsNotifyMessage->id()); } ҰͭҰͭͷσʔλΞΫηε෦෼ΛϞοΫʹͯ͠ɺؔ਺͕ݺ͹ Ε͍ͯΔ͔Ͳ͏͔Λ֬ೝ͍ͯ͘͠ɻ

Slide 16

Slide 16 text

ϞοΫΛ࢖ͬͨϢχοτςετ public function testNotifyMessage() { $needsNotifyMessage = new Message(...); $this->mock(MessageRepository::class, function ($mock) use ($needsNotifyMessage) { $mock->shouldReceive('get') ->andReturn($needsNotifyMessage); }); $this->mock(NotificationRepository::class, function ($mock) use ($needsNotifyMessage) { $mock->shouldReceive('add') ->with($needsNotifyMessage->notification()); }); $domainService = app()->make(MessageDomainService::class); $domainService->notifyMessage($needsNotifyMessage->id()); } σʔλϕʔε͔Βऔಘͨ͠σʔλΛ࢖ͬͯɺෳ਺ͷςʔϒϧʹॻ͖ ࠐΈΛ͍ͯ͘͠Α͏ͳ৔߹ɺͨ͘͞ΜͷσʔλϕʔεΞΫηεΛ ϞοΫ͢Δඞཁ͕͋Δɻ

Slide 17

Slide 17 text

ϞοΫΛ࢖ͬͨϢχοτςετ ࣮ࡍͷॲཧ͸͜ΕΑΓ΋Կഒ΋ෳࡶʹͳΓɺςετ ίʔυ΋͜ΕΑΓ΋ͣͬͱଟ͘ͳͬͯ͠·͏ɻ ίʔυΛॻ͍͍ͯΔͷ͔ςετΛॻ͍͍ͯΔͷ͔෼͔ Βͳ͍ঢ়ଶɻ

Slide 18

Slide 18 text

ϞοΫΛ࢖ͬͨϢχοτςετ

Slide 19

Slide 19 text

Կ͕ѱ͍ͷ͔ʁ

Slide 20

Slide 20 text

ςετͷີ݁߹ ϝιου ଞΫϥεͷݺͼग़͠ ଞΫϥεͷݺͼग़͠ ଞΫϥεͷݺͼग़͠ ˡϞοΫ ˡϞοΫ ˡϞοΫ ςετͷີ݁߹͕ى͖͍ͯΔɻϞοΫΛ࢖ͬͨςετ͸ςετ ͕ϝιουͷத਎·Ͱৄ͘͠஌ͬͯ͠·͍ͬͯΔͱ͍͏͜ͱɻ

Slide 21

Slide 21 text

ςετͷີ݁߹ ϝιου ଞΫϥεͷݺͼग़͠ ଞΫϥεͷݺͼग़͠ ଞΫϥεͷݺͼग़͠ ˡϞοΫ ˡϞοΫ ˡϞοΫ ςετ͸ϓϩμΫτίʔυͱີ݁߹͢Ε͹͢Δ΄ͲյΕ ΍͘͢ͳΔɻଞΫϥεͷมߋͰςετ͕յΕͯ͠·͏

Slide 22

Slide 22 text

ςετͷີ݁߹ ϝιου ଞΫϥεͷݺͼग़͠ ଞΫϥεͷݺͼग़͠ ଞΫϥεͷݺͼग़͠ ˡϞοΫ ˡϞοΫ ˡϞοΫ ϞοΫΛ͗ͯ͢͠ϓϩμΫτίʔυ͕ςετͱ෼཭ͯ͠ มߋग़དྷͳ͍ঢ়ଶΛϞοΫͷటপͱ͍͏

Slide 23

Slide 23 text

ϞοΫͷటপ

Slide 24

Slide 24 text

ςετͷີ݁߹ ϝιου "HFU "VQEBUF #VQEBUF ˡςετ ˡςετ ˡςετ ࣮ࡍɺϞοΫ͠·͘Δͱɺϝιου͕ݺ͹ΕͯΔॱ൪͘Β͍͔͠ ςετग़དྷͳ͍ͷͰ͸ʁͪΌΜͱಈ͍͍ͯΔͱอূͰ͖Δͷ͔ʁ

Slide 25

Slide 25 text

ςετͷछྨ ϞοΫΛ࢖͑͹࢖͏΄Ͳɺςετ͸ϗϫΠτϘοΫε ςετʹ͍͍ۙͮͯ͘ɻ શͯͷ৚݅Λ௨ͯ͠ɺΧόϨοδΛ্͍͛ͨ౳ͷ৔߹ ʹ͸༗༻͕ͩɺγϯϓϧʹڍಈΛ֬ೝ͍ͨ͠ͱ͖ʹ͸ ϒϥοΫϘοΫεςετʹ͍ͨ͠ɻ

Slide 26

Slide 26 text

ϗϫΠτϘοΫεςετ ϝιου "HFU "VQEBUF #VQEBUF ˡςετ ˡςετ ˡςετ ͦΕͧΕͷؔ਺͕ͪΌΜͱݺ͹Ε͍ͯͯɺਖ਼͍͠෼ذ ʹೖ͍ͬͯΔ͜ͱΛςετ͢Δ

Slide 27

Slide 27 text

ϒϥοΫϘοΫεςετ ϝιου த਎͸Θ͔Βͳ͍͕ɺΠϯϓοτͱΞ΢τϓοτ͕อ ূ͞Ε͍ͯΔঢ়ଶ ˢ ςετ Πϯϓοτ Ξ΢τϓοτ

Slide 28

Slide 28 text

ϒϥοΫϘοΫεςετ ϝιου ͜ΕʹΑͬͯɺϓϩμΫτίʔυͱςετ͕ಠཱ͠ɺς ετΛ͍͡ΒͣʹίʔυΛมߋ͢Δ͜ͱ͕ग़དྷΔ ˢ ςετ Πϯϓοτ Ξ΢τϓοτ

Slide 29

Slide 29 text

ςετͷछྨ ϒϥοΫϘοΫεςετʹ͍ͨ͠ʂ😆

Slide 30

Slide 30 text

͋͑ͯɺ%#ʹͭͳ͙

Slide 31

Slide 31 text

͋͑ͯɺ%#ʹͭͳ͙ ϝιου ΠϯϓοτͱΞ΢τϓοτΛ%#͔Βऔಘ͢Ε͹ɺϒ ϥοΫϘοΫεςετ͕࣮ݱͰ͖Δ ˢ ςετ %# %#

Slide 32

Slide 32 text

͋͑ͯɺ%#ʹͭͳ͙ public function testNotifyMessage() { $needsNotifyMessage = new Message(...); $domainService = app()->make(MessageDomainService::class); $domainService->notifyMessage($needsNotifyMessage->id());
 
 $notification = $this->notificationRepository->first(); $this->assertEquals($needsNotifyMessage->notification(), $notification) } ࣮ࡍͷ%#ʹॻ͖ࠐΜͰɺͦΕΛऔΓग़ͯ͠Ұக͍ͯ͠ Δ͔֬ೝ͢Δ͚ͩɻͱͯ΋γϯϓϧ

Slide 33

Slide 33 text

%#ʹͭͳ͍Ͱςετ͢Δͱ͖ͷ໰୊఺ ɾςετޙͷ෭࡞༻ΛͲ͏΍ͬͯରॲ͢Δ͔ ɾ࣮ߦ࣌ؒΛͲ͏͢Δ͔

Slide 34

Slide 34 text

ςετޙͷ෭࡞༻ΛͲ͏΍ͬͯରॲ͢Δ͔ ςετҰͭҰ͕ͭऴΘΔ౓ʹσʔλϕʔεͷঢ়ଶΛ໭͠ ͍ͨɻ ςετΛ࣮ߦ͢Δ౓ʹσʔλϕʔεʹॳظσʔλΛ༻ҙ ͍ͯͨ͠Βɺςετͷ࣮ߦ࣌ؒͷຆͲ͕σʔλͷ༻ҙ ʹͳͬͯ͠·͏😅

Slide 35

Slide 35 text

ςετޙͷ෭࡞༻ΛͲ͏΍ͬͯରॲ͢Δ͔ %#ͷτϥϯβΫγϣϯΛ׆༻͢Δ👏

Slide 36

Slide 36 text

ςετޙͷ෭࡞༻ΛͲ͏΍ͬͯରॲ͢Δ͔ αϯϓϧίʔυ͸-BSBWFMΛ࢖ͬͨ΋ͷɻTFUVQ ࣌ʹ USBOTBDUJPOΛுΓɺUFBS%PXO ࣌ʹSPMMCBDL͍ͯ͠Δ

Slide 37

Slide 37 text

࣮ߦ࣌ؒΛͲ͏͢Δ͔ Ϣχοτςετ͸଎໋͕͞ɻσʔλϕʔεʹͭͳ͍Ͱ͍ ͨΒςετ͕஗͘ͳͬͯ͠·͏😅

Slide 38

Slide 38 text

࣮ߦ࣌ؒΛͲ͏͢Δ͔ %#ʹͭͳ͙ํ͕ܨ͕ͳ͍ΑΓ஗͍ͷ͸࢓ํͳ͍ͱׂΓ ੾Δ😅࣮ߦͷ࢓ํΛ޻෉ͯ͠ରॲ

Slide 39

Slide 39 text

࣮ߦ࣌ؒΛͲ͏͢Δ͔ 1)16OJUͷઃఆͰςετΛ෼ׂ͠ɺ࣮ߦλΠϛϯάΛௐ੔͢ Δ͜ͱͰରॲ ./tests/Feature ./tests/DbIntegration ./tests/Unit

Slide 40

Slide 40 text

࣮ߦ࣌ؒΛͲ͏͢Δ͔ $*্Ͱ͸ଞͷछྨͷςετͱฒྻ࣮ߦͰ͖ΔΑ͏ʹઃఆ͠ɺ શମͰͷ࣮ߦ࣌ؒʹ͸ӨڹΛ༩͑ͳ͍Α͏ʹ

Slide 41

Slide 41 text

·ͱΊ

Slide 42

Slide 42 text

·ͱΊ ɾϞοΫΛͨ͘͞Μ࢖͏ςετ͸ɺϓϩμΫτίʔυͱςετ ͕ີ݁߹ͯ͠ϞοΫͷటপʹϋϚͬͯ͠·͏ɻ ɾ͋͑ͯ%#ʹͭͳ͙͜ͱͰϓϩμΫτίʔυͱςετ͕ಠཱ ͠ɺΠϯϓοτͱΞ΢τϓοτΛ֬ೝ͢Δ͚ͩͷγϯϓϧͳς ετʹͳΔ ɾ%#ʹͭͳ͍Ͱςετ͢ΔͨΊͷػೳ౳΋ҙ֎ͱ༻ҙ͞Εͯ ͓Γɺ΍Ε͹ग़དྷΔ

Slide 43

Slide 43 text

஫ҙॻ͖ ϞοΫΛ࢖͏ͷΛৗʹ΍Ίͨ΄͏͕ྑ͍ͱ͍͏͜ͱͰ͸͋Γ ·ͤΜɻ࣮ࡍʹϞοΫΛ࢖ͬͨํ͕ྑ͍έʔε΋ͱͯ΋ଟ͍Ͱ ͢ɻ ͨͩɺϞοΫΛ࢖Θͳ͍Ͱςετ͢Δํ๏΋͋ΔΑɺͱ͍͏ ࿩Ͱͨ͠ɻ

Slide 44

Slide 44 text

ࢀߟॻ੶ ॳΊͯͷࣗಈςετ03FJMMZ+BQBO
 IUUQTXXXPSFJMMZDPKQCPPLT