Slide 1

Slide 1 text

΅͕͔͘Μ͕͍͖͑ͨ͞ΐ͏ͷ SoR/SoE͋ʔ͖ͯͪ͘Ό ٢঵ࣉpm#18 2019/05/17 ͑͢ͳΈ ͖͋Β Twitter: @a_suenami Github: a-suenami

Slide 2

Slide 2 text

ࣗݾ঺հ • ຤ฒ ߊʢ͑͢ͳΈ ͖͋Βʣ @a_suenami • ޷͖ͳ΋ͷ͸ RDB ͱ͔ΦϒδΣΫτࢦ޲ͱ͔ TDD ͱ͔ɻ • ʮԿ΍ͬͯΔΜͰ͔͢ʁʯͬͯΑ͘ฉ͔Ε·͕͢ɺ։ൃͷϚωδϝ ϯτ΍ͬͯͨΓɺٕज़ސ໰తͳ͜ͱ΍ͬͯͨΓɺࣗ෼ࣗ਎Ͱ΋Rails ΞϓϦέʔγϣϯॻ͍ͨΓReactΞϓϦέʔγϣϯॻ͍ͨΓͯͯ͠ɺ ΋͏໘౗ͳͷͰΑ͘ʮແ৬Ͱ͢ʯͬͯݴͬͯ·͕͢ҰԠ࢓ࣄͯ͠· ͢ɻ

Slide 3

Slide 3 text

ຊൃදʹ͍ͭͯ • ʮ৽͍࣌͠୅ͷελʔτͷɺॳΊͷҰาʯ͜ͱͱ͍͏͜ͱͰɺ࠷ۙ SoRʢSystem of RecordʣͱSoEʢSystem of Engagementʣʹ͍ͭ ͍ͯΖ͍Ζߟ͍͑ͯΔͷͰɺࣗ෼ࣗ਎ͷࢥߟ੔ཧͷͨΊʹ΋͜ͷ৔ Ͱ͓࿩ͯ͠ҙݟͱ͔΋Β͑Δͱخ͍͠Ͱ͢ͶͬͯओࢫͰ͢ɻ • ઈࢍࢼߦࡨޡதͰ·ͩ۩ମతʹԿ͔੒Ռ͕ग़ͯΔ͍ͬͯ͏ײ͡Ͱ͸ ·ͩͳ͍ͷͰɺ͍Ζ͍ΖϑΟʔυόοΫ͍͚ͨͩΔͱ޾͍Ͱ͢ɻ

Slide 4

Slide 4 text

SoR ͱ SoE

Slide 5

Slide 5 text

SoRͱSoE • SoR: System of Record • ͦͷ໊ͷ௨Γɺʮه࿥ʯͷͨΊͷγεςϜɻ • ೖྗͷࣄલνΣοΫͷݎ࿚ੑɺσʔλ੔߹ੑͷ୲อͳͲ͕ٻΊΒ ΕΔɻ • SoE: System of Engagement • ར༻ऀͱͷؔ܎Λߏங͢ΔͨΊͷγεςϜɻ • ࠓͲ͖ͷݴ༿Λ࢖͏ͱΑ͍ UX Λఏڙ͢ΔͨΊͷγεςϜɺͱݴ ͍׵͑ͯ΋Α͍ɻ

Slide 6

Slide 6 text

SoRͱSoE • τϥσΟγϣφϧͳιϑτ΢ΣΞ։ൃʹର͢Δ஌ݟ΍ύλʔϯͳͲ ʢPoEAAͳͲʣ͸ SoR ͷͨΊͷ΋ͷͰ͋Δέʔε͕ଟ͍ɻ • ٯʹ SoE ʹର͢Δઃܭ͸ݱࡏਐߦܥͰ֤͕ࣾ޻෉ɾڞ༗͍ͯ͠Δͱ ײ͍ͯͯ͡ɺͨͱ͑͹֤Ϋϥ΢υϕϯμʔ͕ެ։͍ͯ͠ΔΫϥ΢υ σβΠϯύλʔϯͳͲ͸ʢSoR ޲͚ͷ΋ͷ΋͋Δ͕ʣSoE Λࢧ͑Δ ͨΊ΋ͷͰ͋Δ͜ͱ΋ଟ͍ɻ • ͢΂ͯͷγεςϜ͕໌֬ʹͲͪΒ͔ʹଐ͢ΔΘ͚Ͱ͸ͳ͘ɺSoR త ଆ໘ͱ SoE తଆ໘Λ͕࣋ͭɺ͔ͳΓڧΊʹͲͪΒ͔ͷੑ࣭Λ࣋ͭ͜ ͱ΋গͳ͘ͳ͘ɺͦ͏͍ͬͨ৔߹ʹઃܭ൑அΛؒҧ͑Δͱͦͷޙͷ ϝϯςφϯεʹଟେͳӨڹΛ༩͑ΔͷͰ஫ҙ͕ඞཁɻ

Slide 7

Slide 7 text

SoR ʹ͍ͭͯ • SoR ʹ͍ͭͯ͸ͱΓ͋͑ͣ͜ͷ͋ͨΓಡΜͰ͓͚͹͍͍Μ͡Όͳ͍ Ͱ͔͢Ͷɻʢࡶʣ

Slide 8

Slide 8 text

υϝΠϯͱ͸ʁ • ΤϦοΫɾΤϰΝϯεͷ DDD ຊ ʹॻ͔Ε͍ͯΔઃܭύλʔϯ͸ SoR తଆ໘͕ڧ͗͢Δͱײ͡Δɻ • Ͱ΋ɺI/O ʹ͸ I/O ͷɺϓϨθϯ ςʔγϣϯʹ͸ϓϨθϯςʔγϣ ϯͷυϝΠϯ͕͋ΔͷͰ͸ͳ͍͔ʁ • γεςϜͷ໨త͕ҧ͏ͷͰ͋Ε͹ɺ ͦΕͧΕͷυϝΠϯʹۦಈ͞ΕΔ ΄͏͕͍͍͸ͣɻ

Slide 9

Slide 9 text

SoR / SoE ରൺ SoR SoE جຊతͳઃܭ؍఺ σʔλ੔߹ੑ ॊೈੑɺੑೳ σʔλετΞ τϥϯβΫγϣφϧͳDB ଟ͘ͷ৔߹ɺRDB εέʔϥϏϦςΟ͕͋Δߴ଎ͳσʔ λετΞ υΩϡϝϯτࢦ޲DBɺKVSɺશจݕ ࡧΠϯσοΫεͳͲ ϦϦʔεαΠΫϧ SoEͱൺ΂Δͱ૬ରతʹ௕͍ʢॾઆ͋ Δ͔΋ʣ ߴ଎ͳϦϦʔεαΠΫϧ͕ٻΊΒΕΔ ඼࣭ධՁ τϥσΟγϣφϧͳιϑτ΢ΣΞςε ςΟϯάख๏Λద༻͠΍͍͢ τϥσΟγϣφϧͳख๏ʹՃ͑ɺϢ ʔβʔςετɺϢʔβʔΠϯλϏϡ ʔɺA/BςετͳͲ ΧφϦΞϦϦʔε΋࣮τϥϑΟοΫ Λར༻ͨ͠ςετͱଊ͑Δ͜ͱ͕Ͱ ͖Δ σʔλ੔߹ੑ τϥϯβΫγϣϯ੔߹ੑ͕ඞਢ ݁Ռ੔߹ੑͰΑ͍ཁ݅΋ଟ͍ ཁ͢Δʹʁ ݎ࿚ͳMutation ॊೈͳQuery ઃܭΛۦಈ͢Δʢ͠΍͍͢ʣ΋ͷ υϝΠϯϞσϧɺ֓೦σʔλϞσϧ UIʢϏδϡΞϧσβΠϯɺϢʔβΠϯ λϥΫγϣϯʣɺΩϟογϡ

Slide 10

Slide 10 text

CQRSͱͷؔ܎

Slide 11

Slide 11 text

۩ମతΞʔΩςΫνϟ

Slide 12

Slide 12 text

۩ମతΞʔΩςΫνϟ • SoR • ҰൠతͳΞϓϦέʔγϣϯ + RDBͷߏ੒ • ΤϦοΫɾΤϰΝϯεͷ DDD ຊ΍ͷઃܭ౳͕ग़ͯ͘Δ͜ͱ͕ଟ͍ɻ • SoE • SPA • BFF + Ωϟογϡ༻σʔλετΞʢϚςϦΞϥΠζυɾϏϡʔ, Redis, DynamoDB, ElasticSearchʣ + CDN • ʮCDNʹΩϟογϡͤ͞Δ୯ҐͰʯΤϯυϙΠϯτΛઃܭ͢Δɻ

Slide 13

Slide 13 text

͍Ζ͍Ζ࿩͍ͨ͜͠ͱ͋ΔΜͰ͕͢ ࠓ೔͸ 10 ෼͔͠ͳ͍ͷͰ

Slide 14

Slide 14 text

੔߹ੑͷ࿩

Slide 15

Slide 15 text

άϩʔόϧͳ੔߹ੑͱϢʔβϩʔΧϧͳ੔߹ੑ • SoR తੈք؍Ͱ͸γεςϜશମɺ͋Δ͍͸࿈ܞγεςϜ΋ؚΊͨશ ੈքʢେ͛͞ʣͰෆ੔߹͕ͳ͍͜ͱ͕ٻΊΒΕΔɻ • ҰํɺSoE తੈք؍Ͱ͸ͦΕΛར༻͢Δར༻ऀҰਓͻͱΓ͕ࣗ෼ࣗ ਎ͷੈքΛ͓࣋ͬͯΓɺͦΕ͕ͦͷਓʹͱͬͯ͸ੈքͷ͢΂ͯͰ͋ Δɻ

Slide 16

Slide 16 text

ϢʔβϩʔΧϧͳ੔߹ੑͷྫ • ࣗ෼͕ݟ͍ͯΔੈքͰ͸ʮ͍͍ͶʂʯΛԡ͢ͱɺ͍͍ͶࡁΈʹঢ়ଶ ͕มԽ͢Δɻ • Ͱ΋ɺຊ౰ʹ͍͍Ͷ਺͕Χ΢ϯτΞοϓ͞Εͨͷʁ • ͍͔ͭ૿͑Δ͸͕ͣͩਖ਼֬ʹ͍ͭ૿͑Δ͔͸ຊਓʹ͸Θ͔Βͳ͍ ͠ɺར༻ऀʹͱͬͯ͸ڵຯ΋ͳ͍ɻ

Slide 17

Slide 17 text

άϩʔόϧͳ੔߹ੑͱϢʔβϩʔΧϧͳ੔߹ੑ • SoR ͷઃܭ͸ੈքશମʢେ͛͞ʣΛ໢ཏతʹ؍࡯͢Δඞཁ͕͋Γɺ SoE ͷઃܭ͸ར༻ऀҰਓͻͱΓΛ஫ҙਂ͘؍࡯͢Δඞཁ͕͋Δɻ • SoE ʹ͓͚Δ෭࡞༻Λ൐͏ϦΫΤετ͸จࣈ௨ΓʮϦΫΤετʯͰ͋ Γɺඞͣ͠΋ಉظతɾଈ࣌తʹ׬ྃ͢Δ΋ͷͱ͸ݶΒͳ͍ɺͭ·Γ݁ Ռ੔߹ੑ͔͠୲อ͞Εͳ͍ͱ͍͏ҙࣝͰઃܭΛ৺͕͚ΔͱΑ͍ɻ • SoR ͸ SoE ͔ΒͷϦΫΤετΛड͚ͱͬͨͱ͍͏ࣄ࣮ͷΈΛฦ͠ɺ SoE ͸ͦΕΛड͚ͱͬͨޙʹʮͦͷར༻ऀͷੈքʹ͓͚Δঢ়ଶʯΛม ߋ͢Δɻ

Slide 18

Slide 18 text

ͦ͏͸ݴͬͯ΋ άϩʔόϧͳ੔߹ੑ͕ ٻΊΒΕΔ͜ͱ΋͋ΔͰ͠ΐ͏ʁ

Slide 19

Slide 19 text

΋ͪΖΜ͋Γ·͢ɻ

Slide 20

Slide 20 text

SoE Ͱάϩʔόϧͳ੔߹ੑ͕ඞཁͳྫ • ࡏݿ͕ͳ͍ͷʹߪೖʢͷड෇ʣΛͯ͠͠·ͬͨɻ • ΫϨδοτΧʔυͷݶ౓ֹΛ௒͍͑ͯΔͷʹߪೖʢ͈́ • ಉ͡ϝʔϧΞυϨεͷਓ͕͢Ͱʹొ࿥͍ͯ͠Δͷʹձһొ࿥ʢͷड෇ʣ Λͯ͠͠·ͬͨɻ ্هͷΑ͏ͳෆ੔߹ͳϦΫΤετ͸ System of “Engagement” ͱͯ͠͸඼࣭͕͍͍ͱ͸ݴ͑ͳ͍ɻ Ͱ͖Δ͚ͩૣ͍λΠϛϯάͰͦͷϦΫΤετΛड͚෇͚Δ͜ͱ͸Ͱ ͖ͳ͍͜ͱΛར༻ऀʹڭ͑ͯ͋͛Δ΂͖Ͱ͋Δɻ

Slide 21

Slide 21 text

SoE Ͱͷάϩʔόϧͳ੔߹ੑͷར༻ • ϦΫΤετՄೳ͔Ͳ͏͔ΛԠ͑ΔʢՄೳͳ৔߹ɺϩοΫΛͱΔɺ΋͘͠͸༧໿͢ΔʣΤϯυϙΠϯτΛ SoR ʹ࣮૷͠ɺ͜ΕΒ͸ඇಉظͳ݁Ռ੔߹ੑͰ͸ͳ͘ಉظతʹ SoE ʹ݁ՌΛฦ͢Α͏ʹ͢Δɻ • ܾࡁγεςϜͷ༩৴ͱܾࡁ֬ఆͷؔ܎ʹ͍ۙɻ • ϦΫΤετՄ൱ͷ֬ೝͱ࣮ࡍͷ࣮ߦΛ෼͚Δ͜ͱͰɺੑೳ΍଱ো֐ੑͷ໘Ͱ඼࣭ͷߴ͍γεςϜΛߏ ங͢Δ͜ͱ͕Ͱ͖Δɻ • BFF ͕͋Δ৔߹ɺͦͷޙΖʹ͋Δ SoR ʹର͢ΔϦόʔεϓϩΩγͱͯ͠ͷΈৼΔ෣͏͜ͱʹͳΔɻ

Slide 22

Slide 22 text

·ͱΊ • γεςϜͷઃܭΛߟ͑Δͱ͖ɺͦΕ͕ SoR తଆ໘͕ڧ͍γεςϜͳ ͷ͔ɺSoE తଆ໘͕ڧ͍γεςϜͳͷ͔Λҙࣝ͢Δͱ͍͍͜ͱ͕͋ Δ͔΋͠Ε·ͤΜɻ • SoE తͳઃܭϊ΢ϋ΢͸͸·ͩ·ͩੈͷதʹগͳ͍ͱࢥ͍ͬͯΔͷ ͰΈͳ͞ΜͲΜͲΜൃ৴͖ͯ͠·͠ΐ͏ɻ • SoR తͳઃܭ΋Ϋϥ΢υϕϯμʔ౳ʑʹΑͬͯมԽ͍͖͍ͯͯ͠Δ ͜ͱ͕͋Δͱࢥ͏ͷͰɺͲΜͲΜൃ৴ʢ͈́ • άϩʔόϧͳ੔߹ੑͱϢʔβϩʔΧϧͳ੔߹ੑ͸ҧ͏Αʂ

Slide 23

Slide 23 text

ͱ͍͏Θ͚ͰɺҰ۟ʢҰटʣ ઃܭΛ ۦಈ͢Δͷ͕ Կͳͷ͔ ݟۃΊΔ͜ͱͦ͜ ઃܭͳΓ͚Γ

Slide 24

Slide 24 text

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