モノリシックアーキテクチャ ものりしっくあーきてくちゃ
簡単に言うとこんな感じ!
システムの機能を全部まとめて「ひとかたまり」で作るスタイルだよ。弁当箱に例えると、ごはん・おかず・デザートが全部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年代 — 「最初はモノリスで作り、必要になったらマイクロサービスに分割する」という段階的アプローチが現実解として定着
モノリスとマイクロサービスの比較
モノリシックアーキテクチャとマイクロサービスアーキテクチャは、現在のシステム設計における最大の対比軸です。
どちらを選ぶべきか? は規模・チーム・フェーズによります。
| 状況 | 推奨 |
|---|---|
| チームが小さい(〜10人)、スタートアップ初期 | モノリス |
| 機能数・トラフィックが増大し始めた | モジュラーモノリスを検討 |
| 組織が大きく、複数チームで並行開発 | マイクロサービス |
| 特定機能だけスケールアップしたい | マイクロサービス |
モジュラーモノリスという折衷案
モジュラーモノリス(Modular Monolith)は、コードを機能ごとに明確なモジュールに分けながらも、デプロイは1つのアプリとして行う設計です。「最初はモノリスで素早く作り、将来マイクロサービスに切り出しやすい状態を保つ」という現実的な戦略として注目されています。
関連用語
- マイクロサービスアーキテクチャ — 機能を小さなサービスに分割して独立稼働させる設計スタイル
- API — マイクロサービス間の通信に使われるインターフェース
- コンテナ — マイクロサービスのデプロイ単位として広く使われる仮想化技術
- CI/CD — 継続的インテグレーション・デリバリー。モノリスでは全体リリースのたびに必要になる
- スケールアウト — サーバー台数を増やして処理能力を高める手法
- 技術的負債 — 設計の妥協が将来の開発コストを押し上げる概念。モノリスの肥大化とセットで語られることが多い
- デプロイ — 作ったシステムを本番環境に配備すること
- サービス指向アーキテクチャ(SOA) — マイクロサービスの前身となった分散設計の考え方