モノリシックとは(結論から)
**モノリシック(Monolithic)**とは、ログイン・決済・検索などシステムに必要な機能をすべて1つの大きなプログラムとしてまとめて作る設計方式のことです。「一枚岩の」という意味の英単語がそのまま名前になっています。対になる考え方が「マイクロサービス」で、こちらは機能ごとに小さく分割して作る方式を指します。
以下で、この2つの違いをもう少し詳しく見ていきます。
そもそも何がどう違うのか
モノリシック(Monolithic、「一枚岩の」という意味)とマイクロサービス(Microservices)とは、どちらもシステムの**作り方(設計方針)**を表す言葉です。
- モノリシック:ログイン機能、決済機能、検索機能など、システムに必要な機能をすべて1つの大きなプログラムとしてまとめて作る方式
- マイクロサービス:機能ごとに小さな部品(サービス)に分割し、それぞれを独立したプログラムとして作り、互いに通信させながら1つのシステムとして動かす方式
「一軒家」と「集合住宅」で考える
この2つの違いは、建物の作り方に例えるとイメージしやすくなります。
- モノリシックは、すべての部屋(機能)が1つの建物の中に一体となって作られている「一軒家」のようなもの
- マイクロサービスは、それぞれ独立した部屋(サービス)が、廊下(通信の仕組み)でつながっている「集合住宅」のようなもの
一軒家は全体の作りがシンプルで見渡しやすい一方、集合住宅は各部屋を独立して増改築でき、1つの部屋の工事が他の部屋にほとんど影響を与えません。
それぞれのメリット・デメリット
| 項目 | モノリシック | マイクロサービス |
|---|---|---|
| 開発のしやすさ(初期) | シンプルで始めやすい | 部品分割の設計に手間がかかる |
| 一部機能だけの修正・拡張 | 全体に影響が及びやすい | 対象のサービスだけ独立して修正しやすい |
| 障害の影響範囲 | 一部の不具合が全体停止につながりやすい | 一部のサービス停止に影響をとどめやすい |
| 管理の複雑さ | システム全体は1つでシンプル | サービス同士の通信管理など、全体としては複雑になりやすい |
なぜマイクロサービスが注目されるようになったのか
事業の規模が大きくなり、関わる開発チームの人数が増えてくると、モノリシックな作り方では「1つの機能を直すために、全体のテストや公開作業が必要になる」といった非効率が目立ってきます。そこで、機能ごとに独立してチームが開発・公開できるマイクロサービスの発想が、大規模なサービスを中心に広まってきました。
どちらを選ぶべきか
- サービス開始直後で、要件や機能の境界線がまだ固まっていない段階では、モノリシックでシンプルに始める判断も有効
- 事業が拡大し、複数のチームが同時並行で異なる機能を開発するようになった段階では、マイクロサービスへの移行を検討する価値がある
多くの成長したサービスでは、最初はモノリシックで始め、規模の拡大に応じて段階的にマイクロサービスへ移行していく、という道をたどっています。
これは、フレームワークとライブラリの選び方の記事で触れた「最初から最適解を狙うより、段階的に選ぶ方がうまくいく」という考え方とも通じるところがあります。将来の拡張性を見越して最初から複雑な構成を組むより、今の規模に見合った選択をして、必要になった時に移行する方が、結果的に無駄が少なくなることが多いです。
マイクロサービスを支える周辺技術
マイクロサービスは「分割する」という設計方針だけでは成り立たず、それを実現するための周辺技術とセットで語られることがほとんどです。
- コンテナ:それぞれのサービスを軽量な箱(コンテナ)に詰めて、環境に依存せず動かせるようにする技術。仮想マシンとの違いは別の記事で解説しています
- CI/CD:サービスごとに独立して開発・公開できる恩恵を最大限に活かすため、テストや公開作業を自動化する仕組み。詳しくはCI/CDとは何かの記事をご覧ください
- API:分割されたサービス同士が通信し合うための「窓口」の役割。APIとは何かの記事で身近な例をもとに解説しています
これらの技術が組み合わさって、はじめてマイクロサービスは実用的な選択肢になります。逆に言えば、コンテナやCI/CDの整備が追いついていない状態でサービスだけを細かく分割してしまうと、かえって管理の手間が増え、モノリシックより扱いにくくなってしまうケースも少なくありません。