境界と責務
各コンポーネントの境界と、どこまでがその責務かを明確にします。 新しい機能を追加する際の判断基準として使用してください。
Gateway の責務
やるべきこと(境界で価値が出る領域)
1. セキュリティ・防御
- WAF/ボット対策: Cloudflareと連携した防御
- レート制限: IP/ユーザー/デバイス単位の精密制御
- 認証の受け口: JWT検証 → ActorID抽出 → context注入
- サービス間信頼: Gateway ↔ API間のmTLS
2. プロトコル変換
- REST ↔ gRPC: Connect RPCによる自動変換
- ヘッダ正規化: X-Request-Id付与、Accept-Language → locale
3. 横断的関心事
- 観測の開始: トレース開始、相関ID伝播
- エラーフォーマット統一: クライアント向けエラー整形
- A/B・カナリア: トラフィック振り分け
4. レジリエンス
- サーキットブレーカ: API Serverへの保護
- タイムアウト標準化: 外部SLAと内部deadlineの切り分け
やらないこと(ドメインは持たない)
- ❌ ビジネスロジック(投稿作成・権限判定など)
- ❌ トークンの永続化・セッション管理(APIの責務)
- ❌ ユーザーデータ更新(DB操作はAPIの責務)
- ❌ ドメイン検証(最低限の形式チェックのみ、詳細はAPI/core)
API Server の責務
やるべきこと
- ✅ ビジネスロジック実行: ドメインサービス呼び出し
- ✅ データ永続化: Repository経由でのDB操作
- ✅ トークン管理: Refreshトークンの保存・ローテーション
- ✅ ドメインイベント発行: ビジネスイベントの通知
- ✅ 入力バリデーション: 契約・権限・ドメインルールの検証
やらないこと
- ❌ HTTP/gRPC変換(Gatewayの責務)
- ❌ 外部認証(Gatewayで検証済み)
- ❌ レート制限(Gatewayの責務)
server-core の責務
やるべきこと
- ✅ ドメインモデル定義: Entity, Value Object
- ✅ ビジネスルール: ドメインロジック
- ✅ ポート定義: Repository, EventPublisher などのインターフェース
- ✅ ドメインイベント: ビジネスイベントの定義
やらないこと
- ❌ データベース操作(platformの責務)
- ❌ HTTP/gRPC処理(appsの責務)
- ❌ ログ・メトリクス実装(platformの責務)
server-platform の責務
やるべきこと
- ✅ ポート実装: server-coreで定義されたインターフェースの実装
- ✅ インフラ抽象化: DB、ログ、認証の具体実装
- ✅ 観測実装: OpenTelemetry統合
やらないこと
- ❌ ビジネスロジック(coreの責務)
- ❌ アプリケーション起動コード(appsの責務)
Cloudflare vs Gateway の分担
Cloudflare(Edge層)
ステートレスで誰にでも同じ判定ができるもの
- WAF/DDoS/Bot Management
- IP/ASN/国ベースのレート制限(一次絞り込み)
- CDNキャッシュ
- TLS終端
Gateway(Origin層)
アプリ文脈が必要なもの
- ユーザー/デバイス単位の精密レート制限
- JWT検証とActorID抽出
- アプリ固有のA/B・カナリア
- サービス間信頼(mTLS)
判断基準
新しい機能を追加する際の判断基準:
それはGatewayに置くべきか?
- ✅ 外部から来る全トラフィックに横断的か?
- ✅ 境界でしかできない防御・整形・観測か?
- ✅ データに意味が絡まない(ルーティング、プロトコル変換)か?
- → Yes: Gateway
それはAPIに置くべきか?
- ✅ ビジネスロジックか?
- ✅ データの意味・所有権・権限判定が必要か?
- ✅ 状態遷移が必要か?
- → Yes: API
それはcoreに置くべきか?
- ✅ ビジネスルールか?
- ✅ ドメイン知識か?
- ✅ 技術的詳細を含まないか?
- → Yes: core
それはplatformに置くべきか?
- ✅ coreで定義されたポートの実装か?
- ✅ インフラストラクチャの具体化か?
- ✅ テスト時に差し替え可能にしたいか?
- → Yes: platform
責務チャート
| 領域 | Gateway | API | core |
|---|---|---|---|
| JWT検証(入口) | ◎ | △(内部のみ) | – |
| レート制限/CAPTCHA | ◎ | – | – |
| プロトコル変換 | ◎ | – | – |
| サーキットブレーカ | ◎(安全範囲のみ) | △(下流向け) | – |
| 観測(開始) | ◎ | ◎(RPC内) | △ |
| ビジネスロジック | – | ◎ | ◎ |
| データ永続化 | – | ◎ | –(ポート定義のみ) |
| ポート実装 | – | – | – |