C
バイブコーディング/アーキテクチャ/Lesson 09

アーキテクチャ — MSA · メッセージキュー · Event Sourcing · CQRS · API Gateway

30分·theory

アーキテクチャ — MSA · メッセージキュー · Event Sourcing · CQRS · API Gateway

🎯 このレッスンを読み終えたら

このレッスンをすべて読み終えると、以下の3つを自信を持って実践できるようになります。

  • ✅ モノリス vs MSA の判断基準5項目チェックリスト
  • ✅ mermaid を使ったシステム図の可視化
  • ✅ 関心事の分離 (Presentation · Domain · Data)

学習目標をチェックリストとして手元に置き、すべて答えられるようになったらレッスンを閉じてください。

MSA · メッセージキュー · API Gateway

MSA (Microservices Architecture) vs モノリス:

項目モノリスMSA
デプロイ全体を一度にサービスごとに独立
技術単一スタックサービスごとに選択 (Java·Go·Python)
スケーリング全体をスケールホットスポットのみスケール
障害全体ダウン部分的のみ
複雑度低い高い (ネットワーク·一貫性)
適合小規模·初期段階大規模·多チーム

メッセージキュー — 非同期通信:

キュー用途
Kafka大容量ストリーム (イベントソーシング)
RabbitMQ汎用メッセージング (RPC·タスクキュー)
SQSマネージド (AWS)
NATS軽量·高パフォーマンス
Redis Streams小規模システム

API Gateway — MSA の単一エントリーポイント:

  • ルーティング (リクエスト → 適切なサービスへ)
  • 認証·認可 (各サービスで重複させない)
  • レート制限·キャッシング·ロギング
  • 代表例: Kong·AWS API Gateway·Envoy·Traefik

> 💡 MSA はいつ?: チーム8名以上 · トラフィックがドメインごとに大きく異なる場合。それまではモノリス → モジュール化 → 抽出。

Event Sourcing + CQRS

Event Sourcing状態ではなくイベントを保存

  • 従来方式: users テーブルの行を更新
  • ES: events テーブルに UserCreated·EmailChanged を追記 (不変)
  • 現在の状態 = すべてのイベントを再生 (replay)

メリット:

  • 完全な監査ログ (誰が·いつ·何をしたか)
  • タイムトラベル (過去の状態を再現)
  • 新しい読み取りモデルを追加しやすい

デメリット:

  • 複雑性の増加 (単純な CRUD と比較して)
  • イベントスキーマの変更が難しい (イベントは不変)
  • 学習曲線が急峻

CQRS (Command Query Responsibility Segregation):

  • Command (書き込み) — 正規化された DB、トランザクション
  • Query (読み取り) — 非正規化·キャッシュ·検索エンジン

: ショッピングモール

  • Command: PostgreSQL (注文処理·決済)
  • Query: Elasticsearch (商品検索)、Redis (キャッシュ)
  • 同期: Kafka で変更イベントを配信

適している場面:

  • 🟢 読み取り/書き込み比率の差が大きい (例: 10000:1)
  • 🟢 複雑な検索·集計
  • 🔴 単純な CRUD → オーバーキル

> 💡 ES + CQRS = よく一緒に使われる。イベント → 複数の読み取りモデルに変換。

現代における活用例:

  • Banking: ES が標準 (監査·規制対応)
  • E-commerce: 注文ドメインのみ ES を適用
  • Gaming: プレイヤーアクションの記録

バイブコーディングと*アーキテクチャ* — なぜ両方知る必要があるのか

核心の一言

AI に「MSA で作って」とだけ伝えると、モノリスをただ分割するだけになります。本物の MSA ではなく、分散モノリス (最悪の形態) が出来上がります。

なぜ AI だけではアーキテクチャが決まらないのか

LLM はコードパターンを学習しているだけで、ビジネスドメインは理解していません。サービス境界がどこにあるか、どの情報を誰が所有するか人間が決定しなければなりません。

悪いプロンプト:
> 「このモノリスを MSA に分割して」

→ AI: User ServiceOrder ServicePayment Service... 単純な分離。
→ 結果: サービス間の循環呼び出し + トランザクション破綻 — 本物の分散モノリス

良いプロンプト:
> 「以下のビジネス境界で MSA を設計して:
> - Auth Service: ユーザー認証·セッション。他のサービスはJWT のみを受け取る
> - Order Service: 注文フロー。Payment とはイベント経由で通信 (密結合は NG)
> - Notification Service: 通知。他のサービスはKafka トピックにパブリッシュ
>
> ACID トランザクションが必要な箇所: 決済。Saga パターンを使用。」

→ AI: 明確な境界で本物の MSAを実装。

判断チェックリスト — 自分のプロジェクトはモノリス?MSA?

5 問 (各 0〜2 点、合計 10 点):

質問0点1点2点
チーム規模1〜3名4〜10名10名以上
トラフィック1日 1万未満1日 10万1日 100万以上
デプロイ頻度週1回未満週1〜3回1日1回以上
技術スタックの多様性単一言語2〜3言語4サービス以上で異なる
障害分離の重要性低い中程度非常に重要 (決済·金融)
  • 0〜3点 → モノリス。他のことは気にしない。Next.js + DB 一つから始める
  • 4〜6点モジュール境界を明確にしたモノリス。将来の分離に備える
  • 7〜10点 → MSA を検討。ただし、モノリスから始めて問題が発生した部分だけ分離を推奨

「まずモノリスから」という真理

> "If you can't build a monolith, what makes you think microservices is the answer?" — Simon Brown

95% のスタートアップは、モノリス + しっかりと分離されたモジュールで十分です。MSA は明確なペインポイントがあるときだけ。

落とし穴 — MSA の隠れたコスト

項目モノリスMSA
デプロイの複雑さ1つN個 + オーケストレーション
モニタリング1つのログ分散トレーシング
トランザクションDB ACIDSaga パターン (複雑)
デバッグ一箇所ネットワーク境界
運用人員1〜2名DevOps チームが必須

スタートアップ段階での MSA = 時間とお金の無駄。Toss・クーパン レベルのトラフィックになってから検討しましょう。

AI にアーキテクチャを聞くパターン

❌ 「MSA とモノリスはどちらが良いですか?」 — 抽象的すぎる

✅ 「私のプロジェクトはチーム3名·1日5千ユーザー·週1デプロイ·Node.js 単一スタックです。この状況で MSA は意味がありますか?チェックリストに基づいて分析してください。」

→ AI が自分の状況に合った回答を返してくれる。

まとめ

  • AI はコードパターンしか知らない。ビジネス境界は人間が決める
  • 5問チェックリストで自分の状況を診断する
  • まずモノリスから。MSA は本当に必要なときだけ
  • AI に質問するときは具体的な状況を明示する

🤖 AI にこう依頼してみよう

このレッスンの概念を知っていれば、AI に具体的に指示できます。漠然とした「直して」ではなく、語彙を持ったリクエスト — それがトークン節約の出発点です。

  • 「このモノリスを MSA に分割する前に、5点チェックリストで確認して」
  • 「このシステム図を mermaid で描いて」

なぜこれがトークンを減らすのか

概念を知らないと、AI の回答を受け取っても「それは何ですか?」と再度聞かなければなりません。その「再質問」がトークンを消費します。概念を一度理解しておくと、会話が一往復で完結します

先に読むとよい概念: 実践プロジェクト + 面接
次のおすすめ: 開発ツールガイド
アーキテクチャ — MSA・メッセージキュー・ES・CQRS - バイブコーディング