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
Rails engineを用いたゆるふわモジュラーモノリス のご紹介
Search
free_world21
June 07, 2024
Programming
1
450
Rails engineを用いたゆるふわモジュラーモノリス のご紹介
Omotesando.rb #98でLT発表した資料です。
https://omotesandorb.connpass.com/event/319813/
free_world21
June 07, 2024
Tweet
Share
More Decks by free_world21
See All by free_world21
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
75
DjangoとRailsを使って趣味として政治資金を透明化するプロダクトを作ってる話
free_world21
0
78
Ruby on Rails on Kubernetesってどうなの?
free_world21
0
29
大事なデータを守りたい!ActiveRecord Encryptionと、より安全かつ検索可能な暗号化手法の実装例の紹介
free_world21
0
47
Ruby on Rails と Django を比較してみる
free_world21
1
280
Shinjuku.rb#95:心の技術書紹介
free_world21
1
310
『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
free_world21
3
1.5k
東証障害報告書を読み解く
free_world21
0
290
Ruby/Railsの勉強会のおかげでブルーモ証券起業した
free_world21
2
520
Other Decks in Programming
See All in Programming
ご飯食べながらエージェントが開発できる。そう、Agentic Engineeringならね。
yokomachi
1
260
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
310
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
190
あなたはユーザーではない #PdENight
kajitack
4
280
Oxlint JS plugins
kazupon
1
1.1k
CSC307 Lecture 14
javiergs
PRO
0
440
Event Storming
hschwentner
3
1.3k
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
140
15年目のiOSアプリを1から作り直す技術
teakun
0
540
ぼくの開発環境2026
yuzneri
1
290
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
2
490
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1.1k
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
110
Docker and Python
trallard
47
3.7k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
840
Paper Plane
katiecoart
PRO
0
47k
Code Review Best Practice
trishagee
74
20k
Speed Design
sergeychernyshev
33
1.6k
BBQ
matthewcrist
89
10k
Building Applications with DynamoDB
mza
96
6.9k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
WCS-LA-2024
lcolladotor
0
470
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
95
Transcript
3BJMTFOHJOFΛ༻͍ͨ ΏΔ;ΘϞδϡϥʔϞϊϦε ͷ͝հ 5IV খྛޛ࢙ OPFM ϒϧʔϞূ݊גࣜձࣾ 0NPUFTBOEPSC
▪ খྛ ޛ࢙ʢখྛ ϊΤϧʣ ▪ ຊۀɿϒϧʔϞূ݊גࣜձࣾ औక$50 – ถࠃגɾถࠃ&5'ઐۀͷظࢿ࢈ܗಛԽ ܕͷࢿΞϓϦΛ࡞ͬͯΔ'JOUFDIελʔ
τΞοϓ ▪ ΄ͲϑϦʔϥϯεΤϯδχΞ – ్தࣄۀձࣾͷதͷਓͬͨ ▪ ʙɿϒϧʔϞΠϯϕετϝϯτגࣜձࣾ ΛڞಉۀʢޙʹϒϧʔϞূ݊גࣜձࣾʹ߸ มߋʣ ▪ झຯɿཱྀߦɾੈքͷίϫʔΩϯάεϖʔεΊ͙ ΓʢϫʔέʔγϣϯతͳԿ͔ʣ @free_world21 THE FARM@NY CARR WORKPLACE@Chicago https://bloomo.co.jp/
એɿҰൠެ։͠·ͨ͠ʂ
એɿҰൠެ։͠·ͨ͠ʂ
ຊ
େΞʔΩςΫνϟʢʁʣ ϞϊϦεΞʔΩςΫνϟ ▪ ͍ΘΏΔຕؠ ▪ ͭͷϦϙδτϦʢϓϩδΣΫτʣ ʹͯ͢ͷίʔυ͕ೖͬͯΔ ▪ ݸਓ։ൃখن։ൃͰΔͳΒ͜ Ε
▪ ৫తʹ͍ͬͯ͘߹ɺਆͷ Λ࣋ͭγϯɾΤϯδχΞ͕ඞཁʹ ͳͬͯ͘Δؾ͕͢Δ ϚΠΫϩαʔϏεΞʔΩςΫνϟ ▪ ෳͷখ͞ͳαʔϏεʢσϓϩΠ Մೳͳ୯Ґ㲈ϓϩηεɺίϯς φʣ͕ڠௐ͋ͬͯͭ͠ͷେ͖ͳ αʔϏεΛ࣮ݱ͢Δ ▪ ,VCFSOFUFTͱηοτͰޠΒΕΔ ͜ͱ͕ଟ͍ʢಛʹ(Pք۾ʣ ▪ ਓۚ͋Δڧऀͷઓུʢͩͱ ࢥͬͯΔʣ ϞδϡϥʔϞϊϦεΞʔΩςΫνϟ ▪ ͦͦ͜͜େ͖͍մΛෳΈ߹Θͤ ͯͭͷେ͖ͳαʔϏεΛ࣮ݱ͢Δ ▪ ϞϊϦεͱϚΠΫϩαʔϏεͷதؒ ʢʁʣɻਖ਼֬ͳఆٛͳ͍ʢʁʣͱ ࢥͬͯΔ ▪ ϕετϓϥΫςΟεJTͲΕʁ
ΤϰΝϯήϦΦϯʹྫ͑Δͱ ϞϊϦεΞʔΩςΫνϟ ʹΩʔϧٞ ϚΠΫϩαʔϏεΞʔΩςΫνϟ ʹୈెΠϩϧ ϞδϡϥʔϞϊϦεΞʔΩςΫνϟ ʹθʔϨ
ϚΠΫϩαʔϏεͷىݯ ▪ +BNFT-FXJT BOE.BSUJO'PXMFS l.JDSPTFSWJDFT zNBSUJOGPXMFSDPN ▪ ϚΠΫϩαʔϏεͷରൺͱͯ͠ϞϊϦε͕ޠΕΔ
▪ ͦͷޙ֓೦ͱͯ͠ఆண͠ɺଟ͘ͷॻ੶ࣄྫ͕ग़൛ ͞ΕΔ https://martinfowler.com/articles/microservices.html
ϞϊϦεΞʔΩςΫνϟ https://www.atlassian.com/microservices/microservices-architecture/microservices-vs-monolith
ϚΠΫϩαʔϏεΞʔΩςΫνϟ https://www.atlassian.com/microservices/microservices-architecture/microservices-vs-monolith
ϚΠΫϩαʔϏεΞʔΩςΫνϟ https://www.atlassian.com/microservices/microservices-architecture/microservices-vs-monolith
ϞδϡϥʔϞϊϦεJTԿʁ https://arxiv.org/pdf/2401.11867 https://www.milanjovanovic.tech/blog/what-is-a-modular-monolith https://speakerdeck.com/shunsugai/railsdemodular- monolithwoxuan-ze-saretayu-she-nizhi-wen-sitainge-noyi-wen
ϞδϡϥʔϞϊϦεJTԿʁ ▪ దʹׂ͞Ε͍ͯΔ ▪ σϓϩΠ͢Δ࣌ʹ݁߹ͯͭ͠ͷαʔϏεʢϞϊϦ εʣʹ͢Δ ▪ ʰϚΠΫϩαʔϏεʹࢸΔ·Ͱͷલஈ֊ͱͯ͠༗༻ʱ ▪ ϑϨʔϜϫʔΫࣄྫ
– (PPHMF4FSJWDF8FBWFS (P – 4IPQJGZQBDXFSL 3BJMT – %KBOHP 1ZUIPO ࣮ϞδϡϥʔϞϊϦεͳؾ ͕͢Δ খྛͷཧղ ϞϊϦεͱϚΠΫϩαʔϏεͷ྆ํͷྑ͞ΛڗडͰ͖Δ Α͏ʹ͍͍ײ͡ʹׂͨ͠ͷ https://arxiv.org/pdf/2401.11867
ϒϧʔϞͷΏΔ;ΘϞδϡϥʔϞϊϦε ΞϓϦ༻"1*αʔό DPNNPO@NPEFMT DPOUSPMMFS BENJO༻SBJMTΞϓϦ DPNNPO@NPEFMT BENJO@NPEFMT BENJOଆDPOUSPMMFST BENJOଆWJFXT "1*ݺͼग़͠
"1*ݺͼग़͠
ϒϧʔϞͷΏΔ;ΘϞδϡϥʔϞϊϦε ΞϓϦ༻"1*αʔό DPNNPO@NPEFMT DPOUSPMMFS BENJO༻SBJMTΞϓϦ DPNNPO@NPEFMT BENJO@NPEFMT BENJOଆDPOUSPMMFST BENJOଆWJFXT "1*ݺͼग़͠
"1*ݺͼग़͠ • ڞ௨෦SBJMTFOHJOFͱ࣮ͯ͠ʢFOHJOF໊ɿ commonʣ • جຊతʹNPEFMͷΈΛஔ • BQJଆɺBENJOଆͷ(FNGJMFʹcommonΛهࡌ͢Δ • BQJଆͷNPEFMͯ͢BENJOଆͰѻ͑Δ • BQJଆͷapp/modelsҎԼʹಠࣗNPEFMఆٛ ͠ͳ͍ • BENJOଆapp/modelsҎԼʹBENJOଆͰ͔͠ Θͳ͍NPEFMΛఆٛ͢Δ
ϒϧʔϞͷΏΔ;ΘϞδϡϥʔϞϊϦε ΞϓϦ༻"1*αʔό DPNNPO@NPEFMT DPOUSPMMFS BENJO༻SBJMTΞϓϦ DPNNPO@NPEFMT BENJO@NPEFMT BENJOଆDPOUSPMMFST BENJOଆWJFXT "1*ݺͼग़͠
"1*ݺͼग़͠ • ϚΠάϨʔγϣϯBENJOଆͰҰׅͰߦ͏ • BQJଆʹςʔϒϧ͝ͱʹඞཁͳݖݶͷΈΛ༩͑Δ GRANT SELECT, INSERT ON on database_name.users; GRANT SELECT, INSERT, UPDATE ON on database_name.personal_infos; GRANT SELECT, INSERT, DELETE on database_name.likes;
ϒϧʔϞͷΏΔ;ΘϞδϡϥʔϞϊϦε ΞϓϦ༻"1*αʔό DPNNPO@NPEFMT DPOUSPMMFS BENJO༻SBJMTΞϓϦ DPNNPO@NPEFMT BENJO@NPEFMT BENJOଆDPOUSPMMFST BENJOଆWJFXT "1*ݺͼग़͠
"1*ݺͼग़͠ • BQJଆαʔόʢίϯςφʣʹapiͱcommonΛσϓ ϩΠ͢ΔσΟϨΫτϦҎԼʹฒྻʹஔ • BENJOଆαʔόʢίϯςφʣʹadminͱcommonΛ σϓϩΠ͢ΔσΟϨΫτϦҎԼʹฒྻʹஔ
ͬͯΈͨॴײ ▪ ྑ͔ͬͨ͜ͱ – ͷׂ͕໌֬ʹͳΓɺνʔϜͰ͖ͨ – ηΩϡΞʹͳͬͨ ▪ BQJଆͰʓʓͰ͖ͳ͍ɺΈ͍ͨͳSTQFDॻ͔ͳͯ͘͢Μͩ –
ʢ·ͩͬͯͳ͍͚ͲʣDPOUSPMMFSWJFXΖ͏ͱࢥ͑FOHJOFʹॻ͘͜ͱ͕ͰΔ ▪ ѱ͔ͬͨ͜ͱ – BQJଆͷػೳͳͷʹBENJOଆʹॻ͔ͳ͚Ε͍͚ͳ͍ͷ͕Ұ෦͋ͬͯɺ໌֬ͳ͕Ұ෦ Ͱ͖ͯͳ͍ – BQJɺBENJOͱ͚ͨͷͷɺͦΕͧΕ͕ڊେϞϊϦεʹͳΓͭͭ͋Δ
৽ͨͳ3BJMTϞδϡʔϧ͕ඞཁʹͳΓͭͭ͋Δ ΞϓϦ༻"1*αʔό DPNNPO@NPEFMT DPOUSPMMFS BENJO༻SBJMTΞϓϦ DPNNPO@NPEFMT BENJO@NPEFMT BENJOଆDPOUSPMMFST BENJOଆWJFXT "1*ݺͼग़͠
"1*ݺͼग़͠ ͚3BJMTϞδϡʔϧ DPNNPO@NPEFMT DPOUSPMMFS ︖
৽ͨͳ3BJMTϞδϡʔϧ͕ඞཁʹͳΓͭͭ͋Δ ΞϓϦ༻"1*αʔό DPNNPO@NPEFMT DPOUSPMMFS BENJO༻SBJMTΞϓϦ DPNNPO@NPEFMT BENJO@NPEFMT BENJOଆDPOUSPMMFST BENJOଆWJFXT "1*ݺͼग़͠
"1*ݺͼग़͠ ͚3BJMTϞδϡʔϧ DPNNPO@NPEFMT DPOUSPMMFS ︖
৽ͨͳ3BJMTϞδϡʔϧ͕ඞཁʹͳΓͭͭ͋Δ ΞϓϦ༻"1*αʔό DPNNPO@NPEFMT DPOUSPMMFS BENJO༻SBJMTΞϓϦ DPNNPO@NPEFMT BENJO@NPEFMT BENJOଆDPOUSPMMFST BENJOଆWJFXT "1*ݺͼग़͠
"1*ݺͼग़͠ .'͚3BJMTϞδϡʔϧ DPNNPO@NPEFMT DPOUSPMMFS ︖
৽ͨͳ3BJMTϞδϡʔϧ͕ඞཁʹͳΓͭͭ͋Δ ΞϓϦ༻"1*αʔό DPNNPO@NPEFMT DPOUSPMMFS BENJO༻SBJMTΞϓϦ DPNNPO@NPEFMT BENJO@NPEFMT BENJOଆDPOUSPMMFST BENJOଆWJFXT "1*ݺͼग़͠
"1*ݺͼग़͠ .'͚3BJMTϞδϡʔϧ DPNNPO@NPEFMT DPOUSPMMFS ︖ ͜͜࡞ͬͯ͘ΕΔਓΛ8FBSF)JSJOH