バックエンド概要
Bazbiiのバックエンドは、クリーンアーキテクチャに基づいた3層構造になっています。
全体構成
server-apps/
├── gateway/ # HTTP/JSON API (Connect RPC)
└── api/ # gRPC API Server
server-core/ # ドメインモデルとビジネスロジック
├── post/ # 投稿ドメイン
├── auth/ # 認証ポート定義
└── shared/ # 共通型・イベント
server-platform/ # インフラ実装
├── datastore/ # PostgreSQL実装
├── observability/ # ログ・トレース・メトリクス
└── security/ # 認証実装
各コンポーネントの役割
Gateway (server-apps/gateway)
- 役割: 外部APIのエントリーポイント
- 技術: Connect RPC, gRPC-Go
- 主要機能:
- HTTP/JSON ↔ gRPC 変換
- JWT認証・認可
- レート制限
- トレース開始
- エラーフォーマット統一
API Server (server-apps/api)
- 役割: ビジネスロジックの実行
- 技術: gRPC, Go
- 主要機能:
- gRPCハンドラー実装
- ドメインサービス呼び出し
- データ永続化
- ドメインイベント発行
server-core
- 役割: ビジネスロジックの実装
- 技術: 純粋なGo(外部ライブラリ最小限)
- 主要機能:
- ドメインモデル定義
- ユースケース実装
- ポート(インターフェース)定義
server-platform
- 役割: インフラストラクチャの実装
- 技術: PostgreSQL, OpenTelemetry, JWT
- 主要機能:
- Repository実装
- 観測実装
- 認証実装
通信フロー
リクエスト処理の流れ
- Gateway がHTTP/JSONを受信
- Gateway がJWT検証、gRPC変換
- API Server がgRPCリクエスト受信
- API Server がドメインサービス呼び出し
- platform のRepositoryがDB操作実行
- platform のEventPublisherがイベント発行
- レスポンスを逆順で返却
開発時の注意点
依存方向の遵守
- server-coreは外部依存を持たない
- 実装はplatformに、使用はappsで
テスト容易性
- インターフェース経由でモック可能
- ドメインロジックを独立してテスト可能
変更への耐性
- ビジネスロジックと技術的詳細を分離
- 実装を差し替えやすい設計