Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Scalebaseバックエンド構成について/the backend design of Sca...
Search
machu
July 29, 2021
Technology
6.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Scalebaseバックエンド構成について/the backend design of Scalebase
machu
July 29, 2021
More Decks by machu
See All by machu
NBAチームから学ぶ強いチームの作り方
machuz
0
79
Authorization to implement with Extensible Effect
machuz
0
480
アルプの 認証/認可分離戦略と手法
machuz
3
820
AuthzCtx - Alp社内共有会
machuz
0
110
アルプのEff独自エフェクト集 / Alp-original ’Eff’ pearls
machuz
1
2.3k
SQL Meisterへの道 ~更新編~ / sql-meister-CUD
machuz
0
2.4k
SQL Meisterへの道 ~基礎〜参照編~ / sql-meister-R
machuz
0
2.8k
Authz
machuz
0
330
CQRS+ESをKinesis,Spark,RDB,S3でやってみた
machuz
0
3.6k
Other Decks in Technology
See All in Technology
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
360
渡米前の準備を制す!re:Invent 2026徹底準備術 / The Ultimate Preparation Guide for re:Invent 2026
yuj1osm
1
440
LLMの知識とAIエージェント
happysamurai294
0
130
Vue.jsのGitHubから学ぶ意思決定
yut0naga1_fa
1
340
AI Search (Foundry IQ) におけるRAGデータの準備と配置
ryomaru0825
1
100
ポケモン対戦を自動で記録して振り返ろう
fufufukakaka
0
420
AIコーディングエージェント開発_全体像
happysamurai294
0
140
AIテスト自動化と評価駆動開発EDD
happysamurai294
0
110
2拠点SRE活動始めてみた | sogaoh's LT @ ホンマでっかSRE勉強会 #3
sogaoh
PRO
0
210
Draft AIエージェントの トークン消費を最小化する 8つの原則
kinopeee
6
1.9k
Jev の中身は50行で再現できる。でも本物との差はどこにあるのか
hisuzuya
0
220
スマートロックを支えるFlutter × ネイティブ連携の実践 / Flutter and Native Integration in Practice: Powering Smart Locks
bitkey
PRO
0
110
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Faster Mobile Websites
deanohume
310
32k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
960
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1.1k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
290
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
650
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Transcript
Scalebase όοΫΤϯυߏʹ͍ͭͯ
Agenda 1ɽઃܭࢥ 2ɽsbtϓϩδΣΫτߏ 3ɽϞδϡϥϞϊϦε 4ɽEff
ઃܭࢥ 33
ഇΕͳ͍ίʔυͳ͍ͷͰపఈͨ͠ϞδϡʔϧԽ ελʔτΞοϓʹݶΒͣɺ࠷ॳظͷίʔυ͕ෛ࠴Խ͠ɺͦͷվमʹ༏लͳਓࡐ͕ଟ େͳ࿑ྗΛඅ͍ͯ͠Δέʔεଟ͍ɻ ͲΜͳʹྑ͍ίʔυ༷࣌ͷมԽʹΑΓԽ͢ΔՄೳੑ͕͋Δ͕ɺӨڹൣ ғΛߏͰ੍ޚ͢Δ͜ͱʹΑͬͯলྗͰͷஔ͖͕͑Ͱ͖ΔΑ͏ʹsbtͷαϒϓϩ δΣΫτΛࡉ͔͘Δબ͍ͯ͠Δɻ ϞδϡʔϧԽͷࢦCleanArchitecture ୯ʹࡉ͔͘Δ͚ͩͰແடংͰอकෆՄೳʹͳΔͷͰɺCleanArchitecture Λࢀߟʹ͠ɺґଘํͷ੍ޚ(DIP)ʹΑٕͬͯज़తؔ৺ࣄͱυϝΠϯϩδοΫͷ Λߦ͍ͬͯΔɻ
େنΞϓϦέʔγϣϯΛݎ࿚͔ͭ҆શʹ࡞Δ DI DIґଘੑ੍ޚͷDI(Guice)ͱEffectͷDI(Eff)ͷ2छྨͰߦ͍ͬͯΔɻ Guice(ಈతDI)ɺେنΛఆ͍ͯ͠Δނʹauto wireͳೖ͕Ͱ͖ͳ͍ͱϘ ΠϥϓϨʔτͷྔ͕େʹͳΔͨΊ࠾༻͍ͯ͠Δɻ(ςετͰDIίϯςφ͖ͷى ಈΛߦ͓ͬͯΓɺઃఆ࿙Ε,ॳظԽΤϥʔͳͲͷϥϯλΠϜΤϥʔͦ͜Ͱݕ͠ ͍ͯΔɻ) EffectͷDIɺখճΓͷޮ࣮͘ߦ࣌ͷࠩ͠ସ͑Λ੩తʹߦ͏ͨΊEffͷΠϯλϓ Ϧλʹد͍ͤͯΔɻ EffͷγϯϓϧͳγϯλοΫεʹΑΔมߋ༰қੑ ੩తܕ͚ݴޠݎ࿚͕ͩෳࡶͳ͜ͱΛ͢ΔͱϩδοΫͱؔͷͳ͍ܕ߹Θͤͱ ͖߹͏͜ͱʹͳΔɻ ؔܕϓϩάϥϛϯάͷΤοηϯε͜ͷܕ߹ΘͤΛָʹ͠ɺදݱྗΛ֦ு͢Δଆ ໘Λ࣋ͭͷͰɺՄಡੑͱͷόϥϯεΛݟͳ͕Βੵۃతʹಋೖ͍ͯ͠Δɻ υϝΠϯϞσϧͷ୳ٻ ෳࡶͳυϝΠϯΛදݱ͢ΔυϝΠϯϞσϦϯάΛ୳ٻ͍ͯ͠Δɻ ٕज़తؔ৺ࣄ͔ΒΓ͞ΕͨϞσϧ͕ͩɺ۪ʹϞσϦϯά͢Δͱڊେͳू͕ ݱΕͯ͠·͏ͷͰɺ1ͭͷ֓೦ʹΈ͑ΔͷΛదͳׂ୯Ґʹ͚͍ͯ͘ ܖද໌ ओʹΫϥεෆมද໌Λར༻ͯ͠ɺcase class͚ͩͰදݱͰ͖ͳ͍ଘࡏͯ͠ͳ Βͳ͍ঢ়ଶΛݕͰ͖ΔΑ͏ʹ͢Δ
SBTϓϩδΣΫτߏ 53
1ίϯςΩετʹ͓͚ΔSBTϓϩδΣΫτߏ SecondaryAdapter UseCase Domain Http ڞ௨Http ڞ௨SecondaryAdapter ڞ௨Library ڞ௨Domain Batch
ڞ௨Batch Kinesis ڞ௨Kinesis gRPC ڞ௨gRPC 1αʔϏεͷϓϩδΣΫτɺ PrimaryAdapter,SecondaryAdapter,UseCase,Doma in͕جຊͰ࣮͢Δʹ͋ͨΓڞ௨Խͨ͠΄͏͕লྗͰศར ͳͷશίϯςΩετԣஅͰࢀরͰ͖Δڞ௨xxxʹஔ ͢ΔΑ͏ʹ͍ͯ͠Δɻ ͨͩɺকདྷϚΠΫϩαʔϏεԽͨ͠ࡍʹɺڞ௨ʹஔ͘ ͷΛ͍͡ΔʹσϓϩΠಠཱੑΛ્ͯ͠͠·͏ͷͰɺجຊ తʹมΘΓಘͳ͍ͷ(ID)ɺશαʔϏεҰׅͰมߋ ͢Δඞཁ͕͋Δͷ(நBatch Class)Λஔ͢ΔΑ͏ ʹ͍ͯ͠Δɻ
AuthN༻SecondaryAdapter AuthN༻Domain ෳίϯςΩετΛ၆ᛌͰݟͨਤ Subscription༻SecondaryAdapter Subscription༻UseCase Subscription༻Domain Subscription༻PrimaryAdapter Subscription AuthZ༻SecondaryAdapter AuthZ༻UseCase
AuthZ༻Domain AuthZ༻PrimaryAdapter ڞ௨PrimaryAdapter ڞ௨SecondaryAdapter ڞ௨Library ڞ௨Domain AuthZ AuthN༻UseCase AuthN༻PrimaryAdapter AuthN ɾɾɾetc
ϞδϡϥϞϊϦε ৄࡉ: https://speakerdeck.com/showmant/expressing-complex-domain-regions-and-boundaries-with-modular-monoliths AuthN༻SecondaryAdapter AuthN༻Domain Subscription༻SecondaryAdapter Subscription༻UseCase Subscription༻Domain Subscription༻PrimaryAdapter Subscription
AuthZ༻SecondaryAdapter AuthZ༻UseCase AuthZ༻Domain AuthZ༻PrimaryAdapter ڞ௨PrimaryAdapter ڞ௨SecondaryAdapter ڞ௨Library ڞ௨Domain AuthZ AuthN༻UseCase AuthN༻PrimaryAdapter AuthN ɾɾɾetc ModularMonolith༻PrimaryAdapter
ϞδϡϥϞϊϦε 93
Ώ͘Ώ͘ϚΠΫϩαʔϏεԽ͍ͯ͘͠ ґଘϥΠϒϥϦͷཧσϓϩΠසͳͲ͕͋·Γʹണͨ͠ίϯςΩετ͕ొ ͢ΔͱϚΠΫϩαʔϏεԽ͠ͳ͍ͱπϥΠ͜ͱʹͳ͍ͬͯ͘ͷͰͦΕʹඋ͑ͨߏ ΛΉ େن͔ͭυϝΠϯ͕ෳࡶ େن͔ͭυϝΠϯ͕ෳࡶͩͱɺࡉԽ͠ͳ͍ͱ͕ͯ͢ڊେूʹͳΓ͕ͪͰɺ ͦ͏͠ͳ͍Α͏ʹ༻్͝ͱʹूΛ͚ͯɺେྔͩͱɺͲͷΑ͏ʹΘΕΔͷ͔ ͕΅͚ͯ͠·͏ɻ ίϯςΩετʹΑΔॎͷׂʹΑͬͯɺ͜ͷೝΛԼ͛ΔޮՌΛૂ͍ͬͯΔɻ ͳͥϞδϡϥϞϊϦε͔
ίϯςΩετڥքͷҙ͚ࣝ ίΞυϝΠϯͱαϒυϝΠϯͷڥքɺҙ͍ࣝͯͯ͠ڥքҾ͖͢Δ͜ͱ͕͍͠ ͷͰɺԿ͔͠Βͷ੍͕ͳ͍ͱ͙͢ʹࠞͬͯ݁͟߹ͯ͠͠·͏ɻ ڥքͷҙࣝΛڧ੍&໌֬ʹ͢Δ͜ͱʹΑͬͯΫϦʔϯͳυϝΠϯ͕อक͘͢͠ͳ ΓɺڥքҾ͖ͷࢼߦ͘͢͠ͳΔͷͰΑΓྑ͍ڥքΛಥ͖٧ΊΔ͜ͱ͕Ͱ͖Δɻ ͔ΜͨΜʹಋೖՄೳ ScalaͱSBTͷදݱྗͩͱɺ͔ΜͨΜʹಋೖ͢Δ͜ͱ͕Ͱ͖Δɻ ࢀߟ: https://speakerdeck.com/showmant/expressing-complex-domain-regions-and-boundaries-with-modular-monoliths
Eff 11 3
มߋ༰қੑ ෳͷޮՌΛϑϥοτʹऔΓѻ͏͜ͱ͕Ͱ͖ΔͷͰɺܕ߹ΘͤΛҙࣝͤͣʹϩδο Ϋͷมߋ͕Մೳɻ ΠϯλϓϦλʹΑΔॊೈͳڍಈࠩ͠ସ͑ Auto-wireͳDIίϯςφศརͰ͋Δ͕ɺϦΫΤετϕʔεͰͷڍಈࠩ͠ସ͑ ͳͲΛߦ͏ͷʹద͍ͯ͠ͳ͍ɻ EffͰ͋ΕΠϯλϓϦλʹΑͬͯॊೈ͔ͭ҆શɺ༰қʹڍಈΛࠩ͠ସ͑Δ͜ͱ͕ Ͱ͖Δɻ ͳͥEff͔ FPΤοηϯεͱOOPΤοηϯεͷૄ݁߹ͳڠௐ
ϞφυɺࣗવมɺܧଓͳͲͷίΞͳFPΤοηϯεͯ͢ΠϯλϓϦλʹด͡ࠐ ΊΒΕΔͷͰɺϩδοΫΛॻ͘ਓ͕ҙࣝ͢Δඞཁ͕ͳ͍ɻ FP͖ͳਓΠϯλϓϦλΛੵۃతʹ৮ΕΔ͠ɺϩδοΫΛॻ͘ਓFPͷศརͳ ෦͚ͩΛڗड͢Δ͜ͱ͕Ͱ͖Δɻ ଟछଟ༷ͳEffectͷடং͋Δཧ EffΛΘͳ͍Scala projectɺऔΓѻ͏Effect͕1ͭ૿͑Δ͝ͱʹࢦؔ తʹܕ߹Θͤͷਏ͕͕͍͋ͬͯ͘͞ͷͰɺศརͳEffect͕͋ͬͯؾָʹ͏͜ ͱ͕Ͱ͖ͳ͍ɻ EffͰ͋ΕReader,WriterಠࣗఆٛͷޮՌΛ͍͘Βಋೖͯ͠γϯλοΫε ʹӨڹ͠ͳ͍ɻ(࣮ߦ࣌ͷઢ͋Δ͕ɺ࣮ߦॱΛݻఆ͢ΔΈͰճආͯ͠ ͍Δ) ࢀߟ: http://okmij.org/ftp/Haskell/extensible/more.pdf https://tech.recruit-mp.co.jp/server-side/post-18728/ https://halcat.org/scala/extensible/ ϩδοΫͷ໌֬ԽͱՄಡੑ ϑϥοτʹϩδοΫΛهड़͢Δ͜ͱ͕Ͱ͖ΔͷͰܕ߹ΘͤʹΑͬͯϩδοΫ͕΅ ͚Δ͜ͱ͕ͳ͘ɺUseCaseɺυϝΠϯϩδοΫͷՄಡੑΛߴ͘อͭͷ͕༰қͰ͋ Δɻ