システム構成¶
全体アーキテクチャ¶
┌──────────────────────────────────────────────────┐
│ ユーザー │
└───────────────────┬──────────────────────────────┘
│
┌───────▼────────┐
│ iOS App │
│ (SwiftUI) │
└───────┬────────┘
│
┌───────────┼───────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌────────┐
│ Speech │ │VOICEVOX │ │ API │
│Framework│ │ Core │ │ Client │
└─────────┘ └─────────┘ └────┬───┘
│ HTTPS
▼
┌───────────────────┐
│ AWS Lambda │
│ (Go + Echo) │
└────────┬──────────┘
│ API
▼
┌───────────────────┐
│ OpenAI API │
│ (gpt-4o) │
└───────────────────┘
コンポーネント詳細¶
1. iOSアプリケーション¶
責務¶
- ユーザーインターフェース
- 音声入出力
- AI会話の管理
技術スタック¶
- 言語: Swift
- UI: SwiftUI
- 最小iOS: 17.0
- アーキテクチャ: MVVM + Repository パターン
主要モジュール¶
TextGenerationRepository: AI会話生成TextToSpeechRepository: 音声合成SpeechRecognitionRepository: 音声認識KeychainRepository: 認証情報管理
2. バックエンドAPI¶
責務¶
- OpenAI APIとの通信
- リクエスト/レスポンスの変換
- エラーハンドリング
技術スタック¶
- 言語: Go 1.24
- フレームワーク: Echo v4
- 実行環境: AWS Lambda + Lambda Web Adapter
- デプロイ: Docker + ECR
エンドポイント¶
POST /api/chat: AI会話生成GET /api/info: アプリ情報取得GET /health: ヘルスチェック
3. インフラストラクチャ¶
AWS構成¶
- Lambda: サーバーレス実行環境
- ECR: Dockerイメージ管理
- S3: VOICEVOXリソース配信
- IAM: OIDC認証(GitHub Actions)
環境分離¶
- Shared (448049807848): ECR、GitHub Actions IAM
- Dev (039612872248): 開発環境Lambda
- Prod (986921280333): 本番環境Lambda
データフロー¶
会話フロー¶
-
ユーザー音声入力
-
AI応答生成
-
音声合成
-
音声再生
VOICEVOXリソース配信フロー¶
セキュリティ¶
認証・認可¶
- OpenAI API Key: Keychainに安全に保存
- Lambda URL: パブリックアクセス(認証なし)
- GitHub Actions: OIDC認証(AWSへのアクセス)
データ保護¶
- 通信: HTTPS/TLS 1.2以上
- ログ: 個人情報は記録しない
- キー管理: iOS Keychain Services
スケーラビリティ¶
Lambda自動スケーリング¶
- リクエスト数に応じて自動スケール
- コールドスタート対策(最小実行時間確保)
S3配信¶
- CloudFront連携可能
- 複数リージョン対応可能
監視・ログ¶
CloudWatch¶
- Lambda実行ログ
- エラー率監視
- レスポンスタイム監視
GitHub Actions¶
- CI/CDステータス
- デプロイ履歴
パフォーマンス最適化¶
iOS¶
- ✅ バンドルから直接読み込み(コピー不要)
- ✅ 未使用モデル削除(228MB削減)
- ✅ フォルダ参照でディレクトリ構造保持
Lambda¶
- Docker Multi-stage build
- Lambda Web Adapter
- 環境変数キャッシュ
障害対策¶
可用性¶
- Lambda自動復旧
- S3の高可用性(99.99%)
フェイルセーフ¶
- API呼び出し失敗時も動作継続
- オフライン対応(ローカルキャッシュ)