Slide 1

Slide 1 text

ϏοτΩʔྲྀDDD׆༻ज़ ʙͳͥ%%% ͳʹΛ׆͔ͯ͠Ͳ͜Λյ͢ͷ͔ʙ

Slide 2

Slide 2 text

ࠤ౻ ୓ਓ Sato Takuto 2015.04 2019.05 2020.01 େֶ(ݐஙֶઐ߈)ଔۀޙɺ גࣜձࣾϫʔΫεΞϓϦέʔγϣϯζʹೖࣾ ձܭγεςϜͷιϑτ΢ΣΞ։ൃΛ୲౰ ಛʹࡒ຿ձܭͷ࢓༁ؔ࿈ ϏοτΩʔ΁ࢀը ECαΠτͷ։ൃ / อकɺࣾ಺γεςϜͷ։ൃ TaKuTyͷ։ൃ ࠓͷHomeͷલ਎ͱͳΔResidenceνʔϜʹ഑ଐ bitlockΛѻ͏؅ཧը໘΍όοΫΤϯυɺappͷ։ൃ ʹैࣄ 2022.07 HomeϓϩμΫτͷٕज़੹೚ऀ ෳࡶͳࣄ৅ΛಡΈղ͍ͯߏ଄Խ͠ɺந৅Խ / ൚༻Խ Ͱ͖ΔΑ͏ʹઃܭ͠ɺ௿ίετͰଟ͘ͷՁ஋Λͩͤ Δ։ൃΛ͢Δ͜ͱΛ޷Ή

Slide 3

Slide 3 text

1. ͸͡Ίʹ twitter ͸͡Ί·ͨ͠ʂ ϑΥϩʔ͓ئ͍͠·͢ʂ @takuuuuuuu777 ϑΥϩʔ͍ͨ͠ͱࢥͬͯ΋Β͑ΔΑ͏ͳ ൃදΛ͠·͢....ʂʂ 3 3

Slide 4

Slide 4 text

1. ͸͡Ίʹ ࿩͢಺༰ DDDΛಋೖͨ͠ ϏοτΩʔ(HomeࣄۀྖҬ)ͰͷӦΈʹ͍ͭͯ ໨త DDDಋೖͷϓϩηεͱ޻෉఺ͷڞ༗ ࠓޙಋೖ࣌ͷࢀߟ / ಋೖޙͷվળͷࢀߟ 4 4

Slide 5

Slide 5 text

1. ͸͡Ίʹ 5 5 λʔήοτ ɾDDDͬͯΦΠγΠϊʁ ɾDDDಋೖ͍͚ͨ͠ͲͲ͏͢Ε͹Α͍...ʁ ɾDDDಋೖͯ͠Έ͚ͨͲ্ख͍͔͘ͳ͍ ɾDDDಋೖࡁΈͰ΋ͬͱચ࿅͍ͤͨ͞ ɾଞࣾͷӡ༻ํ๏ؾʹͳΔ

Slide 6

Slide 6 text

Outline 1. ͸͡Ίʹ 2. ;Ή;Ή 3. ͦ΋ͦ΋ 4. ͯͯ͞͞ 5. ΋͙΋͙ 6. ͠Ί 6 6

Slide 7

Slide 7 text

Outline 1. ͸͡Ίʹ 2. ;Ή;Ή (ͳΔ΄ͲͶ) 3. ͦ΋ͦ΋ (ͳʹ͍ͨ͠Μ͚ͩͬ) 4. ͯͯ͞͞ (Ͳ͏͠Α͏͔) 5. ΋͙΋͙ (͓͍͍͠ͷ) 6. ͠Ί 7 7

Slide 8

Slide 8 text

;Ή;Ήɻ 8 8

Slide 9

Slide 9 text

1. ;Ή;Ή DDDͱฉ͍ͯɺͳʹΛࢥ͍·͔͢ʁ 9 9 ಥવͰ͕͢...

Slide 10

Slide 10 text

1. ;Ή;Ή ΤϯςΟςΟɺ஋ΦϒδΣΫτ ϞσϦϯάɺυϝΠϯΤΩεύʔτ 10 10 ઃܭࢥ૝ɺΞδϟΠϧɺफڭ࿦૪ ͨͿΜ͍Ζ͍Ζ...

Slide 11

Slide 11 text

1. ;Ή;Ή ࢥͬͨ͜ͱ on 2020.01 11 11 ;Ή;Ή...ͳΜ͔ߴঘɻΑ͛͞ɻ ϞσϦϯά͸ઃܭͷ࣌ʹҰఆͰ͖ͯͦ͏ɻ ։ൃऀ = υϝΠϯΤΩεύʔτ ͸౰વͰ͠ΐʂ ͪΐͬͱݎ࿚͗ͯ͢ɺॏͦ͏... ϝϦοτ͸ຊ౰ʹ͋Δ...ʁ ͋Μ·ಋೖΠϝʔδ͕༙͔ͳ͍...

Slide 12

Slide 12 text

1. ;Ή;Ή ࢥͬͨ͜ͱ on 2022.04 12 12 ։ൃɺͳΜ͔՝୊͕͋Δͳ...՝୊ͳΜͩΖ... Ͳ͏ͨ͠ΒղܾͰ͖ΔΜͩΖ... DDDͷߟ͑ํΛద༻Ͱ͖Δ͔΋...ʂ ͦͯ͠ݱࡏ ͳΜͱ͔൘ʹ͍͖ͭͯͨ ΋ͬͱվળ͍ͯ͜͠͏ʂʂ

Slide 13

Slide 13 text

ͦͯ͠ɺࢥ͏͜ͱ 1. ;Ή;Ή 13 13

Slide 14

Slide 14 text

ॏཁͳͷ͸ DDDͱͯ͠ Ͳ͏͋Δ΂͖͔ Ͱ͸ͳ͘ 1. खஈͱͯ͠ଥ౰͔ 2. ՝୊ΛղܾͰ͖Δ͔ 1. ;Ή;Ή 14 14

Slide 15

Slide 15 text

1. ;Ή;Ή 1. ଥ౰͔ʁ ։ൃͷϑΣʔζ / ՝୊౳ΛؑΈͯ൑அ σϝϦοτ্͕ճͬͨΒҙຯແ͠... 2. ղܾͰ͖Δ͔ʁ ղܾͷखஈʹঢ՚Ͱ͖Δ͔ ఏএ͞Ε͍ͯΔ͜ͱΛͦͷ··࣮ફͯ͠ ՝୊͕ղܾͰ͖Δͱ͸ݶΒͳ͍... 15 15

Slide 16

Slide 16 text

1. ;Ή;Ή 1. ଥ౰͔ʁ ։ൃͷϑΣʔζ / ՝୊౳ΛؑΈͯ൑அ σϝϦοτ্͕ճͬͨΒҙຯແ͠… 2. ղܾͰ͖Δ͔ʁ ղܾͷखஈʹঢ՚Ͱ͖Δ͔ ఏএ͞Ε͍ͯΔ͜ͱΛͦͷ··࣮ફͯ͠ ՝୊͕ղܾͰ͖Δͱ͸ݶΒͳ͍... 16 16 ։ൃͷϑΣʔζͱ՝୊Λ ͪΌΜͱཧղͰ͖ͯΔʁʁ ఏএ಺༰Λ뱌ͯ͠ ՝୊ΛͲ͏΍ͬͨΒղܾͰ͖Δ ͷͩΖ͏͔ʁ

Slide 17

Slide 17 text

աڈΛৼΓฦͬͯΈΔ 1. ;Ή;Ή 17 17

Slide 18

Slide 18 text

1. ;Ή;Ή ࢥͬͨ͜ͱ on 2020.0 18 18 ;Ή;Ή...ͳΜ͔ߴঘɻΑ͛͞ɻ ϞσϦϯά͸ઃܭͷ࣌ʹҰఆͰ͖ͯͦ͏ɻ ։ൃऀ = υϝΠϯΤΩεύʔτ ͸౰વͰ͠ΐʂ ͪΐͬͱݎ࿚͗ͯ͢ɺॏͦ͏... ϝϦοτ͸ຊ౰ʹ͋Δ...ʁ ͋Μ·ಋೖΠϝʔδ͕༙͔ͳ͍...

Slide 19

Slide 19 text

1. ;Ή;Ή ࢥͬͨ͜ͱ on 2020.0 19 19 ;Ή;Ή...ͳΜ͔ߴঘɻΑ͛͞ɻ ϞσϦϯά͸ઃܭͷ࣌ʹҰఆͰ͖ͯͦ͏ɻ ։ൃऀ = υϝΠϯΤΩεύʔτ ͸౰વͰ͠ΐʂ ͪΐͬͱݎ࿚͗ͯ͢ɺॏͦ͏... ϝϦοτ͸ຊ౰ʹ͋Δ...ʁ ͋Μ·ಋೖΠϝʔδ͕༙͔ͳ͍... ͜͏ࢥ͍ͬͯΔ࣌఺Ͱɺͦ΋ͦ΋ඞཁͳঢ়گͰͳ͍

Slide 20

Slide 20 text

͜͜͸΍Γํͷ໰୊ɻDDD͔ΒೖΔͱ೉͍͔͠΋.... ՝୊ͱୡ੒͍ͨ͜͠ͱΛ໌֬ʹͯ͠ྟΊ͹͍͚Δʂʂ 1. ;Ή;Ή ࢥͬͨ͜ͱ on 2020.0 20 20 ;Ή;Ή...ͳΜ͔ߴঘɻΑ͛͞ɻ ϞσϦϯά͸ઃܭͷ࣌ʹҰఆͰ͖ͯͦ͏ɻ ։ൃऀ = υϝΠϯΤΩεύʔτ ͸౰વͰ͠ΐʂ ͪΐͬͱݎ࿚͗ͯ͢ɺॏͦ͏... ϝϦοτ͸ຊ౰ʹ͋Δ...ʁ ͋Μ·ಋೖΠϝʔδ͕༙͔ͳ͍...

Slide 21

Slide 21 text

1. ;Ή;Ή ಛʹҎԼ؍఺ʹ͍͕ͭͯ ຊ೔ͷϝΠϯTopic 1. खஈͱͯ͠ଥ౰͔ ՝୊ͷೝࣝͱDDDʹظ଴ͨ͠΋ͷ 2. ՝୊ΛղܾՄೳ͔ ՝୊ղܾͷͨΊͷߦͬͨ͜ͱ ͦͷखॱͱ޻෉఺ 21 22

Slide 22

Slide 22 text

ܰྔDDDͱ͔ϘτϜΞοϓDDD ͳͲͷΑ͏ʹ ࣮૷෦෼ͷ࿩͕ϝΠϯͰ͢ 1. ;Ή;Ή 22 23

Slide 23

Slide 23 text

Outline 1. ͸͡Ίʹ 2. ;Ή;Ή (ͳΔ΄ͲͶ) 3. ͦ΋ͦ΋ (ͳʹ͍ͨ͠Μ͚ͩͬ) 4. ͯͯ͞͞ (Ͳ͏͠Α͏͔) 5. ΋͙΋͙ (͓͍͍͠ͷ) 6. ͠Ί 23 24

Slide 24

Slide 24 text

ͦ΋ͦ΋ ͳʹ͍ͨ͠Μ͚ͩͬʁ 24 25

Slide 25

Slide 25 text

1. ͦ΋ͦ΋ ։ൃͷϑΣʔζͱ՝୊ʹ͍ͭͯ ͦͷͨΊʹ... Ϗδωεͷઆ໌ / ։ൃମ੍ͷঢ়گ ʹ͍ͭͯ 1෼͘Β͍Ͱͬ͘͟Γ 25 26

Slide 26

Slide 26 text

Ϗδωε 26 27

Slide 27

Slide 27 text

27 28 1. ͦ΋ͦ΋

Slide 28

Slide 28 text

28 29 1. ͦ΋ͦ΋

Slide 29

Slide 29 text

29 30 1. ͦ΋ͦ΋

Slide 30

Slide 30 text

30 31 1. ͦ΋ͦ΋

Slide 31

Slide 31 text

31 32 1. ͦ΋ͦ΋

Slide 32

Slide 32 text

1. ;Ή;Ή ಛ௃ ର৅ྖҬ͕ͻΖ͍ ྖҬΛΧόʔ(ͭͳ͛Δ)͜ͱͰՁ஋͕ग़Δ ݶΒΕͨϦιʔεͰ೗Կʹޮ཰తͳ։ൃ͢Δ͔ 1ͭͷ։ൃͰଟ͘ͷՁ஋͕ग़ͤΔ։ൃΛॏࢹ 32 33

Slide 33

Slide 33 text

33 34 1. ͦ΋ͦ΋

Slide 34

Slide 34 text

։ൃ 34 35

Slide 35

Slide 35 text

νʔϜߏ੒ - ࣾһ4-5ਓ + ۀ຿ҕୗ ։ൃϓϩηε - εΫϥϜ։ൃͰɺ1िؒεϓϦϯτ - ϑϩϯτ × όοΫΤϯυ݉ۀΛਪ঑ - openapiͰAPIͷIFఆ͔ٛͯ͠Β࣮૷ ٕज़ - React × Typescriptɺnode.js × Typescript - ؀ڥ͸GCPɺDB͸firestore͕΄΅΄΅ 35 36 ೉͍͠ϙΠϯτ - ྖҬ͕޿͍ɺػೳ΋ଟذʹΘͨΔ (ݖݶͷ؅ཧ / ΧΪͷ؅ཧ / ೖୀډ؅ཧ / ܝࣔ൘ / ౤ථ...) - ڞ௨Խͷਪਐ -> ந৅Խ͞Εͨσʔλ΍ϩδοΫ 1. ͦ΋ͦ΋ ιʔεن໛ - ςʔϒϧɿ400ఔ౓ - APIɿ500ʙ1000ఔ౓ - ιʔεɿ100ສߦఔ౓

Slide 36

Slide 36 text

։ൃಛੑ 36 37 1. ͦ΋ͦ΋ ɾՁ஋ఏڙͷର৅ͱͳΔࣄۀྖҬ͕ඇৗʹ޿͍ ɹΧΪ / ಺ݟ༧໿ / ཧࣄ૯ձ / إೝূ / ഑ୡαʔϏε࿈ܞ ...ͳͲ ɹந৅Խ൚༻Խ͞Εͨػೳ͕͍ΖΜͳจ຺Ͱར༻͞ΕΔ ɾந৅Խ & ൚༻ԽΛੵۃతʹ࣮ࢪ ɹ(֓೦తͳཁૉ͕ڧ͘ͳΓɺೝࣝ૬ҧ͕ੜ·ΕΔϦεΫ͋Γ) ϓϩμΫτ਺ / ػೳ਺ ͕૿͑ɺ։ൃʹؔΘΔਓ΋૿Ճ → શମΛ೺Ѳ͠ͳ͕Β։ൃΛ͢Δ͜ͱ͕ඇৗʹࠔ೉ͳঢ়ଶʹ...

Slide 37

Slide 37 text

37 38 1. ͦ΋ͦ΋ 1ͭͷαʔϏε͕ෳ਺ͷจ຺Ͱར ༻͞ΕΔͱɺαʔϏε಺ʹݸผ ͷॲཧΛ͕࣋ͪͪ... 1ͭͷαʔϏε͕ෳ਺ͷจ຺Ͱར ༻͞ΕΔͱɺαʔϏε಺ʹݸผͷ ॲཧΛ͕࣋ͪͪ... ༧໿Λڞ௨Խ͢Δࡍʹൃੜ͑͠Δ໰୊

Slide 38

Slide 38 text

ྫ1 ༧໿ͷσʔλʹ͸ҎԼͷϑΟʔϧυ͕͋Δ ɾॏෳ༧໿Մ൱: boolean (ඞਢ߲໨) ɾॏෳ༧໿Մೳ਺: number (೚ҙ߲໨) ॏෳ༧໿Մ൱͕trueͷ৔߹ʹɺॏෳ༧໿Մೳ਺͕ະࢦఆͷ৔߹ͷऔΓѻ͍ํ ॏෳ༧໿Մೳ਺͕ෛͷ਺ͩͬͨ৔߹ͷऔΓѻ͍ํ Ͱॲཧͷ݁Ռ͕ࠩҟ͕ग़ΔՄೳੑ͕͋Δ ಺ݟ༧໿Ͱ͸ॏෳ༧໿Մ൱͕trueͰॏෳ༧໿਺͕ະࢦఆͷ৔߹ʹ͸੍ݶ͔͚ͳ͍ ձٞࣨ༧໿Ͱ͸ॏෳ༧໿Մ൱͕trueͰॏෳ༧໿਺͕-1ͷ৔߹ʹ͸ձٞࣨͰࢦఆ͞Ε͍ͯΔσ ϑΥϧτͷ੍ݶ਺Ͱѻ͏ ͱ͔... 38 39 1. ͦ΋ͦ΋

Slide 39

Slide 39 text

ྫ2 ಺ݟ༧໿ͷొ࿥ʹ͸ҎԼͷϧʔϧ͕͋ͬͨ ɾೖډத͸༧໿ෆՄɻୀڈ༧ఆ೔ͷཌ೔ʹೖډத->ۭࣨͱͳΔ ௥ՃͰҎԼͷϧʔϧ͕ద༻ͱͳͬͨ ɾୀڈ༧ఆ೔͸ୀڈ༧ఆ೔࣌Ҏ߱ͳΒಛผʹ಺ݟ͕ՄೳͱͳΔ ୀڈޙͷ࿈བྷઌͷߋ৽ॲཧͰߋ৽͢Δ໰୊͕ൃੜ ಺ݟ༧໿ͷొ࿥/มߋؔ࿈Ͱ͸௥Ճཁૉͷߟྀ͕͞Ε͍͕ͯͨɺ ೖୀډͷߋ৽ॲཧͰ্هϧʔϧ͕ߟྀ͞Ε͓ͯΒͣߋ৽Ͱ͖ͳ͍໰୊͕ൃੜ ୀڈ༧ఆ೔ࣗମͷมߋͳ͍΋ͷͷɺ௥Ճཁૉ͕ߟྀ͞Ε͍ͯͳ͍νΣοΫॲཧ͕࠶౓࣮ࢪ͞ ΕɺΤϥʔ൑ఆ 39 40 1. ͦ΋ͦ΋

Slide 40

Slide 40 text

40 ՝୊ - ଞػೳͰෆ੔߹ͱͳΔσʔλΛ࡞Δ࣮૷͕Մೳ - Өڹൣғͷ೺Ѳࠔ೉Ͱɺಛఆσʔλར༻ՕॴνΣοΫ͕ඞཁ & ͭΒ͍ - ௐࠪ࣌ͳͲσʔλ͔Βݱঢ়ͷεςʔλε೺Ѳ͕ࠔ೉ (σʔλભҠ) - σʔλमਖ਼࣌ʹඞཁͳՕॴͷચ͍ग़͕͠ࠔ೉ (ػೳ × σʔλͷؔ࿈) - validation౳ͷϩδοΫ͕ࢄཚͯ͠ػೳमਖ਼͕େม… - ొ࿥஋ͷೝࣝͷ࢓ํ͕֤ػೳࠩҟ͕͋Γػೳमਖ਼࣌ʹͭΒ͍… - Ͳ͜ʹͲͷΑ͏ͳ࣮૷͞Ε͍ͯΔ͔ೝ͕ࣝͣΕΔ͜ͱ͕͋Δ - service૚ˠservice૚ˠ...→service૚ˠ update & commit 41 1. ͦ΋ͦ΋

Slide 41

Slide 41 text

41 ՝୊ - ଞػೳͰෆ੔߹ͱͳΔσʔλΛ࡞Δ࣮૷͕Մೳ - Өڹൣғͷ೺Ѳࠔ೉Ͱɺಛఆσʔλར༻ՕॴνΣοΫ͕ඞཁ & ͭΒ͍ - ௐࠪ࣌ͳͲσʔλ͔Βݱঢ়ͷεςʔλε೺Ѳ͕ࠔ೉ (σʔλભҠ) - σʔλमਖ਼࣌ʹඞཁͳՕॴͷચ͍ग़͕͠ࠔ೉ (ػೳ × σʔλͷؔ࿈) - validation౳ͷϩδοΫ͕ࢄཚͯ͠ػೳमਖ਼͕େม… - ొ࿥஋ͷೝࣝͷ࢓ํ͕֤ػೳࠩҟ͕͋Γػೳमਖ਼࣌ʹͭΒ͍… - Ͳ͜ʹͲͷΑ͏ͳ࣮૷͞Ε͍ͯΔ͔ೝ͕ࣝͣΕΔ͜ͱ͕͋Δ - service૚ˠservice૚ˠ...→service૚ˠ update & commit 42 1. ͦ΋ͦ΋

Slide 42

Slide 42 text

1. ݎ࿚ੑ ར༻͢Δଆͷ࣮૷ͷ࢓ํʹΑΒͣɺϧʔϧ͕ݫक͞ΕΔ 2. ஌ࣝͷू໿ ར༻ՕॴͷιʔεΛղಡ͢Δ͜ͱͳ͘ɺڍಈͷ೺Ѳ͕Մೳ 42 43 1. ͯͯ͞͞ ՝୊·ͱΊ

Slide 43

Slide 43 text

࣮ࡍͷιʔεΛݟͳ͕Β ՝୊Λ֬ೝͯ͠ΈΔ 43 44 1. ͦ΋ͦ΋ ࣌ؒͳ͍ͷͰ͜͜Ͱ͸ׂѪ ผ్Qiitaʹهࡌ͍ͯ͠·͢ʂ ※ ࢲͷtwitterϦϯΫ͔ΒඈΜͰ͍͚ͨͩ·͢ʂ

Slide 44

Slide 44 text

44 45 1. ͦ΋ͦ΋ Πϝʔδ Qiita Qiitaʹهࡌͷαϯϓϧ

Slide 45

Slide 45 text

ͯͯ͞͞ Ͳʔ͢Δʁ 45 46

Slide 46

Slide 46 text

ద੾ʹ࣮૷͞Ε͍ͯΕ͹OK ͬͯ࿩Ͱ͸͋Δɻ SOLIDݪଇͱ͔ ୯Ұ੹೚ͱ͔ ୯Ұ੹೚ͱ͔ ୯Ұ੹೚ͱ͔ ... 46 47 1. ͯͯ͞͞ લఏͱͯ͠...

Slide 47

Slide 47 text

ۃ࿦SOLIDݪଇΛશһ͕ ߴ͍ਫ४Ͱ࣮ݱͰ͖Ε͹ࠔΒͳ͍ Ͱ΋ͦ͏͸͍͔ͳ͍... ࢓૊Έͱͯ͠ղܾ͢Δඞཁ͕͋Δ ɾݎ࿚ʹ͢΂͖෦෼ ɾ଎౓΍ख཭ΕΛॏࢹ͍ͨ͠෦෼ Λ෼཭Ͱ͖Δͱͳ͓ྑ͍ 47 48 1. ͯͯ͞͞

Slide 48

Slide 48 text

ϚΠΫϩαʔϏεԽͱ͔΋͋Δ ࣄલʹ໌֬ʹڥքΛҾ͘ඞཁ͋Γ ޙ͔Βमਖ਼͕ޮ͔ͤͮΒ͍ ৔߹ʹΑͬͯ͸։ൃ଎౓્֐ཁҼͱͳΓ͑Δ ܾࡁ / ೝূج൫ͱ͔͸੹຿Λ໌֬ԽͰ͖ΔྖҬ͸ ϚΠΫϩαʔϏεԽࡁΈ 48 49 1. ͯͯ͞͞

Slide 49

Slide 49 text

DDD υϝΠϯΦϒδΣΫτʹண໨ 49 50 1. ͯͯ͞͞ ݁Ռͱͯ͠...

Slide 50

Slide 50 text

υϝΠϯΤΩεύʔτ ϢϏΩλεݴޠͰձ࿩͕Ͱ͖Δͱ͔ ϞσϧΛܧଓతʹ੒௕͍ͤͯ͘͞ͱ͔... ͸࣍ͷεςοϓͰ 1. ݎ࿚ɺ2. ஌ࣝͷू໿ ͕·ͣ͸ओ໨త 50 51 1. ͯͯ͞͞ DDDͱ͍ͬͯ΋... ↑͜Ε΋ॏཁͰ͕͢ओͨΔ՝୊Ͱͳ͍ͷͰɺ࠷ॳ͸ߟ͑ͳ͍ ɹ࠷ॳ͔Β͋Ε΋͜Ε΋ͩͱࠞཚͯ͠͠·͏ͷͰ...

Slide 51

Slide 51 text

ͰɺͲ͏ͨ͠ͷʁ 0ϕʔεͰ࡞Γ௚͠ʁ 51 52 1. ͯͯ͞͞

Slide 52

Slide 52 text

طଘͷߏ੒Λ׆͔͠ͳ͕Β࣮૷ 52 53 1. ͯͯ͞͞

Slide 53

Slide 53 text

طଘͷߏ੒Λ׆͔͠ͳ͕Β࣮૷ 53 54 1. ͯͯ͞͞ ࣮ࡍʹͳʹΛͨ͠ͷ͔ʁ

Slide 54

Slide 54 text

طଘ࣮૷ ϨΠϠʔυߏ଄ 54 55 1. ͯͯ͞͞ DB(firestore)΁ͷґଘ౓େ serviceϨΠϠͰ΋ґଘ࣮ͨ͠૷಺༰ service -> service -> service … Έ͍ͨͳߏ଄..͚ͬ͜͏͋Δ DBͷܕ৘ใ υΩϡϝϯτύεͷఆٛ (table໊+primaryKeyΈ͍ͨͳ΋ͷ)

Slide 55

Slide 55 text

·ͣ͸ɺͱΓ͋͑ͣɺ DAOͷฦ٫஋ΛΫϥεͰฦ٫ ͦ͜ʹϝιουΛੜ΍͢ ߋ৽΋Ϋϥεड͚औͬͯߋ৽͢Δ 55 56 1. ͯͯ͞͞ طଘͷॲཧ͸ͦͷ··ɺ ৽ͨʹͭ͘Δ෦෼Λ ·ͣ͸Ϋϥε࢖࣮ͬͯ૷ͯ͠ΈΔ ͬͯͱ͜Ζ͔Β࢝ΊΔ

Slide 56

Slide 56 text

56 57 1. ͯͯ͞͞

Slide 57

Slide 57 text

57 58 1. ͯͯ͞͞ before after

Slide 58

Slide 58 text

Is this DDD ... ? (͜Ε͕DDDʁ) ͬͯ࿩͸͋Δ͕ɺ͜Ε͚ͩͰ΋ղܾͰ͖Δ໰୊͸͋Δ ҎԼͷج൫͕Ͱ͖Δ ɾΫϥε಺ͷϧʔϧΛఆٛͰ͖Δ ɾৼΔ෣͍ΛఆٛͰ͖Δ 58 59 1. ͯͯ͞͞

Slide 59

Slide 59 text

59 60 1. ͯͯ͞͞ ؆୯ʹ௥ՃͰ͖Δ͜ͱ ɾॳظԽঢ়ଶͷ໌ࣔ ɾόϦσʔγϣϯͷ໌ࣔ ɾৼΔ෣͍ΛఆٛͰ͖Δ ɾϞσϧ಺ͷ੔߹ੑΛ୲อͰ͖Δ ͜͜·ͰͰ΋ҙຯ͸͋Δʂ ͞ΒʹͲ͏ղܾ/վળ͍͔ͯ͘͠ ՝୊ / ղܾ͍ͨ͠ϙΠϯτ ʹԠ֦ͯ͡ு͍͚ͯ͠͹OKʂ

Slide 60

Slide 60 text

΍ͬͨ͜ͱ ɾEntityΛ·ͣ͸ ɾRepositoryͰ·͠ʹ ɾ࣍ʹValueObject ɾϞσϧؒ੔߹ੑ୲อͷͨΊͷू໿ ɾݎ࿚ੑڧԽͷͨΊͷFirstCollection ɾ͞ΒͳΔ஌ࣝͷू໿ʹ͸DomainService ɾརศੑͷͨΊͷCQR ɾൈ͚݀ݮΒͨ͢ΊʹσΟϨΫτϦ࠶ߟ ɾૄ݁߹ଅਐʹ͸DomainEvent΋͋Γ 60 61 1. ͯͯ͞͞

Slide 61

Slide 61 text

΍ͬͨ͜ͱ ɾEntityΛ·ͣ͸ ɾRepositoryͰ·͠ʹ ɾ࣍ʹValueObject ɾϞσϧؒ੔߹ੑ୲อͷͨΊͷू໿ ɾݎ࿚ੑڧԽͷͨΊͷFirstCollection ɾ͞ΒͳΔ஌ࣝͷू໿ʹ͸DomainService ɾརศੑͷͨΊͷCQR ɾൈ͚݀ݮΒͨ͢ΊʹσΟϨΫτϦ࠶ߟ ɾૄ݁߹ଅਐʹ͸DomainEvent΋͋Γ 61 62 1. ͯͯ͞͞

Slide 62

Slide 62 text

Repository 62 63 1. ͯͯ͞͞ UsecaseϨΠϠͰ Entity㱻Objectͷม׵ ͍ͯ͠Δ͔Β ݎ࿚ੑ͸௿͍ EntityͰنఆ͍ͯ͠Δ ੍ޚʹج͍ͮͯ σʔλ͕ొ࿥ ͞ΕΔ͔ະఆ

Slide 63

Slide 63 text

63 64 1. ͯͯ͞͞ Repository

Slide 64

Slide 64 text

64 65 1. ͯͯ͞͞ Repository

Slide 65

Slide 65 text

65 66 1. ͯͯ͞͞ ValueObject (ݎ࿚ԽͷڧԽ) validationΛ໌ࣔͰ͖Δ ৼΔ෣͍ΛఆٛͰ͖Δ

Slide 66

Slide 66 text

΋͙΋͙ ͓͍͍͠ʂʁ 66 67

Slide 67

Slide 67 text

΍ͬͯΈͯྑ͔ͬͨʂ ౰ॳݟࠐʹൺ΂͢ΜͳΓಋೖͰ͖ͨʂ 67 68 1. ΋͙΋͙

Slide 68

Slide 68 text

ɾϧʔϧ͕ݫ֨ʹͳΔ & ू໿͞ΕΔ ɾʮૢ࡞ʯʮߋ৽ʯ͕෼཭͞Ε໌ࣔతʹͳΔ ɾϞσϧͷʮৼΔ෣͍ʯʹ஫ҙ͕޲͘Α͏ʹͳΔ ɾusecase͕࣮૷͠΍͍͢εοΩϦ͢Δ 68 69 1. ΋͙΋͙ ྑ͔ͬͨ͜ͱ

Slide 69

Slide 69 text

ɾؔ਺ͷύϥϝʔλ͕౷Ұ͞Ε͖ͬ͢Γͨ͠ ɾอଘલͷ৘ใΛEntity಺ʹ࣋ͨͤΔ͜ͱͰɺ ɹrepositoryͷॲཧ͕εοΩϦͨ͠ ɾӨڹൣғ͕ΑΓ໌֬ʹͳͬͨ 69 70 1. ΋͙΋͙ ྑ͔ͬͨ͜ͱ (෭࣍తޮՌ)

Slide 70

Slide 70 text

70 71 1. ΋͙΋͙ ޮՌߴ͔ͬͨ͜ͱ ɾValueObject ϑΥʔϚοτ΍ϧʔϧΛΑΓ໌֬ʹͰ͖Δ ɾDomainService ϞσϧؒͷϧʔϧΛෑ͘͜ͱ͕Ͱ͖Δ ɾσΟϨΫτϦ੔ཧ ϧʔϧΛపఈ͢ΔͨΊʹඞཁ

Slide 71

Slide 71 text

ɾطଘϑΝΠϧͷߏ੒ͱͷซ༻ ɾஈ֊తಋೖ ɾݎ࿚ԽͷͨΊͷpackageߏ੒ ɾιʔεهࡌྔΛ΁Βͨ͢Ίͷ࢓૊ ɾมߋલޙͷ৘ใΛ΋ͨͤΔΑ͏ʹ ɾtransactionͷ؅ཧ 71 72 1. ΋͙΋͙ ޻෉఺ ɾloggerɺdeep cloneɺ ɾreadOnly ɾvalueObjectͷdefault checker ɾtypeUtils ɾtoFirestoreͷconverter ɾlooseEntityͰgetterͷσϑΥ࣮૷ ɾDIपΓ

Slide 72

Slide 72 text

ɾ৑௕Ͱ࣮૷ྔ͕ଟ͘ͳΔɻվળͷ༨஍͋Γɻ ɾ΍Δ/΍ΒΛ໌֬ʹ͠ͳ͍ͱ͙͢ΧΦεʹͳΔ ɾ΍Γͳ͕Βߋ৽͢Δ͕සൟʹൃੜ͢Δ ɾϞσϧ࡞ΓࠐΈ -> ࣮૷͸ίεύΑ͘ͳ͔ͬͨ... ɾνʔϜ΁ͷల։΋͙͢ʹ͸Ͱ͖ͳ͍ 72 73 1. ΋͙΋͙ େมͩͬͨ͜ͱ

Slide 73

Slide 73 text

ɾ࣮૷લͷϞσϦϯά ɾڥք͚ͮΒΕͨίϯςΩετ ɾू໿୯ҐͰͷΈͷߋ৽ 73 74 1. ΋͙΋͙ ΍Βͳ͔ͬͨ͜ͱ

Slide 74

Slide 74 text

͠Ί 74 75

Slide 75

Slide 75 text

ॏཁͳͷ͸ DDDͱͯ͠ Ͳ͏͋Δ΂͖͔ Ͱ͸ͳ͘ 1. खஈͱͯ͠ଥ౰͔ 2. ՝୊ΛղܾͰ͖Δ͔ 1. ;Ή;Ή 75 76

Slide 76

Slide 76 text

Ή͠Ζɺ࠷ॳ͔ΒϞσϧԽ͸೉͍͠...ʂʂʂʂ ΧϓηϧԽΛਪ͠ਐΊ͍͔ͨΒɺϞσϦϯάͷॏཁੑ͕ਁಁͯ͠ υϝΠϯۦಈͷϞσϦϯάʹྗ͕஫͗͜·Ε͍ͯ͘ ͬͯϕΫτϧ͕ࣗવͳؾ͕͢Δ... 76 77 1. ͠Ί

Slide 77

Slide 77 text

DDDΛऔΓೖΕͯ΋ɺ؆୯ʹղܾ͢Δ΋ͷͰ͸ͳ͍ɻ ୯७ʹઃܭ͕ॏཁʂʂʂʂʂʂ ࿪Έͷ͋Δ࣮૷͕ͮ͠Β͍ ઃܭΛ޲্͢Δ͜ͱΛิॿͯ͘͠ΕΔ 77 78 1. ͠Ί

Slide 78

Slide 78 text

ࠓޙ ● ϞσϧΛνʔϜ/૊৫Ͱৢ੒͍ͯ͘͠࢓૊Έͮ͘Γ ● ValueObjectͷීٴ (஋ͷ؅ཧͷ࢓ํʹϧʔϧ͕༗Δ΍ͭ) ● υϝΠϯΠϕϯτͷಋೖ ● ࣮૷ྔͷ௿ݮ ● DomainModel ← infractructure ͷιʔε࣮૷ྔ௿ݮ ● ࢀর༻σʔλͱͷ࿈ܞڧԽ ● τϥϯβΫγϣϯ؅ཧͷ؅ཧ ● ྖҬͷ੾Γํͷྑ͍ํ๏ͷ໛ࡧ 78 79 1. ͠Ί

Slide 79

Slide 79 text

Ͳ͔͜Ͱ࿩ͤΔͱ͍͍ͳͱࢥ͏͜ͱ ● Ϗδωεͷ࿩ ● ந৅Խ / ߏ଄Խ / ൚༻ԽΛ໨ࢦ͢։ൃͷ࿩ ● ՝୊ͷৄࡉ / ࣮ྫɺͱղܾํ๏ ● ҎԼཁૉͷ࢖͍ํৄࡉ / ࣮ྫ ○ ValueObject / Entity / DomainService / DomainEvent ● ϞσϦϯάͷ࢓ํ ͱ ࣮ྫ ● σʔλߋ৽࣌ͷτϥϯβΫγϣϯ؅ཧͷ࢓ํͱ޻෉఺ৄࡉ ● ॏෳνΣοΫͷػߏͷ࣮ݱͷ࢓ํ࣮ྫ (DomainService) ● ΧϓηϧԽͷ࣮ݱ౓߹ɺgetter, setterͱ͔Ͳ͏࣮ݱͯ͠Δ͔ ● ίετෛՙͱͷ޲͖߹͍ํ ● σΟϨΫτϦߏ੒ ● ͓ͷ͓ͷಉ͡ࣄ৅ʹ͍ͭͯϞσϦϯάͯ͠ɺσΟϕʔτͷ࣮ԋ 79 80 1. ͠Ί

Slide 80

Slide 80 text

΍ͬͯΈͯΘ͔Δ͜ͱ͕ଟ͍ ࠓճͷΑ͏ʹٞ࿦Ͱ͖Δ৔͸وॏʂʂ 80 81 1. ͠Ί

Slide 81

Slide 81 text

͓·͚ 81 82

Slide 82

Slide 82 text

1. ͸͡Ίʹ twitter ͸͡Ίͯ·͢ʂ ϑΥϩʔ͓ئ͍͠·͢ʂ @takuuuuuuu777 ϑΥϩʔ͍ͨ͠ͱࢥͬͯ΋Β͑ΔΑ͏ͳ ൃදͰ͖ͯͨΒ͍͍ͳ... 82 83

Slide 83

Slide 83 text

1. ͓·͚ Meety ࡞੒͠·ͨ͠ʂ ʮDDDʯʹ͍ͭͯ ΋ͬͱޠΒ͍͍ͨΑʂ ΋ͬͱৄ͍͠࿩͍ͨ͠/ฉ͖͍ͨΑʂ ͬͯํ͸ͥͻʂ ※ ࢲͷtwitterͷݻπΠʹهࡌͯ͠·͢ 83 84

Slide 84

Slide 84 text

84

Slide 85

Slide 85 text

Appendix 85 86 ● DomainModel ← infractructure ͷ ιʔε࣮૷ྔ௿ݮ

Slide 86

Slide 86 text

Domain Object ͷશମ૾ 86 87 1. Appendix

Slide 87

Slide 87 text

Entity / ValueObject 87 88 1. Appendix

Slide 88

Slide 88 text

AbstractDomainObject 88 89 1. Appendix

Slide 89

Slide 89 text

AbstractLooseEntity 89 90 1. Appendix

Slide 90

Slide 90 text

AbstractValueObject 90 91 1. Appendix

Slide 91

Slide 91 text

DIͷ࣮ݱํ๏ 91 92 1. Appendix

Slide 92

Slide 92 text

DIͷ࣮ݱํ๏ 92 93 1. Appendix

Slide 93

Slide 93 text

Queue Smaple 93 94 1. Appendix

Slide 94

Slide 94 text

Queue Smaple આ໌ 94 95 1. Appendix ■ Queue ɾQueue Λ؅ཧ͢ΔͨΊͷσʔλ ɾॲཧத͔൱͔ɺॲཧ͍ͯ͠Δ task ͕ͳʹ͔ͳͲΛ؅ཧ͢Δ ■ QueueTask ɾQueue ʹੵ·ΕͨλεΫ ɾॲཧதͱͳΔλΠϛϯάͰ࡟আ͞Εɺॲཧʹࣦഊ͠ϦτϥΠର৅ͱͳͬͨλΠϛϯάͰ࠶ੜ੒͞ΕΔ ɾجຊతʹ͸ enqueue ͞Εͨ೔࣌ॱʹλεΫΛ࣮ߦ͢Δ ɾ༏ઌ౓͕ࢦఆ͞Εͯݴ͏৔߹ʹ͸༏ઌ౓͕ߴ͍ॱʹ࣮ߦ͢Δ ■ QueueTaskResult ɾQueue ͷ࣮ߦ݁ՌΛ؅ཧ͢ΔͨΊͷσʔλ ɾॲཧࣦഊͯ͠ϦτϥΠ͢Δ৔߹ͳͲ͸ɺϦτϥΠ͝ͱʹ݁ՌσʔλΛੜ੒͢Δ ɾTaskEntry ʹ͸࠷ऴతͳ݁ՌͷΈ֨ೲ͢Δ ■ QueueEntry ɾQueue λεΫΛ؅ཧ͢Δݩσʔλ ɾλεΫੜ੒࣌ʹຊσʔλ͕ੜ੒͞ΕΔ ɾλεΫ࣮ߦʹඞཁͳ৘ใͱɺ࠷௿ݶͷεςʔλεͷ؅ཧΛߦ͏ ɾ࣮ࡍʹ Queue ্ͷσʔλભҠΛ؅ཧ͢Δσʔλ͸ผ ■ QueueEntrySubtask ɾ1 ͭͷ Entry Λ࣮ݱ͢ΔͨΊʹෳ਺ͷ Task Λ࣮ߦ͢Δඞཁ͕͋Δ৔߹ʹ ɹෳ਺ͷ Task Λ SubTask ͱͯ͠؅ཧ͢Δ