モノリスファースト
新規プロジェクトではまずモノリスで構築し、ドメイン理解が深まってからマイクロサービスに分割する戦略
モノリスファーストとは
モノリスファースト (Monolith First) は、Martin Fowler が提唱したアプローチで、新規プロジェクトではまずモノリスで構築し、ドメインの理解が深まった段階でマイクロサービスに分割する戦略である。
なぜモノリスから始めるか
初期段階ではドメイン境界が不明確で、正しいサービス分割が分からない。分散システムはネットワーク、整合性、デプロイの複雑さを伴い、1〜5 人の小さなチームには過剰だ。モノリスの方が初期開発が速く、ドメインの理解が深まってから分割する方が、正しい境界でサービスを切り出せる。
モノリス → マイクロサービスの段階
モノリス → マイクロサービスの段階を図で示す。
Phase 1: モノリス
1 つの Lambda に全機能
Phase 2: モジュラーモノリス
モジュール境界を明確化、内部 API で分離
Phase 3: マイクロサービス
モジュールを独立したサービスに分割
いつ分割するか
いつ分割するかの判断基準を以下にまとめる。
| シグナル | 説明 |
|---|---|
| デプロイが遅い | 小さな変更でも全体をデプロイ |
| チームが 2 つ以上 | チーム間の調整コストが増加 |
| スケーリング要件が異なる | 注文処理と検索で負荷が違う |
| ドメイン境界が明確になった | 注文、ユーザー、決済が独立 |
分割は「全部を一度に」ではなく、境界が固まった部分から 1 つずつ切り出すのが定石だ。既存モノリスの周囲に新サービスを少しずつ生やして置き換えていく方法はストラングラーフィグパターンと呼ばれ、モノリスファーストの出口戦略としてよく組み合わされる。
反対意見も知っておく
モノリスファーストには「最初から境界を意識しないと、モノリス内部が密結合になり、後から切り出せなくなる」という反論もある。実際、分割を想定せずに書かれたモノリスは、データベースのテーブルをモジュール間で共有してしまい、切り出しの難易度が跳ね上がることが多い。この対立を実務に落とすと、「デプロイ単位はモノリスで始めつつ、モジュール境界とデータの所有権だけは最初から分けておく」というモジュラーモノリス寄りの折衷が現実解になる。マイクロサービスは目的ではなく、組織とドメインの複雑さに応じて支払うコストであるという視点を忘れないことが、この戦略の本質だ。
より深く学ぶには関連書籍が役立つ。
この記事は役に立ちましたか?
関連用語
モジュラーモノリス
モノリスの内部をモジュールに分割し、マイクロサービスの利点を取り入れたアーキテクチャ
マイクロサービス
1 つの大きなアプリケーションを複数の小さなサービスに分割し、それぞれが独立してデプロイ / スケール可能な状態で協調動作するアーキテクチャパターン
モノリス
全機能を 1 つのデプロイ単位にまとめたアーキテクチャで、シンプルだが大規模化で課題が生じる
アーキテクチャ
システム全体の構造設計。コンポーネントの分割と関係を決める最上位の設計判断
認知負荷
開発者がコードを理解 / 変更するために必要な精神的な労力の量
Strangler Fig パターン
レガシーシステムを段階的に新システムへ移行する設計パターン
関連する記事
技術書典と技術同人誌の世界 - 読者として楽しむガイド
技術書典の楽しみ方と技術同人誌の魅力を紹介。商業出版にはないニッチなテーマの深掘りや、著者と直接話せるイベントの活用法を解説します。
インフラ / クラウド本ガイド - AWS や Docker を本で学ぶ
クラウドインフラ、コンテナ、IaC を学べる技術書の選び方と学習順序を紹介。インフラ本の賞味期限問題と公式ドキュメントとの使い分けも解説します。
深夜 3 時のデプロイ前に読み返したい 1 ページ
本番デプロイの直前、最終確認のチェックリストとして技術書の特定のページが役立つことがあります。緊張の場面で頼りになる「お守りの 1 ページ」の見つけ方と活用法。