Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
ぼくがかんがえたさいきょうの SoR/SoE あーきてくちゃ #kichijojipm
Akira Suenami
May 17, 2019
Technology
13
5.4k
ぼくがかんがえたさいきょうの SoR/SoE あーきてくちゃ #kichijojipm
Akira Suenami
May 17, 2019
Tweet
Share
More Decks by Akira Suenami
See All by Akira Suenami
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か トランザクションスクリプトはどこへ行くのか #sekkeinight
a_suenami
7
2.2k
値と属性の話
a_suenami
0
25
ドメインモデラーにとって受託開発であることは制約なのか?
a_suenami
0
850
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
a_suenami
1
2.1k
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi
a_suenami
0
3.1k
“ユーザーファースト”の功罪 〜分析と実験によるアーキテクチャ設計〜 #bpstudy
a_suenami
4
910
ドメインモデルのつくり方 #5000dai
a_suenami
14
4.1k
ビジネスの構造を扱うアーキテクチャとユーザとの接点を扱うアーキテクチャ #builderscon
a_suenami
27
5.8k
すえなみチャンスからの重要なお知らせ #すえなみチャンス暑気払い
a_suenami
0
470
Other Decks in Technology
See All in Technology
1人目QA奮闘記/QA Engineer's Struggle
mii3king
2
1k
サーバレスECにおける Step Functions の使い方 〜ステートマシン全部見せます!〜
miu_crescent
0
180
History of the ML system in KARTE
kargo113
0
580
JAWS-UG re:Habilitaion 報告 / JAWS-UG OITA rehabilitation
hiranofumio
0
110
Implementing Kubernetes operators in Java with Micronaut - TechWeek Java Summit 2022
alvarosanchez
0
110
ラブグラフ紹介資料 〜プロダクト解体新書〜 / Lovegraph Product Deck
lovegraph
0
140
ROS再入門-はじめてのSLAM-
miura55
0
380
Azure Arc Virtual MachineとAzure Arc Resource Bridge / VM provisioning through Azure portal on Azure Stack HCI (preview)
sashizaki
0
110
UIKitのアップデート #WWDC22
akatsuki174
3
190
Design for Humans: How to make better modernization decisions
indualagarsamy
2
110
スタートアップと技術選定と AWS
track3jyo
PRO
0
210
雑な攻撃からELBを守る一工夫 +おまけ / Know-how to protect servers from miscellaneous attacks
hiroga
0
470
Featured
See All Featured
Design by the Numbers
sachag
271
17k
Become a Pro
speakerdeck
PRO
3
830
Large-scale JavaScript Application Architecture
addyosmani
499
110k
Why You Should Never Use an ORM
jnunemaker
PRO
47
7.4k
Intergalactic Javascript Robots from Outer Space
tanoku
261
25k
Designing Experiences People Love
moore
130
22k
5 minutes of I Can Smell Your CMS
philhawksworth
196
18k
Art Directing for the Web. Five minutes with CSS Template Areas
malarkey
196
9.4k
Automating Front-end Workflow
addyosmani
1351
200k
Designing for Performance
lara
597
63k
Fontdeck: Realign not Redesign
paulrobertlloyd
73
4.1k
What’s in a name? Adding method to the madness
productmarketing
11
1.6k
Transcript
΅͕͔͘Μ͕͍͖͑ͨ͞ΐ͏ͷ SoR/SoE͋ʔ͖ͯͪ͘Ό ٢ࣉpm#18 2019/05/17 ͑͢ͳΈ ͖͋Β Twitter: @a_suenami Github: a-suenami
ࣗݾհ • ฒ ߊʢ͑͢ͳΈ ͖͋Βʣ @a_suenami • ͖ͳͷ RDB ͱ͔ΦϒδΣΫτࢦͱ͔
TDD ͱ͔ɻ • ʮԿͬͯΔΜͰ͔͢ʁʯͬͯΑ͘ฉ͔Ε·͕͢ɺ։ൃͷϚωδϝ ϯτͬͯͨΓɺٕज़ސతͳ͜ͱͬͯͨΓɺࣗࣗͰRails ΞϓϦέʔγϣϯॻ͍ͨΓReactΞϓϦέʔγϣϯॻ͍ͨΓͯͯ͠ɺ ͏໘ͳͷͰΑ͘ʮແ৬Ͱ͢ʯͬͯݴͬͯ·͕͢ҰԠࣄͯ͠· ͢ɻ
ຊൃදʹ͍ͭͯ • ʮ৽͍࣌͠ͷελʔτͷɺॳΊͷҰาʯ͜ͱͱ͍͏͜ͱͰɺ࠷ۙ SoRʢSystem of RecordʣͱSoEʢSystem of Engagementʣʹ͍ͭ ͍ͯΖ͍Ζߟ͍͑ͯΔͷͰɺࣗࣗͷࢥߟཧͷͨΊʹ͜ͷ Ͱ͓ͯ͠ҙݟͱ͔Β͑Δͱخ͍͠Ͱ͢ͶͬͯओࢫͰ͢ɻ
• ઈࢍࢼߦࡨޡதͰ·ͩ۩ମతʹԿ͔Ռ͕ग़ͯΔ͍ͬͯ͏ײ͡Ͱ ·ͩͳ͍ͷͰɺ͍Ζ͍ΖϑΟʔυόοΫ͍͚ͨͩΔͱ͍Ͱ͢ɻ
SoR ͱ SoE
SoRͱSoE • SoR: System of Record • ͦͷ໊ͷ௨ΓɺʮهʯͷͨΊͷγεςϜɻ • ೖྗͷࣄલνΣοΫͷݎ࿚ੑɺσʔλ߹ੑͷ୲อͳͲ͕ٻΊΒ
ΕΔɻ • SoE: System of Engagement • ར༻ऀͱͷؔΛߏங͢ΔͨΊͷγεςϜɻ • ࠓͲ͖ͷݴ༿Λ͏ͱΑ͍ UX Λఏڙ͢ΔͨΊͷγεςϜɺͱݴ ͍͑ͯΑ͍ɻ
SoRͱSoE • τϥσΟγϣφϧͳιϑτΣΞ։ൃʹର͢ΔݟύλʔϯͳͲ ʢPoEAAͳͲʣ SoR ͷͨΊͷͷͰ͋Δέʔε͕ଟ͍ɻ • ٯʹ SoE ʹର͢ΔઃܭݱࡏਐߦܥͰ֤͕ࣾɾڞ༗͍ͯ͠Δͱ
ײ͍ͯͯ͡ɺͨͱ֤͑Ϋϥυϕϯμʔ͕ެ։͍ͯ͠ΔΫϥυ σβΠϯύλʔϯͳͲʢSoR ͚ͷͷ͋Δ͕ʣSoE Λࢧ͑Δ ͨΊͷͰ͋Δ͜ͱଟ͍ɻ • ͯ͢ͷγεςϜ͕໌֬ʹͲͪΒ͔ʹଐ͢ΔΘ͚Ͱͳ͘ɺSoR త ଆ໘ͱ SoE తଆ໘Λ͕࣋ͭɺ͔ͳΓڧΊʹͲͪΒ͔ͷੑ࣭Λ࣋ͭ͜ ͱগͳ͘ͳ͘ɺͦ͏͍ͬͨ߹ʹઃܭஅΛؒҧ͑Δͱͦͷޙͷ ϝϯςφϯεʹଟେͳӨڹΛ༩͑ΔͷͰҙ͕ඞཁɻ
SoR ʹ͍ͭͯ • SoR ʹ͍ͭͯͱΓ͋͑ͣ͜ͷ͋ͨΓಡΜͰ͓͚͍͍Μ͡Όͳ͍ Ͱ͔͢Ͷɻʢࡶʣ
υϝΠϯͱʁ • ΤϦοΫɾΤϰΝϯεͷ DDD ຊ ʹॻ͔Ε͍ͯΔઃܭύλʔϯ SoR తଆ໘͕ڧ͗͢Δͱײ͡Δɻ • ͰɺI/O
ʹ I/O ͷɺϓϨθϯ ςʔγϣϯʹϓϨθϯςʔγϣ ϯͷυϝΠϯ͕͋ΔͷͰͳ͍͔ʁ • γεςϜͷత͕ҧ͏ͷͰ͋Εɺ ͦΕͧΕͷυϝΠϯʹۦಈ͞ΕΔ ΄͏͕͍͍ͣɻ
SoR / SoE ରൺ SoR SoE جຊతͳઃܭ؍ σʔλ߹ੑ ॊೈੑɺੑೳ σʔλετΞ
τϥϯβΫγϣφϧͳDB ଟ͘ͷ߹ɺRDB εέʔϥϏϦςΟ͕͋Δߴͳσʔ λετΞ υΩϡϝϯτࢦDBɺKVSɺશจݕ ࡧΠϯσοΫεͳͲ ϦϦʔεαΠΫϧ SoEͱൺΔͱ૬ରతʹ͍ʢॾઆ͋ Δ͔ʣ ߴͳϦϦʔεαΠΫϧ͕ٻΊΒΕΔ ࣭ධՁ τϥσΟγϣφϧͳιϑτΣΞςε ςΟϯάख๏Λద༻͍͢͠ τϥσΟγϣφϧͳख๏ʹՃ͑ɺϢ ʔβʔςετɺϢʔβʔΠϯλϏϡ ʔɺA/BςετͳͲ ΧφϦΞϦϦʔε࣮τϥϑΟοΫ Λར༻ͨ͠ςετͱଊ͑Δ͜ͱ͕Ͱ ͖Δ σʔλ߹ੑ τϥϯβΫγϣϯ߹ੑ͕ඞਢ ݁Ռ߹ੑͰΑ͍ཁ݅ଟ͍ ཁ͢Δʹʁ ݎ࿚ͳMutation ॊೈͳQuery ઃܭΛۦಈ͢Δʢ͍͢͠ʣͷ υϝΠϯϞσϧɺ֓೦σʔλϞσϧ UIʢϏδϡΞϧσβΠϯɺϢʔβΠϯ λϥΫγϣϯʣɺΩϟογϡ
CQRSͱͷؔ
۩ମతΞʔΩςΫνϟ
۩ମతΞʔΩςΫνϟ • SoR • ҰൠతͳΞϓϦέʔγϣϯ + RDBͷߏ • ΤϦοΫɾΤϰΝϯεͷ DDD
ຊͷઃܭ͕ग़ͯ͘Δ͜ͱ͕ଟ͍ɻ • SoE • SPA • BFF + Ωϟογϡ༻σʔλετΞʢϚςϦΞϥΠζυɾϏϡʔ, Redis, DynamoDB, ElasticSearchʣ + CDN • ʮCDNʹΩϟογϡͤ͞Δ୯ҐͰʯΤϯυϙΠϯτΛઃܭ͢Δɻ
͍Ζ͍Ζ͍ͨ͜͠ͱ͋ΔΜͰ͕͢ ࠓ 10 ͔͠ͳ͍ͷͰ
߹ੑͷ
άϩʔόϧͳ߹ੑͱϢʔβϩʔΧϧͳ߹ੑ • SoR తੈք؍ͰγεςϜશମɺ͋Δ͍࿈ܞγεςϜؚΊͨશ ੈքʢେ͛͞ʣͰෆ߹͕ͳ͍͜ͱ͕ٻΊΒΕΔɻ • ҰํɺSoE తੈք؍ͰͦΕΛར༻͢Δར༻ऀҰਓͻͱΓ͕ࣗࣗ ͷੈքΛ͓࣋ͬͯΓɺͦΕ͕ͦͷਓʹͱͬͯੈքͷͯ͢Ͱ͋ Δɻ
ϢʔβϩʔΧϧͳ߹ੑͷྫ • ͕ࣗݟ͍ͯΔੈքͰʮ͍͍ͶʂʯΛԡ͢ͱɺ͍͍ͶࡁΈʹঢ়ଶ ͕มԽ͢Δɻ • Ͱɺຊʹ͍͍Ͷ͕ΧϯτΞοϓ͞Εͨͷʁ • ͍͔ͭ૿͑Δ͕ͣͩਖ਼֬ʹ͍ͭ૿͑Δ͔ຊਓʹΘ͔Βͳ͍ ͠ɺར༻ऀʹͱͬͯڵຯͳ͍ɻ
άϩʔόϧͳ߹ੑͱϢʔβϩʔΧϧͳ߹ੑ • SoR ͷઃܭੈքશମʢେ͛͞ʣΛཏతʹ؍͢Δඞཁ͕͋Γɺ SoE ͷઃܭར༻ऀҰਓͻͱΓΛҙਂ͘؍͢Δඞཁ͕͋Δɻ • SoE ʹ͓͚Δ෭࡞༻Λ͏ϦΫΤετจࣈ௨ΓʮϦΫΤετʯͰ͋ Γɺඞͣ͠ಉظతɾଈ࣌తʹྃ͢ΔͷͱݶΒͳ͍ɺͭ·Γ݁
Ռ߹ੑ͔͠୲อ͞Εͳ͍ͱ͍͏ҙࣝͰઃܭΛ৺͕͚ΔͱΑ͍ɻ • SoR SoE ͔ΒͷϦΫΤετΛड͚ͱͬͨͱ͍͏ࣄ࣮ͷΈΛฦ͠ɺ SoE ͦΕΛड͚ͱͬͨޙʹʮͦͷར༻ऀͷੈքʹ͓͚Δঢ়ଶʯΛม ߋ͢Δɻ
ͦ͏ݴͬͯ άϩʔόϧͳ߹ੑ͕ ٻΊΒΕΔ͜ͱ͋ΔͰ͠ΐ͏ʁ
ͪΖΜ͋Γ·͢ɻ
SoE Ͱάϩʔόϧͳ߹ੑ͕ඞཁͳྫ • ࡏݿ͕ͳ͍ͷʹߪೖʢͷडʣΛͯ͠͠·ͬͨɻ • ΫϨδοτΧʔυͷݶֹΛ͍͑ͯΔͷʹߪೖʢ͈́ • ಉ͡ϝʔϧΞυϨεͷਓ͕͢Ͱʹొ͍ͯ͠Δͷʹձһొʢͷडʣ Λͯ͠͠·ͬͨɻ ্هͷΑ͏ͳෆ߹ͳϦΫΤετ
System of “Engagement” ͱ࣭͕͍͍ͯ͠ͱݴ͑ͳ͍ɻ Ͱ͖Δ͚ͩૣ͍λΠϛϯάͰͦͷϦΫΤετΛड͚͚Δ͜ͱͰ ͖ͳ͍͜ͱΛར༻ऀʹڭ͑ͯ͋͛Δ͖Ͱ͋Δɻ
SoE Ͱͷάϩʔόϧͳ߹ੑͷར༻ • ϦΫΤετՄೳ͔Ͳ͏͔ΛԠ͑ΔʢՄೳͳ߹ɺϩοΫΛͱΔɺ͘͠༧͢ΔʣΤϯυϙΠϯτΛ SoR ʹ࣮͠ɺ͜ΕΒඇಉظͳ݁Ռ߹ੑͰͳ͘ಉظతʹ SoE ʹ݁ՌΛฦ͢Α͏ʹ͢Δɻ • ܾࡁγεςϜͷ༩৴ͱܾࡁ֬ఆͷؔʹ͍ۙɻ
• ϦΫΤετՄ൱ͷ֬ೝͱ࣮ࡍͷ࣮ߦΛ͚Δ͜ͱͰɺੑೳোੑͷ໘Ͱ࣭ͷߴ͍γεςϜΛߏ ங͢Δ͜ͱ͕Ͱ͖Δɻ • BFF ͕͋Δ߹ɺͦͷޙΖʹ͋Δ SoR ʹର͢ΔϦόʔεϓϩΩγͱͯ͠ͷΈৼΔ͏͜ͱʹͳΔɻ
·ͱΊ • γεςϜͷઃܭΛߟ͑Δͱ͖ɺͦΕ͕ SoR తଆ໘͕ڧ͍γεςϜͳ ͷ͔ɺSoE తଆ໘͕ڧ͍γεςϜͳͷ͔Λҙࣝ͢Δͱ͍͍͜ͱ͕͋ Δ͔͠Ε·ͤΜɻ • SoE
తͳઃܭϊϋ·ͩ·ͩੈͷதʹগͳ͍ͱࢥ͍ͬͯΔͷ ͰΈͳ͞ΜͲΜͲΜൃ৴͖ͯ͠·͠ΐ͏ɻ • SoR తͳઃܭΫϥυϕϯμʔʑʹΑͬͯมԽ͍͖͍ͯͯ͠Δ ͜ͱ͕͋Δͱࢥ͏ͷͰɺͲΜͲΜൃ৴ʢ͈́ • άϩʔόϧͳ߹ੑͱϢʔβϩʔΧϧͳ߹ੑҧ͏Αʂ
ͱ͍͏Θ͚ͰɺҰ۟ʢҰटʣ ઃܭΛ ۦಈ͢Δͷ͕ Կͳͷ͔ ݟۃΊΔ͜ͱͦ͜ ઃܭͳΓ͚Γ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ