モジュラーモノリスに触れてみて感じたこと
はじめまして。パーソルクロステクノロジーのRyo.Kと申します。現在参画しているプロジェクトで「モジュラーモノリス」というアーキテクチャが採用されています。初めて触れるアーキテクチャだったので、自分の中で整理した内容とその上で感じたことをお話しできればと思います。
※本記事の内容は2024年11月公開時点のものです。
自己紹介
1.モジュラーモノリスとは
モジュラーモノリスとは、一つのアプリケーションを複数の独立したモジュールの単位に分割したアーキテクチャのことを指します。膨大な機能を持つ大規模なシステムに対して、開発効率の向上と保守性の高い維持を目的に採用されることが多いです。ECプラットフォームであるカナダのShopifyが導入したことで注目されるようになったアーキテクチャです。
2.モノリス・マイクロサービスとの比較
2.1.モノリスの特徴
単一のコードベースですべての機能をまとめて管理する方法です。コードベースが一つにまとまっているので、テストやデプロイを容易に行うことができます。
システムが大きくなるにつれて密結合になりやすくなるため、一つの変更による影響範囲が大きくなり「どのような副作用を生じさせるか」がわかりづらくなります。それに伴い、すべてのソースを理解する必要性が高くなり、開発効率の低下を招くことがあります。
2.2.モジュラーモノリスの特徴
一つのアプリケーションがモジュールと言われる単位に分割されていることが特徴です。モジュールの単位で開発できるので、担当箇所がより明確になり開発効率と保守性を向上させることができます。また、単一のコードベースであることはモノリスと同じなので、モノリスで実施していたテストやデプロイ方法がそのまま使えます。
2.3.マイクロサービスの特徴
一つのアプリケーションが複数の独立したサービスの組み合わせで構成されていることが特徴です。各サービスが独立しているのでそれぞれでスケールができ、技術選定もサービスに合わせて自由に選べます。サービスごとにDBを分けることになるため、トランザクションが使用できないといったデメリットがあります。またデプロイもサービスごとに実施する必要があるため管理が複雑になりがちです。
3.モジュラーモノリスの難しさ
一見便利そうなアーキテクチャではありますが、導入にあたってはいくつか乗り越えなければならない課題があります。
モジュールの分割方法
ユーザ管理、商品管理など機能ごとに分ける方法やAPI、認証、データベースなどサービスごとに分ける方法などいろいろなパターンがありますが、モジュールの分割方法は開発効率に大きく影響してくるため、今後の事業成長なども踏まえて考える必要があります。モジュラーモノリスを採用する上で一番苦労する部分かと思います。
特定機能のスケールができない
実行時にはモノリスと変わらないのでアプリケーション全体のスケールはできますが、特定の機能だけをスケールアウトすることはできません。特定の機能をスケールしたい場合はマイクロサービスへの移行が必要になってきます。
求められるエンジニアのレベルが高くなる
導入にあたり、依存関係の理解やドメイン駆動設計・クリーンアーキテクチャの理解が最低限必要になってきます。また、担当外のモジュール変更を行ってはいけないなど一定の開発ルールに従ってもらう必要もあります。モジュラーモノリスについて勉強会を開く、ペアプログラミングの実践、コードレビューの強化など、チーム全体でレベルを向上させる必要があります。
4.モジュラーモノリスに触れてみて
独立性の高い機能は将来的にマイクロサービス化をしていきたい。ただ、いきなりマイクロサービスで開発を始めるのはリスクがある……と言ったときに、モジュラーモノリスが選択肢として考えられるなと感じました。
また、アプリケーションをモジュラーモノリスに移行する際は、技術的な要素はもちろん、十分な開発体制の確保やコミュニケーションルールを明確に定めることが必要だと感じました。
モノリスのアプリケーションを作成する場合でも、サービス拡大に伴うアーキテクチャの移行を踏まえて設計をすることが重要になってきていると思います。
5.最後に
私が所属しているグループでは、今回ご紹介したモジュラーモノリスを扱っているプロジェクトをはじめ、プライムSIのプロジェクトを複数手掛けています。各メンバーがプロジェクトを一貫して主導する経験を積みながら、モジュラーモノリスやマイクロサービスなど、いろいろなアーキテクチャに触れ、実践での応用力を高める機会が豊富にあります。
また、プライムSIならではの要件定義から設計製造・運用保守まで、システム全体に関わる経験を積むことができ、技術力はもちろんビジネス視点やプロジェクト全体を俯瞰するスキルも養えます。今後も新しい技術やアーキテクチャに挑戦しながら、最適なソリューションを提供できるチームを目指していきます。
少しでも皆さんのお役立ていただければ嬉しいです。
最後までお読みいただきありがとうございました。
パーソルクロステクノロジーでは幅広いポジションで積極的に採用中!
超上流から関われるプライム案件にジョインしていただけるエンジニアを募集しています。企画から保守運用まで一気通貫で関われるSIerの組織で、エンジニアとしてのキャリアアップを目指しませんか? 現在募集中の職種は、以下リンクの事業領域「システムインテグレーション」をご覧ください。