アーキテクチャパターン

モノリシックアーキテクチャ ものりしっくあーきてくちゃ

モノリスマイクロサービスアプリケーション設計デプロイスケーリング技術的負債
モノリシックアーキテクチャについて教えて

簡単に言うとこんな感じ!

システムの機能を全部まとめて「ひとかたまり」で作るスタイルだよ。弁当箱に例えると、ごはん・おかず・デザートが全部1つのパックに詰まってる感じ。小さいうちは便利だけど、量が増えると取り回しが大変になってくるんだ!


モノリシックアーキテクチャとは

モノリシックアーキテクチャ(Monolithic Architecture)とは、アプリケーションのすべての機能・コンポーネントを1つのコードベースにまとめ、単一のプロセスとして動作させるシステム設計のスタイルです。「モノリス(Monolith)」とは「一枚岩」を意味し、その名の通り、機能が分割されずひとつの塊として存在します。

Webアプリケーションで言えば、ユーザー認証・商品管理・注文処理・メール送信といったすべての機能が、同じプロジェクトの中に収まっており、まとめてビルド・デプロイ(サーバーに配備)されます。小規模な開発の初期段階では開発効率が高く、チームが小さいうちは管理もシンプルです。

一方で、システムが成長するにつれて「一部を変更すると全体に影響が出る」「特定の機能だけスケールアップ(処理能力強化)できない」といった課題が現れてきます。近年注目されるマイクロサービスアーキテクチャが対比的に語られることが多く、モノリスからの移行を検討する企業も増えています。


モノリシックアーキテクチャの構造と特徴

モノリシックアーキテクチャは、内部的には以下のような層(レイヤー)で構成されることが多いです。

層(レイヤー)役割
プレゼンテーション層ユーザーへの画面表示・入力受付HTMLレンダリング、API応答
ビジネスロジック層業務ルールの処理注文計算、在庫チェック
データアクセス層DBへの読み書きSQL発行、ORM処理
データベースデータの永続化RDB(MySQL, PostgreSQL 等)

これらすべてがひとつのアプリケーションとして動作し、まとめてデプロイされます。

モノリスの「3つの一体性」

モノリシックアーキテクチャを特徴づける性質を「3つの一体性」として覚えておくと便利です。

  • コードの一体性 — すべての機能が1つのリポジトリ(ソースコード置き場)に存在する
  • デプロイの一体性 — 1か所を変更しても、システム全体を再ビルド・再デプロイする必要がある
  • スケールの一体性 — 一部の機能だけ増強できず、システム全体をまとめてスケールアップするしかない

モノリスのメリット・デメリット

観点メリットデメリット
開発速度初期は速い・シンプル規模拡大で複雑化
デプロイ手順が単純小さな変更でも全体リリースが必要
テスト結合テストが容易テスト範囲が広く時間がかかる
スケーリング設計がシンプル特定機能だけの拡張が難しい
障害影響影響範囲が読みやすい一部障害が全体停止につながりやすい
運用コストサーバー台数が少ないシステム肥大化で運用が困難に

歴史と背景

  • 1960〜1970年代 — コンピュータシステムは当初から「1台のメインフレームにすべてが集中」するモノリス型。分散という概念がそもそも存在しなかった
  • 1990年代 — クライアント・サーバー型が普及するも、サーバー側のアプリは依然モノリシックが主流
  • 2000年代初頭JavaのEE(エンタープライズ版)や .NET で大規模モノリスが企業システムの標準形に。ERP・基幹システムの多くがこの形で構築される
  • 2010年代 — AmazonやNetflixが大規模モノリスの限界(デプロイに時間がかかる・一部障害が全体停止を引き起こすなど)を公表し、マイクロサービスへの移行を推進。業界全体の関心が高まる
  • 2015年前後〜 — マイクロサービスブームの反動として「モジュラーモノリス」(機能を内部で分割しつつ1デプロイに保つ折衷案)が再評価される
  • 2020年代 — 「最初はモノリスで作り、必要になったらマイクロサービスに分割する」という段階的アプローチが現実解として定着

モノリスとマイクロサービスの比較

モノリシックアーキテクチャとマイクロサービスアーキテクチャは、現在のシステム設計における最大の対比軸です。

モノリス vs マイクロサービス モノリシックアーキテクチャ UI / プレゼンテーション層 ビジネスロジック層 データアクセス層 共有データベース(1つ) まとめて1回デプロイ ▶ 単一プロセス・単一リリース マイクロサービスアーキテクチャ 認証 サービス 商品 サービス 注文 サービス 通知 サービス DB-A DB-B 個別に独立してデプロイ ▶ 複数プロセス・個別リリース 分割

どちらを選ぶべきか? は規模・チーム・フェーズによります。

状況推奨
チームが小さい(〜10人)、スタートアップ初期モノリス
機能数・トラフィックが増大し始めたモジュラーモノリスを検討
組織が大きく、複数チームで並行開発マイクロサービス
特定機能だけスケールアップしたいマイクロサービス

モジュラーモノリスという折衷案

モジュラーモノリス(Modular Monolith)は、コードを機能ごとに明確なモジュールに分けながらも、デプロイは1つのアプリとして行う設計です。「最初はモノリスで素早く作り、将来マイクロサービスに切り出しやすい状態を保つ」という現実的な戦略として注目されています。


関連用語

  • マイクロサービスアーキテクチャ — 機能を小さなサービスに分割して独立稼働させる設計スタイル
  • API — マイクロサービス間の通信に使われるインターフェース
  • コンテナ — マイクロサービスのデプロイ単位として広く使われる仮想化技術
  • CI/CD — 継続的インテグレーション・デリバリー。モノリスでは全体リリースのたびに必要になる
  • スケールアウト — サーバー台数を増やして処理能力を高める手法
  • 技術的負債 — 設計の妥協が将来の開発コストを押し上げる概念。モノリスの肥大化とセットで語られることが多い
  • デプロイ — 作ったシステムを本番環境に配備すること
  • サービス指向アーキテクチャ(SOA) — マイクロサービスの前身となった分散設計の考え方