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
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
63
Authorization to implement with Extensible Effect
machuz
0
460
アルプの 認証/認可分離戦略と手法
machuz
3
800
AuthzCtx - Alp社内共有会
machuz
0
100
アルプの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
320
CQRS+ESをKinesis,Spark,RDB,S3でやってみた
machuz
0
3.5k
Other Decks in Technology
See All in Technology
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
860
作る力から、見極める力へ — AI時代に広がるエンジニアの価値と役割
rince
0
330
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
240
現場のトークンマネジメント
dak2
1
190
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.7k
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
220
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
850
本当の”仕事”を手放せる未来が見えた
mu7889yoon
0
130
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
3
560
螺旋型キャリアの生存戦略 / kinoko-conf2026
rakus_dev
1
970
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
200
不要なレビューをAIにまかせて AIコーディングの環境改善を加速した
shoota
1
260
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Accessibility Awareness
sabderemane
1
140
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
430
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
260
Embracing the Ebb and Flow
colly
88
5.1k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
210
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
210
Ethics towards AI in product and experience design
skipperchong
2
310
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
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ɺυϝΠϯϩδοΫͷՄಡੑΛߴ͘อͭͷ͕༰қͰ͋ Δɻ