ぼくがかんがえたさいきょうの SoR/SoE あーきてくちゃ #kichijojipm

ぼくがかんがえたさいきょうの SoR/SoE あーきてくちゃ #kichijojipm

0b40b09ee30366ddfe68070d94d7ee3f?s=128

Akira Suenami

May 17, 2019
Tweet

Transcript

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

  2. ࣗݾ঺հ • ຤ฒ ߊʢ͑͢ͳΈ ͖͋Βʣ @a_suenami • ޷͖ͳ΋ͷ͸ RDB ͱ͔ΦϒδΣΫτࢦ޲ͱ͔

    TDD ͱ͔ɻ • ʮԿ΍ͬͯΔΜͰ͔͢ʁʯͬͯΑ͘ฉ͔Ε·͕͢ɺ։ൃͷϚωδϝ ϯτ΍ͬͯͨΓɺٕज़ސ໰తͳ͜ͱ΍ͬͯͨΓɺࣗ෼ࣗ਎Ͱ΋Rails ΞϓϦέʔγϣϯॻ͍ͨΓReactΞϓϦέʔγϣϯॻ͍ͨΓͯͯ͠ɺ ΋͏໘౗ͳͷͰΑ͘ʮແ৬Ͱ͢ʯͬͯݴͬͯ·͕͢ҰԠ࢓ࣄͯ͠· ͢ɻ
  3. ຊൃදʹ͍ͭͯ • ʮ৽͍࣌͠୅ͷελʔτͷɺॳΊͷҰาʯ͜ͱͱ͍͏͜ͱͰɺ࠷ۙ SoRʢSystem of RecordʣͱSoEʢSystem of Engagementʣʹ͍ͭ ͍ͯΖ͍Ζߟ͍͑ͯΔͷͰɺࣗ෼ࣗ਎ͷࢥߟ੔ཧͷͨΊʹ΋͜ͷ৔ Ͱ͓࿩ͯ͠ҙݟͱ͔΋Β͑Δͱخ͍͠Ͱ͢ͶͬͯओࢫͰ͢ɻ

    • ઈࢍࢼߦࡨޡதͰ·ͩ۩ମతʹԿ͔੒Ռ͕ग़ͯΔ͍ͬͯ͏ײ͡Ͱ͸ ·ͩͳ͍ͷͰɺ͍Ζ͍ΖϑΟʔυόοΫ͍͚ͨͩΔͱ޾͍Ͱ͢ɻ
  4. SoR ͱ SoE

  5. SoRͱSoE • SoR: System of Record • ͦͷ໊ͷ௨Γɺʮه࿥ʯͷͨΊͷγεςϜɻ • ೖྗͷࣄલνΣοΫͷݎ࿚ੑɺσʔλ੔߹ੑͷ୲อͳͲ͕ٻΊΒ

    ΕΔɻ • SoE: System of Engagement • ར༻ऀͱͷؔ܎Λߏங͢ΔͨΊͷγεςϜɻ • ࠓͲ͖ͷݴ༿Λ࢖͏ͱΑ͍ UX Λఏڙ͢ΔͨΊͷγεςϜɺͱݴ ͍׵͑ͯ΋Α͍ɻ
  6. SoRͱSoE • τϥσΟγϣφϧͳιϑτ΢ΣΞ։ൃʹର͢Δ஌ݟ΍ύλʔϯͳͲ ʢPoEAAͳͲʣ͸ SoR ͷͨΊͷ΋ͷͰ͋Δέʔε͕ଟ͍ɻ • ٯʹ SoE ʹର͢Δઃܭ͸ݱࡏਐߦܥͰ֤͕ࣾ޻෉ɾڞ༗͍ͯ͠Δͱ

    ײ͍ͯͯ͡ɺͨͱ͑͹֤Ϋϥ΢υϕϯμʔ͕ެ։͍ͯ͠ΔΫϥ΢υ σβΠϯύλʔϯͳͲ͸ʢSoR ޲͚ͷ΋ͷ΋͋Δ͕ʣSoE Λࢧ͑Δ ͨΊ΋ͷͰ͋Δ͜ͱ΋ଟ͍ɻ • ͢΂ͯͷγεςϜ͕໌֬ʹͲͪΒ͔ʹଐ͢ΔΘ͚Ͱ͸ͳ͘ɺSoR త ଆ໘ͱ SoE తଆ໘Λ͕࣋ͭɺ͔ͳΓڧΊʹͲͪΒ͔ͷੑ࣭Λ࣋ͭ͜ ͱ΋গͳ͘ͳ͘ɺͦ͏͍ͬͨ৔߹ʹઃܭ൑அΛؒҧ͑Δͱͦͷޙͷ ϝϯςφϯεʹଟେͳӨڹΛ༩͑ΔͷͰ஫ҙ͕ඞཁɻ
  7. SoR ʹ͍ͭͯ • SoR ʹ͍ͭͯ͸ͱΓ͋͑ͣ͜ͷ͋ͨΓಡΜͰ͓͚͹͍͍Μ͡Όͳ͍ Ͱ͔͢Ͷɻʢࡶʣ

  8. υϝΠϯͱ͸ʁ • ΤϦοΫɾΤϰΝϯεͷ DDD ຊ ʹॻ͔Ε͍ͯΔઃܭύλʔϯ͸ SoR తଆ໘͕ڧ͗͢Δͱײ͡Δɻ • Ͱ΋ɺI/O

    ʹ͸ I/O ͷɺϓϨθϯ ςʔγϣϯʹ͸ϓϨθϯςʔγϣ ϯͷυϝΠϯ͕͋ΔͷͰ͸ͳ͍͔ʁ • γεςϜͷ໨త͕ҧ͏ͷͰ͋Ε͹ɺ ͦΕͧΕͷυϝΠϯʹۦಈ͞ΕΔ ΄͏͕͍͍͸ͣɻ
  9. SoR / SoE ରൺ SoR SoE جຊతͳઃܭ؍఺ σʔλ੔߹ੑ ॊೈੑɺੑೳ σʔλετΞ

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

  11. ۩ମతΞʔΩςΫνϟ

  12. ۩ମతΞʔΩςΫνϟ • SoR • ҰൠతͳΞϓϦέʔγϣϯ + RDBͷߏ੒ • ΤϦοΫɾΤϰΝϯεͷ DDD

    ຊ΍ͷઃܭ౳͕ग़ͯ͘Δ͜ͱ͕ଟ͍ɻ • SoE • SPA • BFF + Ωϟογϡ༻σʔλετΞʢϚςϦΞϥΠζυɾϏϡʔ, Redis, DynamoDB, ElasticSearchʣ + CDN • ʮCDNʹΩϟογϡͤ͞Δ୯ҐͰʯΤϯυϙΠϯτΛઃܭ͢Δɻ
  13. ͍Ζ͍Ζ࿩͍ͨ͜͠ͱ͋ΔΜͰ͕͢ ࠓ೔͸ 10 ෼͔͠ͳ͍ͷͰ

  14. ੔߹ੑͷ࿩

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

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

  17. άϩʔόϧͳ੔߹ੑͱϢʔβϩʔΧϧͳ੔߹ੑ • SoR ͷઃܭ͸ੈքશମʢେ͛͞ʣΛ໢ཏతʹ؍࡯͢Δඞཁ͕͋Γɺ SoE ͷઃܭ͸ར༻ऀҰਓͻͱΓΛ஫ҙਂ͘؍࡯͢Δඞཁ͕͋Δɻ • SoE ʹ͓͚Δ෭࡞༻Λ൐͏ϦΫΤετ͸จࣈ௨ΓʮϦΫΤετʯͰ͋ Γɺඞͣ͠΋ಉظతɾଈ࣌తʹ׬ྃ͢Δ΋ͷͱ͸ݶΒͳ͍ɺͭ·Γ݁

    Ռ੔߹ੑ͔͠୲อ͞Εͳ͍ͱ͍͏ҙࣝͰઃܭΛ৺͕͚ΔͱΑ͍ɻ • SoR ͸ SoE ͔ΒͷϦΫΤετΛड͚ͱͬͨͱ͍͏ࣄ࣮ͷΈΛฦ͠ɺ SoE ͸ͦΕΛड͚ͱͬͨޙʹʮͦͷར༻ऀͷੈքʹ͓͚Δঢ়ଶʯΛม ߋ͢Δɻ
  18. ͦ͏͸ݴͬͯ΋ άϩʔόϧͳ੔߹ੑ͕ ٻΊΒΕΔ͜ͱ΋͋ΔͰ͠ΐ͏ʁ

  19. ΋ͪΖΜ͋Γ·͢ɻ

  20. SoE Ͱάϩʔόϧͳ੔߹ੑ͕ඞཁͳྫ • ࡏݿ͕ͳ͍ͷʹߪೖʢͷड෇ʣΛͯ͠͠·ͬͨɻ • ΫϨδοτΧʔυͷݶ౓ֹΛ௒͍͑ͯΔͷʹߪೖʢ͈́ • ಉ͡ϝʔϧΞυϨεͷਓ͕͢Ͱʹొ࿥͍ͯ͠Δͷʹձһొ࿥ʢͷड෇ʣ Λͯ͠͠·ͬͨɻ ্هͷΑ͏ͳෆ੔߹ͳϦΫΤετ͸

    System of “Engagement” ͱͯ͠͸඼࣭͕͍͍ͱ͸ݴ͑ͳ͍ɻ Ͱ͖Δ͚ͩૣ͍λΠϛϯάͰͦͷϦΫΤετΛड͚෇͚Δ͜ͱ͸Ͱ ͖ͳ͍͜ͱΛར༻ऀʹڭ͑ͯ͋͛Δ΂͖Ͱ͋Δɻ
  21. SoE Ͱͷάϩʔόϧͳ੔߹ੑͷར༻ • ϦΫΤετՄೳ͔Ͳ͏͔ΛԠ͑ΔʢՄೳͳ৔߹ɺϩοΫΛͱΔɺ΋͘͠͸༧໿͢ΔʣΤϯυϙΠϯτΛ SoR ʹ࣮૷͠ɺ͜ΕΒ͸ඇಉظͳ݁Ռ੔߹ੑͰ͸ͳ͘ಉظతʹ SoE ʹ݁ՌΛฦ͢Α͏ʹ͢Δɻ • ܾࡁγεςϜͷ༩৴ͱܾࡁ֬ఆͷؔ܎ʹ͍ۙɻ

    • ϦΫΤετՄ൱ͷ֬ೝͱ࣮ࡍͷ࣮ߦΛ෼͚Δ͜ͱͰɺੑೳ΍଱ো֐ੑͷ໘Ͱ඼࣭ͷߴ͍γεςϜΛߏ ங͢Δ͜ͱ͕Ͱ͖Δɻ • BFF ͕͋Δ৔߹ɺͦͷޙΖʹ͋Δ SoR ʹର͢ΔϦόʔεϓϩΩγͱͯ͠ͷΈৼΔ෣͏͜ͱʹͳΔɻ
  22. ·ͱΊ • γεςϜͷઃܭΛߟ͑Δͱ͖ɺͦΕ͕ SoR తଆ໘͕ڧ͍γεςϜͳ ͷ͔ɺSoE తଆ໘͕ڧ͍γεςϜͳͷ͔Λҙࣝ͢Δͱ͍͍͜ͱ͕͋ Δ͔΋͠Ε·ͤΜɻ • SoE

    తͳઃܭϊ΢ϋ΢͸͸·ͩ·ͩੈͷதʹগͳ͍ͱࢥ͍ͬͯΔͷ ͰΈͳ͞ΜͲΜͲΜൃ৴͖ͯ͠·͠ΐ͏ɻ • SoR తͳઃܭ΋Ϋϥ΢υϕϯμʔ౳ʑʹΑͬͯมԽ͍͖͍ͯͯ͠Δ ͜ͱ͕͋Δͱࢥ͏ͷͰɺͲΜͲΜൃ৴ʢ͈́ • άϩʔόϧͳ੔߹ੑͱϢʔβϩʔΧϧͳ੔߹ੑ͸ҧ͏Αʂ
  23. ͱ͍͏Θ͚ͰɺҰ۟ʢҰटʣ ઃܭΛ ۦಈ͢Δͷ͕ Կͳͷ͔ ݟۃΊΔ͜ͱͦ͜ ઃܭͳΓ͚Γ

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