Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ぼくがかんがえたさいきょうの SoR/SoE あーきてくちゃ #kichijojipm
Search
Akira Suenami
May 17, 2019
Technology
6.6k
13
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ぼくがかんがえたさいきょうの SoR/SoE あーきてくちゃ #kichijojipm
Akira Suenami
May 17, 2019
More Decks by Akira Suenami
See All by Akira Suenami
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
9
2.6k
オブジェクト指向考古学 〜人類は再びDCIの夢を見るか〜
a_suenami
5
3.6k
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か トランザクションスクリプトはどこへ行くのか #sekkeinight
a_suenami
14
7k
値と属性の話
a_suenami
0
320
ドメインモデラーにとって受託開発であることは制約なのか?
a_suenami
1
1.6k
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
a_suenami
2
3.4k
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi
a_suenami
0
4.1k
“ユーザーファースト”の功罪 〜分析と実験によるアーキテクチャ設計〜 #bpstudy
a_suenami
4
1.5k
ドメインモデルのつくり方 #5000dai
a_suenami
16
5k
Other Decks in Technology
See All in Technology
「待ち時間」の消滅と「自我消耗」の加速:生成AI時代のエンジニアを救うメンタル・リソース管理
poropinai1966
0
400
AI工学特論: MLOps・継続的評価
asei
11
3.1k
運用を犠牲にせずコストを制御し事業成長を支える B2B SaaS ID管理基盤におけるS3 Tableのログストレージ活用
kaminashi
1
130
Webの技術とガジェットで子どもも大人も楽しめるワクワク体験を提供する / Qiita Tech Festa Day 2026
you
PRO
1
330
Pavlokで始める電撃駆動開発
sgrsn
0
140
信頼できるテスティングAIをどう育てるか?
odan611
0
180
LLMリーダーボードアップデートに向けたAgentic Math_SWEのトレースについて
nejumi
0
190
AIがAPIを書く時代に、私たちは何を設計すべきか
nagix
0
200
A Bag-of-Documents Model for Query Specificity
dtunkelang
0
190
reFACToring
moznion
1
1.1k
論語・武士道・産業革命から見る かわるもの、かわらないもの
ichimichi
8
2k
DevOps Agentで運用判断をチーム資産にする~Agent InstructionsとAgent Skillを継続的に育てる~
fujioka6789
0
180
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
310
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
880
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Automating Front-end Workflow
addyosmani
1370
210k
For a Future-Friendly Web
brad_frost
183
10k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
200
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
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 తͳઃܭΫϥυϕϯμʔʑʹΑͬͯมԽ͍͖͍ͯͯ͠Δ ͜ͱ͕͋Δͱࢥ͏ͷͰɺͲΜͲΜൃ৴ʢ͈́ • άϩʔόϧͳ߹ੑͱϢʔβϩʔΧϧͳ߹ੑҧ͏Αʂ
ͱ͍͏Θ͚ͰɺҰ۟ʢҰटʣ ઃܭΛ ۦಈ͢Δͷ͕ Կͳͷ͔ ݟۃΊΔ͜ͱͦ͜ ઃܭͳΓ͚Γ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ