アーキテクチャパターン

モノリス ものりす

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

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

全部入りの巨大な一体型アプリのことだよ!受付・在庫管理・決済・通知がぜんぶ1つのプログラムにまとまってる状態。小さいうちは便利だけど、大きくなるとどこか直すだけでも全体に影響が出て大変になるんだ!


モノリスとは

モノリス(Monolith) とは、アプリケーションのすべての機能が1つの大きなプログラムとして一体化して動作するソフトウェアアーキテクチャ(設計方針)のことです。ユーザー画面の表示・業務ロジックの処理・データベースへのアクセスが、すべて単一のコードベースにまとまっています。

小規模なうちはシンプルで開発しやすく、特別な工夫なしに動かせるのが強みです。しかし規模が大きくなるにつれて、「一部を修正したら別の機能が壊れた」「アクセスが増えてもシステム全体を丸ごと増強しないといけない」といった課題が出やすくなります。

近年は マイクロサービス(機能を小さな部品に分割する設計)と対比される概念として語られることが多く、「モノリスは古い・悪い」というイメージを持つ人もいますが、実際には小〜中規模のシステムでは今も合理的な選択肢です。


モノリスの構造と特徴

モノリスは通常、以下の3層がひとかたまりになって動作します。

役割
プレゼンテーション層画面表示・ユーザー操作の受付HTML生成、APIエンドポイント
ビジネスロジック層業務処理・計算・ルール適用在庫計算、割引判定
データアクセス層DBへの読み書きSQL発行、ORマッパー

これら3層が1つのアプリケーションとして まとめてビルド・デプロイ(リリース されます。

「一枚岩」で覚えよう

モノリス(Monolith)は英語で「一枚岩」という意味です。ギリシャ語の monos(ひとつ)+ lithos(石)が語源。まさにシステム全体が一枚岩のように一体化しているイメージです。

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

観点メリットデメリット
開発環境構築がシンプル・IDE連携が容易コードが肥大化すると把握困難に
デプロイ1回の操作で全機能をリリースできる小さな修正でも全体を再デプロイ必要
テスト統合テストが書きやすいビルド・テスト時間が長くなりがち
スケール構成が単純で管理しやすい部分的なスケールアップができない
障害原因調査の範囲が限定しやすい1箇所の不具合がシステム全体に波及

歴史と背景

  • 1960〜1980年代:コンピュータ黎明期。ソフトウェアはそもそも全部入りで作るのが当然であり、「モノリス」という言葉自体も存在しなかった
  • 1990年代:クライアント・サーバー型が普及し、画面と処理を分ける概念が登場。それでも業務アプリの大半は一体型で作られていた
  • 2000年代前半:Webアプリの台頭。Ruby on RailsJava EEなどのフレームワークで「1つのアプリに全部書く」スタイルが標準化
  • 2011年頃:Netflixや Amazon がサービスを小さな部品(マイクロサービス)に分割し始め、対比としてこれまでの一体型が「モノリス」と呼ばれるようになる
  • 2015年以降Dockerやクラウドの普及でマイクロサービスが一気に広まり、「モノリス=レガシー」という誤解も広がる
  • 2020年代:「モジュラーモノリス」など、良いとこ取りのアプローチが再評価される流れに

モノリス vs マイクロサービス

モノリスの立ち位置を理解するには、マイクロサービスとの比較が最もわかりやすいです。

モノリス プレゼンテーション層 (画面・API) ビジネスロジック層 (業務処理) データアクセス層 (DB読み書き) 共有データベース まとめて1回デプロイ マイクロサービス 注文 サービス 在庫 サービス 決済 サービス 通知 サービス 注文DB 在庫DB 決済DB 通知DB サービスごとに独立デプロイ

どちらを選ぶべきか?

状況推奨理由
チームが小さい(〜10人)モノリス調整コストが低く開発が速い
要件が固まっていないモノリス設計変更が柔軟にできる
特定機能だけ負荷が高いマイクロサービスその機能だけスケールできる
チームが大きく独立開発したいマイクロサービスチームごとに担当範囲を分けられる

モジュラーモノリスという第三の道

一体型のまま内部だけを機能ごとにきれいに分割する「モジュラーモノリス」も注目されています。マイクロサービスほど運用が複雑にならず、将来的に分割しやすい構造を保てる現実的な選択肢です。


関連する規格・RFC

※ モノリスはアーキテクチャの概念であり、IETFやISOによる公式規格は存在しないため、このセクションは省略します。


関連用語

  • マイクロサービス — アプリを小さな独立した部品に分割する設計手法
  • API — サービス間でデータや機能をやり取りするための接続口
  • コンテナ — アプリを小さな実行環境にまとめる技術。マイクロサービスと相性がよい
  • デプロイ — 開発したアプリを本番環境で動かせる状態にすること
  • スケーリング — アクセス増加に対応してシステムの処理能力を拡張すること
  • 技術的負債 — 短期的な開発速度を優先した結果、後から修正コストが膨らむ状態
  • CI/CD — コードの変更を自動的にテスト・デプロイする仕組み
  • サービス指向アーキテクチャ(SOA) — システムを再利用可能なサービス単位で設計する考え方