ソフトウェアアーキテクチャ

ソフトウェアアーキテクチャ概要 ― 宗派の多い領域の歩き方 ― 生成AI時代のアーキテクチャ超入門

ソフトウェアアーキテクチャ概要 ― 宗派の多い領域の歩き方 ― 生成AI時代のアーキテクチャ超入門

本記事について

当サイトを閲覧いただきありがとうございます。 本記事はシリーズ『生成AI時代のアーキテクチャ超入門』の「ソフトウェアアーキテクチャ」カテゴリの入口として、この領域全体を俯瞰する記事です。

レイヤード/DDD/ヘキサゴナル/クリーン/マイクロサービスモジュラーモノリス──最も多種多様な思想が混在する分野です。本記事では主要な構造パターンの全体像と、「自分たちの規模・スキル・期間で回せるか」という実務的な判断軸を示します。

このカテゴリの全記事一覧・各記事で学べるポイントは以下のページにまとめています。

ソフトウェアアーキテクチャ 記事一覧 ― 生成AI時代のアーキテクチャ超入門senkohome.com/arch-intro-index-software/

本記事のテーマについてさらに詳しく知りたい方は『ソフトウェアアーキテクチャの基礎』も参考にしてみてください。

そもそもソフトウェアアーキテクチャとは何か

建物の構造設計を想像してください。木造か鉄骨か鉄筋コンクリートか──骨格の選び方で建てられる規模・増改築のしやすさ・耐用年数が全て変わります。内装(アプリケーションアーキテクチャ)はこの骨格の上に乗るので、後から骨格を変えるのは非常に大がかりです。

ソフトウェアアーキテクチャは、アプリケーションの全体構造(モノリスモジュラーモノリスマイクロサービスなど)を決める領域です。言語選定・API設計・DB接続方式など、システムの骨格となる判断を含みます。

もしソフトウェアアーキテクチャを決めずに開発を始めると、規模が大きくなった時にコードが絡み合い、変更のたびに予想外の場所が壊れる状態に陥ります。

なぜソフトウェアアーキテクチャが重要なのか

全体構造の選択は後から変えられない

モノリスからマイクロサービスへの移行は「リフォーム」ではなく「建て替え」に近いコストがかかります。最初にどの構造を選ぶかで、チームの開発速度・拡張性・運用負荷が決まります。

チーム規模とアーキテクチャのミスマッチが致命的

3人のチームでマイクロサービスを採用すれば運用に潰され、100人のチームでモノリスを維持すればデプロイが渋滞します。組織の規模に合った構造を選ぶのがアーキテクトの最重要判断です。

設計思想の選択がコードの寿命を決める

レイヤード・DDD・クリーンアーキテクチャなど思想は多様ですが、「チームが運用できるか」という1点で選ぶのが実務の正解です。

宗派の多い領域

システムアーキテクチャと対を成す存在として、「システムを構成する要素の中で根幹となるアプリケーションの外部構造」に注目する領域です。ここで決めた設計方針は、アプリケーションアーキテクチャにも大きく影響するので、整合性を取るのが重要です。

どの思想にも支持者と反対派がいて、SNSでは日々宗派戦争が繰り広げられています。ただ、実務で大事なのは「どの思想が真に正しいか」ではなく、「自分たちのチームで運用できるか」という1点です。

美しい設計でも運用できなければ意味がなく、泥臭い設計でもチームが回せるなら成功です。思想選びではなく、自分たちの規模・スキル・期間で回せるかが判断軸になります。

全体構造の3大パターン

ソフトウェアアーキテクチャの全体構造は、大きく3つのパターンに分かれます。

ソフトウェアアーキテクチャの3大パターン 規模と組織に合った分け方を選ぶ。美しさより「回せるか」が判断軸 モノリス 1つのアプリケーション ユーザー 商品 決済 1 DB ワンルーム 全て一部屋で完結 作り始めが最速 運用・監視がシンプル 小〜中規模 / 少人数チーム 「モノリス=古い」は誤解 マイクロサービス ユーザー サービス 商品 サービス 決済 サービス 配送 サービス API マンション経営 各世帯に鍵・水道・契約 並列開発は得意 運用コストが桁違い 大規模 / 多人数・多チーム 30人未満なら選ばない モジュラーモノリス 1つのアプリ(内部分割) ユーザー 商品 決済 1 DB 3LDKの戸建て 部屋は分かれているが同じ家 運用はモノリス並みにシンプル 将来の分割が容易 中規模 / 将来の分割に備える 迷ったらこれが本命 「分けるのはいつでもできる、戻すのは地獄」。モジュラーモノリスから始めるのが鉄則
パターン特徴向くケース
モノリス1つのアプリにまとめる伝統的な構成小〜中規模 / 少人数チーム
マイクロサービス機能毎に独立したサービスに分割大規模 / 多人数・多チーム
モジュラーモノリスモノリスだが内部を明確にモジュール分割中規模 / 将来の分割に備える

家で例えるなら、モノリスはワンルーム(全てが一部屋)、モジュラーモノリスは3LDKの戸建て(部屋は分かれているが同じ家)、マイクロサービスはマンションの各部屋を別世帯に貸す(自由だが鍵・水道・契約を個別に管理)。こう整理すると、規模と負荷の関係が掴みやすくなります。

ワンルームが手狭になる前に「マンション経営」に手を出すと、確実に家賃回収で疲弊します

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

観点モノリスマイクロサービス
開発の始めやすさ◎ シンプル△ 複雑
小規模運用◎ 楽× オーバースペック
大規模・多チーム運用△ コンフリクト多発◎ 並列開発可能
デプロイ単位全体を一括サービス毎に独立
障害の影響範囲全体に波及局所化しやすい

「最初からマイクロサービス過剰設計の典型です。モジュラーモノリスから始めるのが現在の本命で、組織規模が30人を超えてから段階的に分割するのが健全なパスです。

「分けるのはいつでもできる、戻すのは地獄」モジュラーモノリスから始めるのが鉄則です。

決めるべきこと — 自分のプロジェクトでの答えは?

以下の項目について、自分のプロジェクトの答えを1〜2文で言語化してみてください。曖昧なまま着手すると、必ず後から「なぜそう決めたんだっけ」が問われます。

構造・言語・フレームワーク

項目選択肢の例
全体構造モノリス・マイクロサービス・モジュラーモノリス等
モジュール設計レイヤード・ドメイン駆動・ヘキサゴナル等
プログラミング言語Java・C#・Python・Go・Rust・TypeScript等
フレームワークSpring・.NET・Next.js・Django等
アプリケーションサーバSpring Boot・Tomcat・Gunicorn・Node.js等

通信・認証・トランザクション

項目選択肢の例
通信・API設計REST・GraphQL・gRPC・WebSocket
トランザクション設計ACID(DBの整合性4原則)・結果整合性・Saga(分散TXを補償処理でつなぐパターン)
エラーハンドリング例外方針・リトライ・Circuit Breaker(連続失敗時に呼び出しを遮断する仕組み)
ログ設計構造化ログ・相関ID・集約基盤
暗号化設計転送時・保存時の暗号化方針
セッション管理Cookie・JWT・Refresh Token

規模×ソフトウェア構造の段階表

ソフトウェアアーキテクチャはチーム人数で推奨構造がほぼ決まります。Conway’s law(組織構造がシステム構造を決めるという経験則)が強く働く領域です。

ざっくり結論だけ先に言うと、1〜10人なら TypeScript の単一DBモノリスで十分、10〜30人でモジュラーモノリスに昇格、30人を超えてから部分的にマイクロサービスを切り出す。このパスが2026年時点で最も失敗が少ないルートです。

チーム人数推奨構造DB構成言語数API方式
1〜3人モノリス1DB1言語(TS等)REST
3〜10人モノリス → モジュラーモノリス1DB1〜2言語REST + 一部WebSocket
10〜30人モジュラーモノリス1〜2DB2言語以内REST + 内部gRPC
30〜100人モジュラー + 部分的マイクロサービス用途別分離2〜3言語REST + gRPC + イベント
100人〜マイクロサービス(中核)+ モジュラーモノリス(業務領域)サービスごと3〜5言語gRPC + Kafka

マイクロサービスの実質下限は「チーム30人 + 運用専任5人以上」です。Segmentの140サービス → モノリス回帰(2020年)や、Amazon Prime Video チームのサーバーレス+マイクロサービスからモノリス統合(2023年、インフラコスト90%削減)が典型で、規模に見合わない分散は必ず破綻します。

モジュラーモノリスから始めます。分けるのはいつでもできるが、戻すのは地獄になります。

やってはいけないこと

各論記事で触れた禁じ手のうち、ソフトウェアアーキテクチャレベルで押さえるべき核心を整理します。

禁じ手なぜダメか
30人未満でマイクロサービス化Segment 2020年と同じ結末、分散TXの沼
新技術を情報量・人材なしで採用5年後に書ける人が消え、塩漬けプロジェクト化
スキーマレスDBを強整合業務に採用MongoDB事件の定番、PostgreSQLから始める
認証を自前実装穴だらけになる、Auth0 / Clerk / Firebase Auth へ委譲
APIをスキーマなしで公開OpenAPI / Protobuf / GraphQL Schema で明示
2PC(Two-Phase Commit、2相コミット)をクラウドで本番運用ネットワーク障害で全停止、Saga + Outbox へ
1プロジェクト5言語以上混在保守人員が分散、2言語以内が健全
モジュール境界を引かずモノリス運用10人超えで変更衝突が頻発、最初から境界を引く
マイクロサービスを性能目的で選ぶ性能はサービス間通信のオーバーヘッドでむしろ下がる。スケールは縦が先
DDDのパターン名だけ真似て業務用語を整理しないただクラスが増えるだけの過剰設計に終わる

ソフトウェアアーキテクチャは規模と成熟度の関数。自分たちの痛みで選びます。

AI判断軸

AI駆動開発(バイブコーディング)が前提になると、ソフトウェアアーキテクチャ全体で「AIに読みやすく・書きやすい設計」の重要度が増します。

AI時代に有利AI時代に不利
コードで明示される設計(型・スキーマ・制約)口頭伝承・属人的な運用ルール
主流の組み合わせ(Next.js・Spring Boot等)ニッチ・内製フレームワーク
モジュラーモノリス + 標準プロトコル複雑なマイクロサービス+独自プロトコル
単一リポジトリで全体が見える構成多数のリポジトリに分散した仕様

選定の優先順位をまとめると次の通りです。

  1. 規模・チーム体制を先に見て、過剰設計を避ける(デフォルトはモノリス系)
  2. 言語・フレームワークは主流を選ぶ(AI時代の生産性で差がつく)
  3. 標準プロトコルREST/gRPC/OIDC等)に寄せる
  4. 型・スキーマ・制約をコードで明示する(AIに読める設計)

アーキテクチャ選定がAI活用の上限を決める

AIにコードを書かせる時、精度を左右する最大の要因は「AIに渡せるコンテキストの質」です。型定義やスキーマがコードとして存在すれば、AIはそれを読んで正確なコードを生成します。逆に、設計がWiki上の図やSlackでの口頭合意にしか存在しない場合、AIには見えないため毎回手動で説明を書き添える必要があります。

ここでのポイントは、AI時代に有利な設計特性(型の明示・標準プロトコル・モジュール分割)は、AI以前から「良い設計」とされてきたものと完全に一致するということです。AI時代だからといって特殊なアーキテクチャが求められるのではなく、従来の良い設計をきちんと実践しているチームがAIの恩恵を最も受けます。

モノリスがAI活用で有利になる構造的な理由

マイクロサービスでは仕様が複数リポジトリに分散します。サービスAのコードを修正する際に、サービスBのAPI仕様・サービスCのイベントスキーマ・共有ライブラリの型定義を同時にAIのコンテキストに入れる必要があり、情報収集だけで手間がかかります。

モジュラーモノリスであれば、同一リポジトリ内にすべての型定義・スキーマ・テストが存在するため、AIは関連コードを一度に参照できます。境界はモジュール(パッケージ)で論理的に区切りつつ、物理的には1つのリポジトリで管理する――この構成がAI時代のデフォルトとして最も合理的です。

モジュラーモノリスの構成イメージ 1つのアプリ内をモジュールで区切り、インターフェース経由でのみ連携 単一アプリケーション(1つのデプロイ単位) ユーザー Controller Service Repository Entity 公開API(interface) 商品 Controller Service Repository Entity 公開API(interface) 決済 Controller Service Repository Entity 公開API(interface) 通知 Controller Service Repository Entity 公開API(interface) 直接参照禁止 共有DB(1つ) 同一リポジトリ=AIが全コードを一度に参照できる モジュール間はinterface経由のみ。直接参照は禁止 運用はモノリス並み、構造はマイクロサービス並み。2026年の本命構成

主流技術スタックの選定がAI精度に直結する

Next.js + TypeScript + Prismaのような主流スタックは、GitHubの公開リポジトリに数十万件規模の実装例があります。AIの学習データにこれらのパターンが大量に含まれているため、生成されるコードの品質が安定します。

内製フレームワークやニッチなライブラリの場合、AIは類似の公開コードを参照できないため、基本的な使い方すら間違えることがあります。技術選定の時点で「AIが学習済みかどうか」を判断基準の一つに加えるのが2026年の現実です。

このカテゴリの知識構造

このカテゴリは全8記事で構成されています。記事は3つのグループに分かれ、大枠の骨格から個別の設計判断へと段階的に降りていく構造です。

ソフトウェアアーキテクチャの節構成と3グループ 骨格→通信→横断の順に、大枠から個別の設計判断へ降りていく グループ1:骨格 全体構造を決め、道具を選ぶ 1. 全体構造の選び方 モノリス / マイクロサービス / モジュラーモノリス 2. プログラミング言語の選び方 TypeScript / Go / Rust / Java / Python 3. FW・モジュール設計 Next.js / Spring Boot / クリーンアーキテクチャ 構造→道具の順で決める グループ2:通信 モジュール間をどう繋ぐか 4. API設計 REST / gRPC / GraphQL 5. トランザクション設計 ACID / 結果整合性 / Saga 6. エラーハンドリング リトライ / Circuit Breaker 骨格の上で通信を設計 グループ3:横断 全通信に絡む共通テーマ 7. 認証・認可 OAuth / OIDC / JWT / RBAC 8. セッション管理 Cookie / JWT / Refresh Token セキュリティ章と合わせて読む 全レイヤーに横断する 骨格を決めずに通信を設計すると、構造と道具のミスマッチが起きる

**グループ1(骨格)**では、モノリス/マイクロサービスの全体構造を決め、それに合った言語・FW・モジュール分割を選びます。全体構造を決めずに言語やFWを先に選ぶと、構造と道具のミスマッチが起きます。

**グループ2(通信)**では、骨格の上でモジュール間・サービス間をどう繋ぐかを設計します。REST/gRPC/GraphQLの選択はAPI記事で、分散トランザクションの扱いはトランザクション記事で掘り下げます。

**グループ3(横断)**の認証・セッション管理は、全ての通信に絡む横断テーマです。セキュリティアーキテクチャカテゴリの認証設計記事と合わせて読むと、実装レベルとポリシーレベルの両面が揃います。

ケース別の選定

新規のWEBサービス(スタートアップ・SaaS初期)

モジュラーモノリス + TypeScript + Next.js + REST + Cookieセッション。作り始めの速度と、拡大した時の分割容易性を両立できる現在の鉄板です。1DB完結でACIDを効かせ、分散TXを抱えない構成が最もバグを呼びにくい。

既存モノリスの分割が必要になった

モジュラーモノリスへ段階移行 → 本当にボトルネックになっている機能だけを切り出します。全面マイクロサービス化は運用負荷だけが増えて、業務価値に見合いません。Saga + Outbox(DBの更新と一緒にメッセージも書き込み、後から確実に配送するパターン)は切り出した時に初めて導入します。

複雑な業務ロジックがある基幹システム(金融・保険・医療)

Spring Boot または ASP.NET Core + クリーン or ヘキサゴナル + DDD + 強整合(ACID)。業務ルールが多く長寿命な領域では、ドメインを外部依存から守る投資が長期的に回収できます。OIDC + SSO基盤で権限管理も一元化するのが定番です。

トラフィック急増が予想されるSaaS・コンシューマーサービス

モジュラーモノリス + 読み取り系は結果整合 + CDN + キャッシュ層。書き込みは強整合を維持しつつ、閲覧系は結果整合で水平スケールさせるのが常道。最初からマイクロサービスに分けるより、ボトルネック箇所を見極めて部分的にスケールする方が健全です。

まとめ

本記事はシリーズ『生成AI時代のアーキテクチャ超入門』の「ソフトウェアアーキテクチャ」カテゴリの入口として、この領域全体を俯瞰しました。如何だったでしょうか。

ソフトウェアアーキテクチャは思想の宗派が多い領域ですが、判断軸は「自分たちのチームで回せるか」に尽きます。モジュラーモノリス + 主流FW + 標準プロトコルの3点セットを基本に、AIに優しい設計が長期保守では人間にも優しい方向に重なるという見方を外さないのが2026年の現実解です。

次回からはこの領域の各論に入り、まずプログラミング言語の選び方から解説していきます。

シリーズ目次に戻る → 『生成AI時代のアーキテクチャ超入門』の歩き方

本記事で扱った内容の詳細は Martin Fowler - Software Architecture Guide も合わせて参考にしてください。

それでは次の記事も閲覧いただけると幸いです。