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
70
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
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
150
アップデートで何が変わった?デモで学んで使いこなすIBM Bob2.0
muehara
0
120
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
140
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.4k
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
280
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
410
AI時代の闇と光
tatsuya1970
0
110
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.4k
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
240
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
2
560
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
280
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Making Projects Easy
brettharned
120
6.7k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
New Earth Scene 8
popppiees
3
2.4k
The SEO identity crisis: Don't let AI make you average
varn
0
510
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
390
How to Ace a Technical Interview
jacobian
281
24k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
340
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
KATA
mclloyd
PRO
35
15k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Mobile First: as difficult as doing things right
swwweet
225
10k
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ɺυϝΠϯϩδοΫͷՄಡੑΛߴ͘อͭͷ͕༰қͰ͋ Δɻ