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

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

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

本記事について

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

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

このカテゴリの他の記事

宗派の多い領域

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

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

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

全体構造の3大パターン

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

flowchart LR
    M["モノリス<br/>(全機能を1アプリ)"]
    MM["モジュラーモノリス<br/>(1アプリだが内部分割)"]
    MS["マイクロサービス<br/>(機能毎に独立サービス)"]
    M -- "規模拡大・<br/>組織肥大" --> MM
    MM -- "30人超え/<br/>独立デプロイ要" --> MS
    MS -. "過剰分割の反省" .-> MM
    classDef mono fill:#dbeafe,stroke:#2563eb;
    classDef mod fill:#fef3c7,stroke:#d97706;
    classDef micro fill:#fae8ff,stroke:#a21caf;
    class M mono;
    class MM mod;
    class MS micro;
パターン特徴向くケース
モノリス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(JSON Web Token、署名付きトークン)・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人超えで変更衝突が頻発、最初から境界を引く

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

AI時代の視点

AI駆動開発(バイブコーディング)が前提になると、ソフトウェアアーキテクチャ全体で「AIに読みやすく・書きやすい設計」の価値が跳ね上がります。全体構造・言語・API・認証などの各選定は、AIがどれだけそのパターンを知っているかが精度を決定します。

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

AI時代の鉄則は「選択を単純化し、標準に寄せる」です。尖った構成は人間が楽しむ時だけで、業務ではAIの精度が上がる主流構成を選ぶのが賢い判断です。

「AIに優しい設計」と「人間にも優しい設計」は、主流・標準・規約という軸で重なる― この見方が全領域で通用します。

ケース別の選定

新規の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 + キャッシュ層。書き込みは強整合を維持しつつ、閲覧系は結果整合で水平スケールさせるのが常道。最初からマイクロサービスに分けるより、ボトルネック箇所を見極めて部分的にスケールする方が健全です。

よくある勘違い

  • マイクロサービス = スケーラブル」 → マイクロサービスは「組織の分割」の話で、性能の話ではありません。実際、サービス間通信のオーバーヘッドでモノリスより遅くなるケースも珍しくなく、性能目的だけなら1DBの縦スケールの方が速く安く済む。典型的な地雷
  • DDD = 技術的パターン」 → DDDはリポジトリや集約といったパターン名が有名ですが、本質は「業務の言葉でモデルを育てる設計思想」パターンだけ真似して業務用語を整理しないと、ただクラスが増えるだけの過剰設計に終わる
  • 「言語・FW選定 = 個人の好み」 → 言語とフレームワークは人材市場・採用コスト・5年後の保守性を決める経営判断です。尖った新興言語を好みで選ぶと、数年後に書ける人が採れず、プロジェクトが塩漬けになる
  • 「最新の思想ほど優れている」モノリスは今も現役で、小〜中規模では最良の選択肢であり続けています。新しい概念は大規模組織の痛みを解決するために生まれたもので、自分たちに同じ痛みがないなら採用する理由がない

最終的な判断の仕方

ソフトウェアアーキテクチャは思想の宗派が最も多い領域で、「正解は1つではない」が大前提です。そのため選定の核は「どの思想が正しいか」ではなく、「自分たちの規模・スキル・期間で回せるか」に尽きます。

人気の思想に流されて過剰設計に走るより、シンプルな構成から始めて必要に応じて分割するほうが、ほぼ常に正解になります。

定石はモジュラーモノリス + 主流フレームワーク + 標準プロトコル」の組み合わせです。最初からマイクロサービスは過剰設計の典型で、組織規模と運用体制がついてきてから分割するのが健全なパスです。

AI駆動開発では「AIが熟知している主流構成」ほど生産性が高くなるため、「尖った選定は趣味の領域、業務は主流に寄せる」という割り切りが効きます。

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

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

まとめ

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

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

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

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

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