概要
Sprint Cycle 17では、フロントエンドクライアント向けの公開設定API(/api/v1/config)を新設し、テストを13件から15件に強化しました。さらにFly.ioへのAPIデプロイ準備としてmiseban-ai-apiアプリを作成し、CORSの4オリジン許可設定も完了。全15テスト合格、cargo check警告ゼロの状態でデプロイ準備が整いました。
| 対応内容 | 状態 |
|---|---|
| GET /api/v1/config エンドポイント追加 | 完了 |
| テスト強化(13→15件) | 完了 |
| Fly.io APIアプリ作成(miseban-ai-api) | 完了 |
| CORS設定(4オリジン許可) | 完了 |
1. GET /api/v1/config エンドポイント追加
フロントエンドクライアントがAPIサーバーの設定情報を取得するための公開エンドポイントを追加しました。認証不要で、シークレット情報は一切含まない安全な設計です。
レスポンスには以下の情報が含まれます。
- api_version: 現在のAPIバージョン
- supabase_url: DATABASE_URLから自動抽出したSupabase URL
- features: 利用可能な機能リスト(9項目)
#[derive(Serialize)]
struct PublicConfig {
api_version: &'static str,
supabase_url: String,
features: Vec<&'static str>,
}
async fn get_public_config() -> Json<PublicConfig> {
// DATABASE_URLからSupabase URLを自動抽出
// features: frames, stats, alerts, billing, ...
}
Supabase URLは環境変数DATABASE_URLから自動的に抽出されるため、デプロイ先ごとに個別に設定する必要がありません。フロントエンドはこのエンドポイントを起動時に一度呼び出すだけで、必要な接続情報と利用可能機能の一覧を取得できます。
2. テスト強化(13→15件)
今回のスプリントで2件のテストを追加し、テスト合計を15件に引き上げました。
config_returns_api_version_and_features
新設した/api/v1/configのレスポンス構造を検証するテストです。api_versionフィールドの存在、features配列の内容、supabase_urlの形式を確認します。
authenticated_endpoints_require_auth
認証が必須な9つのエンドポイントに対して、認証トークンなしでリクエストした場合に全て401 Unauthorizedを返すことを一括検証するテストです。
// 9つの認証必須エンドポイントを一括テスト
let endpoints = vec![
("/api/v1/stores/me/stats", "GET"),
("/api/v1/stores/me/stats/weekly", "GET"),
("/api/v1/stores/me/stats/hourly", "GET"),
// ... 6 more
];
for (uri, method) in endpoints {
let response = app.oneshot(request).await.unwrap();
assert_eq!(response.status(), StatusCode::UNAUTHORIZED);
}
このテストにより、認証ミドルウェアの適用漏れを防止できます。新しい認証必須エンドポイントを追加する際は、このリストに追加するだけで自動的にテスト対象になります。
3. Fly.io APIアプリ作成
本番APIサーバーのデプロイ先として、Fly.ioにmiseban-ai-apiアプリを作成しました。
- リージョン: NRT(東京) -- 国内ユーザー向けに最低レイテンシを実現
- ビルド:
Dockerfile.apiによるマルチステージビルド対応 - ランタイム: Rustバイナリの直接実行
ランディングページ(miseban-ai.fly.dev)とAPIサーバー(miseban-ai-api.fly.dev)を分離することで、それぞれ独立したスケーリングとデプロイが可能になります。
4. CORS設定
APIサーバーのCORS設定として、以下の4オリジンを許可しました。
| オリジン | 用途 |
|---|---|
https://misebanai.com | 本番ドメイン |
https://www.misebanai.com | 本番ドメイン(www付き) |
https://miseban-ai.fly.dev | Fly.ioランディングページ |
http://localhost:3001 | ローカル開発環境 |
本番・Fly.io・ローカル開発の全環境からAPIへのリクエストが正常に処理されます。許可リストに含まれないオリジンからのリクエストはブラウザのCORSポリシーによりブロックされるため、セキュリティも確保されています。
テスト結果
全15テスト合格、cargo check警告ゼロ。既存テストへの影響はありません。
| 指標 | Before | After |
|---|---|---|
| テスト合格数 | 13/13 | 15/15 |
| cargo check警告 | 0 | 0 |
| 新規エンドポイント | - | 1件(/api/v1/config) |
| CORS許可オリジン | - | 4オリジン |
公開設定APIの追加により、フロントエンドが必要な情報をセキュアに取得できる仕組みが整いました。テストも15件に到達し、認証必須エンドポイントの網羅的な検証を実現。Fly.ioへのAPIデプロイ準備も完了し、次のスプリントでは本番デプロイとモニタリング設定に進みます。