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
ソフトウェアにおける垂直設計と水平設計 ~モジュラーモノリスへ挑戦~
Search
Tech Leverages
PRO
August 25, 2023
Technology
2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ソフトウェアにおける垂直設計と水平設計 ~モジュラーモノリスへ挑戦~
## 技術
モジュラーモノリス, マイクロサービス, TypeScript, gRPC, monorepo, turbopack
Tech Leverages
PRO
August 25, 2023
More Decks by Tech Leverages
See All by Tech Leverages
Slackを「AIエージェントのHub」にする 〜 SlackbotとHolmesGPTで実現するAIOps
leveragestech
PRO
0
130
データ組織の転換期 一足飛びしない段階的戦略
leveragestech
PRO
0
220
並列化でチームのアウトプットを増やす
leveragestech
PRO
0
61
Engineering ManagerがAI時代に この先生きのこるには?
leveragestech
PRO
1
150
最新技術を"今は選ばない"という技術選定
leveragestech
PRO
0
610
毎⽇dumpされるDBにCDCは無⼒だっ た、、FederatedQueryで繋ぎ直した データ連携の試⾏錯誤
leveragestech
PRO
0
120
Tableauを活かすためにTableauに制約を設けた話
leveragestech
PRO
0
110
営業支援システムと歩んだ7年半の変遷
leveragestech
PRO
0
190
DMBOKを使ってレバレジーズのデータマネジメントを評価した
leveragestech
PRO
0
950
Other Decks in Technology
See All in Technology
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
3
1.8k
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
170
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.7k
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
360
EventBridge に「合流」はない ― サーバーレスのワークフローを育てるということ / No Join in EventBridge
yusukeshimizu
2
160
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
140
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
31
27k
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
250
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.3k
AI時代、データエンジニアが一番おもろい
genshun9
0
670
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
430
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
240
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
500
A designer walks into a library…
pauljervisheath
211
25k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
430
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
530
Design in an AI World
tapps
1
320
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How GitHub (no longer) Works
holman
316
150k
Transcript
ソフトウェアにおける 垂直設計と水平設計 ~モジュラーモノリスへ挑戦~ レバテック開発部 河村勇樹
| © Leverages inc. 2 • 所属: ◦ レバテック開発部 テクニカルイネイブリンググループ •
経歴: ◦ 2019年4月 大手Web企業 新卒入社 ◦ 2021年1月 レバレジーズ株式会社 中途入社 • 出身: ◦ 東京都町田市(シティボーイ) • 趣味: ◦ お酒、ゴルフ • 2023年の目標: ◦ ゴルフのスコアを90台80台にのせること • 好きなAWSサービス: ◦ Amplify、CloudFront、ECS、Aurora 自己紹介 Introduction
| © Leverages inc. 3 • 垂直と水平ってなに? • ソフトウェアにおける垂直と水平 • モジュラーモノリスへ挑戦
• モジュラーモノリスを実践 • まとめ アジェンダ INDEX
| © Leverages inc. 4 • システム、ソフトウェアが「なにを軸に分割」 されているのか意識(理解)できるようにな る • ディレクトリが「なにを軸に分割」しているの
か意識(理解)できるようになる • モジュラモノリスのテクニックをなんとなく理 解できるようになる 今日のゴール 目的・目標
垂直と水平?
今日のお話、ググってもあまり出てこない? 「水平分散システム」と「垂直分散システム」の違いとかはあるかも
縦と横って聞いてなにを想像しますか?
None
ある対象を 縦と横に分割することについて考える
人の場合で考えてみる
None
None
上半身? 下半身?
None
左半身? 右半身?
観点を変えて
分身A? 分身B?
仕事 プライベート
役割ごとに 分けることもできる
組織で考えてみる
None
営業 開発
給与管理 勤怠管理
縦を”役割”で分割 横を”機能”で分割
システムで考えてみる
None
None
None
None
None
スケーラビリティ(分散) を目的としてみよう
水平に分散
水平に分散
垂直に分散
垂直に分散 マシンのスペックを向上させること つまり、CPUやRAMを増やすこと 縦の能力を伸ばすこと
垂直スケーラビリティ 水平スケーラビリティ 一般的に言うと
| © Leverages inc. 37 • 物事を目的に応じて、 ◦ 垂直(縦)と水平(横)で分割 • そうすることで、
◦ 目的に応じた設計ができるようにな る ◦ なにを目的としているのかわかりや すくなる 垂直と水平 まとめ
ソフトウェアにおける垂直と水平
ソフトウェア モジュール
ソフトウェア モジュール
水平を”責務”で分割
ソフトウェア モジュール UIモジュール データモジュール
ソフトウェア モジュール View Controller Model
ソフトウェア モジュール Presentation Application Domain Infrastructure
レイヤードアーキテクチャ エンジニアの関心ごとで分割するのはやりやすい?
ソフトウェア モジュール
垂直に”機能”で分割
ソフトウェア 案件モジュール 人材モジュール
ソフトウェア 人材モジュール 人材モジュール ソフトウェア 案件モジュール
| © Leverages inc. 50 • ソフトウェアを”機能”で分割ってなにを軸に分割すればいいのだろうか ◦ サービス単位? ◦ 画面単位?
◦ データ単位? • 安易に分割すると逆に密結合になってしまう ◦ モジュールを分割してしまうと逆に複雑性が増すこともある ▪ それこそ循環参照みたいな状態になってしまったらより複雑になる ◦ ソフトウェアレベルで分割するとアンチパターンに陥る ▪ 分散されたモノリスになってしまうマイクロサービス • では、どうやって分割するのか? ◦ ドメイン分析? ◦ 境界づけられたコンテキスト? ◦ コンポーネントの特定およびサイズ調整? ソフトウェアを”機能”で分割するのは難しい TOPIC
”機能”で分割するには 相当なテクニックがいる そのためにいろんな手法が存在している ※ このテクニックについては本日は割愛
ソフトウェアアーキテクチャ・ハードパーツ ―分散アーキテクチャのためのトレードオフ分析 エリック・エヴァンスのドメイン駆動設計 マイクロサービスアーキテクチャ 第2版
ソフトウェアも垂直と水平に分 割することができる 話を戻すと...
| © Leverages inc. 54 • 目的に応じた設計ができるようになる ◦ どのクラスをどこに配置すればいいのか明確になる ◦ 分割対象ではどのようなことを意識すればいいのか明確になる
• 1つの分割対象に対する認知負荷やコストを下げることができる ◦ レイヤードアーキテクチャの Presentation層ではUIに関することを意識すればよい ◦ 案件モジュールでは案件に関することを意識すればよい • XXX性が向上する ◦ 独立性、保守性、可用性、信頼性、拡張性、 ... ソフトウェアを垂直と水平に分割するメリット TOPIC
| © Leverages inc. 55 • アーキテクチャ アンチパターンである Jumbleというパターンに陥る ◦ 【アーキテクチャ
アンチパターン】Jumbleより • 垂直に分割した要素と水平に分割した要素が入り乱れること ◦ つまり、垂直に分割した目的と水平に分割した目的が正しくない • これにより、XXX性が落ちる ◦ 1つの機能変更に対して、複数のモジュールを変更しなければならない ▪ 単一責任の原則の違反にもなる 垂直な分割と水平な分割に失敗すると... TOPIC
| © Leverages inc. 56 • ソフトウェアも垂直と水平に分割することができ る ◦ 水平→”責務” ◦
垂直→”機能” • ”機能”で分割するには相当なテクニックがいる ◦ 安易に分割するとアンチパターンに陥る こともある • 「適切」に分割することができれば ◦ 目的に応じた設計ができるようになる ◦ XXX性が向上する ソフトウェアにおける垂直と水平 まとめ
モジュラーモノリスへ挑戦
| © Leverages inc. 58 ”すべてのコードが単一のアプリケーションを動かすシステムであり、異なるドメイン間に厳密に強制された境 界があるシステム 適切なモジュール分割を行ったモノリスを調べていくとそれが「モジュラーモノリス」と呼ばれていることを知りま した。 端的に言うと理想的なモジュール分割が行われた「きれいなモノリス」 です。”
[翻訳] Shopifyにおけるモジュラモノリスへの移行 より 👉 1つのデプロイメントラインを維持しつつ、サービス分割をモジュール分割とする モジュラーモノリスってなに? TOPIC
| © Leverages inc. 59 • サービス分割 ◦ システムごと分割するので、 ◦ デプロイ単位も分かれる
▪ マイクロサービスなど • モジュール分割 ◦ システム内のモジュールを分割する ので、 ◦ デプロイ単位は分かれない ▪ モノリスも同様 サービス分割とモジュール分割 TOPIC アーキテクチャ 【まとめ】 -マイクロサービス、ミニサービス、モジュラーモノリス、モノリ シックアーキテクチャを並べて比べてみました-より
None
ソフトウェアにおける 垂直と水平で考えてみる
ソフトウェア モジュール Presentation Application Domain Infrastructure 水平に”責務”で分割
ソフトウェア モジュール Presentation Application Domain Infrastructure 垂直に”機能”で分割
ソフトウェア 案件モジュール Presentation Application Domain Infrastructure 人材モジュール Presentation Application Domain
Infrastructure 垂直に”機能”で分割 ”モジュラーモノリス”が完成
ソフトウェア 案件モジュール Presentation Application Domain Infrastructure ソフトウェア 人材モジュール Presentation Application
Domain Infrastructure ソフトウェアで分割すると、マイクロサービス が完成
ソフトウェア モジュール Presentation Application Domain Infrastructure ソフトウェア 案件モジュール Presentation Application
Domain Infrastructure 人材モジュール Presentation Application Domain Infrastructure ソフトウェア 案件モジュール Presentation Application Domain Infrastructure ソフトウェア 人材モジュール Presentation Application Domain Infrastructure モノリス モジュラーモノリス マイクロサービス
| © Leverages inc. 67 • レイヤー単位で分割 ◦ 1つのソフトウェアに複数のドメイン が存在する可能性がある •
結果 ◦ 技術的な認知負荷は減る ◦ 1つの機能変更に対して、それぞれ のモジュールを修正しなければなら ない レイヤーごとにモジュール化したらだめなの? TOPIC
| © Leverages inc. 68 • モジュラーモノリスとは ◦ 理想的なモジュール分割が行われ た「きれいなモノリス」 ◦
1つのデプロイメントラインを維持しつ つ、サービス分割をモジュール分割 とする ◦ デプロイ単位は分かれない • ソフトウェアにおける垂直と水平を活用し て、モジュラーモノリスにすることができる モジュラーモノリスへ挑戦 まとめ
モジュラーモノリスを実践
| © Leverages inc. 70 流れ 1. モノリス✖レイヤードアーキテクチャ 2. モジュール分割 3.
モジュールをNPMパッケージ化 補足 • 小さく応用 • 実際に応用している例を紹介 実践の流れ INDEX
| © Leverages inc. 71 • presentaition ◦ controller ▪ APIエンドポイント
• application ◦ usecase ▪ ユースケース ◦ adapter ▪ プロセス外依存 • domain ◦ entity ▪ エンティティ ◦ value-object ▪ 値オブジェクト • infrastructure ◦ mysql ▪ MySQLの永続化 ◦ grpc ▪ 別サービスのアクセス 1. モノリス✖レイヤードアーキテクチャ 実践
| © Leverages inc. 72 2. モジュール分割 実践 • project ◦
案件モジュール • engineer ◦ 人材モジュール • entrypoint ◦ APIエンドポイントをルーティング ◦ DIコンテナを設定 ◦ … ※ 上記以外のモジュールはモノリス状態 ※ ルーティングなどは名前の衝突は避ける
| © Leverages inc. 73 • 各モジュールをNPMパッケージ化 ◦ monorepo化 • メリット
◦ パッケージも疎にすることができる ◦ モジュール間の参照をパッケージ参 照にできる ◦ 切り離す時にパッケージごと抜き出 すだけになる 3. モジュールをNPMパッケージ化 実践
| © Leverages inc. 74 • 部分的に適用することも可能 ◦ マイクロサービスへのアクセス ◦ データリソースへのアクセス
◦ … • 右図の例 ◦ 1つにまとまっている状態 ◦ マイクロサービスごとに分割 ◦ モジュールをパッケージ化 • 小さいところから取り組むことができる 小さく応用 補足
| © Leverages inc. 75 • オウンドメディアサイトのバックエンド ◦ gRPC ✖ モジュラーモノリス
• モジュラーモノリスを採用 ◦ 分割軸はメディア毎 ▪ ltc • キャリア領域 ▪ ltf • フリーランス領域 ▪ … • monorepoを採用 ◦ turbopackを利用 実際に応用している例を紹介 補足
まとめ
| © Leverages inc. 77 • 物事を目的に応じて、垂直(縦)と水平(横)で分割することで、 目的に応じた設計ができるようになる • ソフトウェアも垂直と水平に分割することができる •
”機能”で分割するには相当なテクニックが必要で、安易に分割するとアンチパターンに陥ることもある • ソフトウェアも「適切」に分割することができれば 目的に応じた設計ができるようになる • モジュラーモノリスとは理想的なモジュール分割が行われた「きれいなモノリス」 • ソフトウェアにおける垂直と水平を活用して、モジュラーモノリスにすることができる まとめ 最後
垂直と水平の分割 モジュラーモノリスを活用しよう!!! みんなでより良いソフトウェア開発を過ごせるように
| © Leverages inc. 79 • 資料 ◦ 「水平分散システム」と「垂直分散システム」の違い ◦ 分散されたモノリスになってしまうマイクロサービス
◦ 【アーキテクチャ アンチパターン】Jumble ◦ [翻訳] Shopifyにおけるモジュラモノリスへの移行 ◦ アーキテクチャ 【まとめ】 -マイクロサービス、ミニサービス、モジュラーモノリス、モノリシックアーキ テクチャを並べて比べてみました - • 書籍 ◦ エリック・エヴァンスのドメイン駆動設計 ◦ マイクロサービスアーキテクチャ 第2版 ◦ ソフトウェアアーキテクチャ・ハードパーツ ―分散アーキテクチャのためのトレードオフ分析 参考資料・書籍