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
74
Authorization to implement with Extensible Effect
machuz
0
470
アルプの 認証/認可分離戦略と手法
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
330
CQRS+ESをKinesis,Spark,RDB,S3でやってみた
machuz
0
3.5k
Other Decks in Technology
See All in Technology
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.3k
組織にどうSREを根付かせるか?〜IVRyの場合〜
abnoumaru
0
330
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
250
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
200
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
6
1k
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
3
1.2k
TypeScript入門 2026
recruitengineers
PRO
2
500
関東Kaggler会発表資料
takoi
1
190
Goでデータパイプラインを作ろう
sansantech
PRO
0
360
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
430
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
200
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
140
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
460
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
620
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
260
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
450
Deep Space Network (abreviated)
tonyrice
0
250
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
360
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
The Limits of Empathy - UXLibs8
cassininazir
1
600
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
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ɺυϝΠϯϩδοΫͷՄಡੑΛߴ͘อͭͷ͕༰қͰ͋ Δɻ