プロジェクト概要¶
ZunTalkとは¶
ZunTalkは、人気キャラクター「ずんだもん」とユーザーが音声で自然な会話を楽しめるiOSアプリケーションです。
コンセプト¶
- 音声認識でユーザーの発話を理解
- AIが自然な応答を生成
- VOICEVOX技術でずんだもんの声で返答
- リアルタイムでの音声会話体験
システム構成¶
┌─────────────┐
│ iOS App │
│ (Swift) │
└──┬───────┬──┘
│ HTTPS │ HTTPS
┌──────────┘ └──────────┐
↓ ↓
┌─────────────┐ ┌──────────────────┐
│ AWS Lambda │ │ GCP Cloud Run │
│ (Go/チャット) │ │ (Go/エージェント │
└──────┬──────┘ │ ・電話予約) │
↓ └───┬──────┬───────┘
┌─────────────┐ ↓ ↓
│ OpenAI API │ ┌─────────┐ ┌──────────┐
└─────────────┘ │Vertex AI│ │Firestore │
│(Gemini) │ │+Scheduler│
└─────────┘ └──────────┘
詳細は システム構成 を参照。
コンポーネント¶
iOSアプリ¶
- 音声認識: iOS Speech Framework
- 音声合成: VOICEVOX Core
- UI: SwiftUI
- 最小iOS: 18.0
バックエンド¶
- フレームワーク: Echo v4
- 実行環境: AWS Lambda (Lambda Web Adapter)
- AI: OpenAI API (gpt-4o-mini/gpt-4o)
インフラ¶
- IaC: Terraform
- コンテナ: Docker, AWS ECR
- ストレージ: AWS S3 (VOICEVOXリソース)
- CI/CD: GitHub Actions (OIDC認証)
主な機能¶
1. AI会話生成¶
- OpenAI APIで自然な応答を生成
- モデル選択可能(gpt-4o-mini/gpt-4o)
- コンテキストを保持した会話
2. 音声合成¶
- VOICEVOX Coreによるずんだもんの声
- 高品質な音声生成
- バンドルから直接読み込み(高速化)
3. 音声認識¶
- iOS標準のSpeech Framework
- リアルタイム音声認識
- 日本語最適化
4. サーバーレス¶
- AWS Lambdaでスケーラブル
- コールドスタート対策
- コスト効率的
5. エージェントモード¶
- Vertex AI(Gemini)が発話から実行計画を立てる司令塔
- 端末側でツールを実行(カレンダーは EventKit で iOS 標準カレンダーを読み取り)
- deviceId ごとの日次利用回数制限でコスト保護
- 詳細は agent/README.md
6. 電話予約(VoIP 着信)¶
- 指定時刻にずんだもんから電話がかかってくる
- Cloud Run + Firestore + Cloud Scheduler + APNs 直叩き
- ロック中・アプリ終了中でも CallKit のネイティブ着信 UI で受けられる
ディレクトリ構造¶
ZunTalk/
├── ios/ # iOSアプリ
│ ├── ZunTalk/ # ソースコード
│ │ ├── App/ # エントリーポイント
│ │ ├── Config/ # API設定
│ │ ├── Models/ # データモデル
│ │ ├── Repository/ # データアクセス層
│ │ └── Screens/ # UIビュー
│ ├── Development.xcconfig # Debug環境設定
│ └── Production.xcconfig # Release環境設定
├── backend/ # Goバックエンド(チャットAPI / AWS Lambda)
│ ├── main.go # エントリーポイント
│ ├── handler/ # HTTPハンドラー
│ ├── service/ # ビジネスロジック
│ ├── model/ # データモデル
│ └── config/ # 環境変数管理
├── agent/ # エージェント / 電話予約(Go / GCP Cloud Run)
│ ├── orchestrator/ # planner / responder(Vertex AI)
│ ├── handler/ # /agent, /devices, /calls, /internal/dispatch
│ ├── store/ # Firestore アクセス
│ └── apns/ # APNs VoIP push
├── terraform/ # インフラ(IaC)
│ ├── aws/ # AWS(既存バックエンド)
│ └── gcp/ # GCP(エージェント / 電話予約)
├── docs/ # ドキュメント
└── .github/workflows/ # CI/CD
開発の流れ¶
- 機能開発: ブランチを作成
- ローカルテスト: シミュレータで動作確認
- PR作成: レビュー依頼
- CI実行: 自動テスト
- マージ: mainブランチへ
- 自動デプロイ: Dev環境へ自動デプロイ