CR-FASTAPI-001: FastAPI スケルトン作成 - 完了レポート
実装日時
2025-12-02
概要
NexusCore の API を FastAPI ベースに移行するための「ディレクトリ構造」と「最小スケルトンコード」を作成しました。
目的
- FastAPI ベースの API 実装の土台を作成する
- 既存の Flask
server.pyと共存させ、段階的に移行できる構造にする .cursorrulesで定義された FastAPI 実装ルールに準拠した構造を確立する
達成内容
- FastAPI アプリケーションエントリポイントの作成
/api/v1/healthエンドポイントの実装(認証不要)- Pydantic BaseModel を使用したレスポンスモデル定義
- 認証用 Dependency の雛形作成
- 将来の拡張を考慮したディレクトリ構造の確立
原則
- 既存の Flask
server.pyは変更しない(共存状態を維持) - FastAPI のベストプラクティスに従う(APIRouter、Pydantic、型安全性)
- 認証実装は後続の CR-FASTAPI-003 で行う(現時点では雛形のみ)
実装ステップ
Step 1: FastAPI アプリケーションエントリポイントの作成
ファイル: src/nexuscore/api/fastapi_app.py
create_app()関数で FastAPI インスタンスを作成- Health check router を
/api/v1prefix でマウント - 将来の router 追加を考慮したコメントを追加
主要コード:
def create_app() -> FastAPI:
app = FastAPI(
title="NexusCore API",
version="1.0.0",
description="NexusCore API - FastAPI implementation",
)
app.include_router(health.router, prefix="/api/v1")
return app
Step 2: Health Check エンドポイントの実装
ファイル: src/nexuscore/api/routes/health.py
- APIRouter を使用して
/healthエンドポイントを定義 - 認証不要な公開 API として実装
HealthCheckResponseを response_model として使用
主要コード:
@router.get("/health", response_model=HealthCheckResponse)
async def health_check() -> HealthCheckResponse:
return HealthCheckResponse(status="ok", version="1.0.0")
Step 3: レスポンススキーマの定義
ファイル: src/nexuscore/api/schemas/health.py
- Pydantic BaseModel を使用して
HealthCheckResponseを定義 statusとversionフィールドを持つ
主要コード:
class HealthCheckResponse(BaseModel):
status: str
version: str | None = None
Step 4: 認証用 Dependency の雛形作成
ファイル: src/nexuscore/api/dependencies/auth.py
AuthenticatedUserモデルを定義get_current_user()Dependency の雛形を作成- 現時点では未実装のため、常に 401 Unauthorized を返す
- CR-FASTAPI-003 で実装予定であることを明記
主要コード:
async def get_current_user() -> AuthenticatedUser:
# TODO: CR-FASTAPI-003 で JWT / API Key 実装に差し替え
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Authentication not implemented yet",
)
Step 5: モジュール初期化ファイルの作成
以下の __init__.py ファイルを作成:
src/nexuscore/api/routes/__init__.pysrc/nexuscore/api/schemas/__init__.pysrc/nexuscore/api/dependencies/__init__.py
各ファイルにはモジュールの説明コメントを追加。
変更ファイル一覧
新規作成ファイル(7ファイル)
src/nexuscore/api/fastapi_app.py- FastAPI アプリケーションエントリポイントsrc/nexuscore/api/routes/__init__.py- routes モジュール初期化src/nexuscore/api/routes/health.py- Health check エンドポイントsrc/nexuscore/api/schemas/__init__.py- schemas モジュール初期化src/nexuscore/api/schemas/health.py- HealthCheckResponse モデルsrc/nexuscore/api/dependencies/__init__.py- dependencies モジュール初期化src/nexuscore/api/dependencies/auth.py- 認証用 Dependency 雛形
変更なしファイル
src/nexuscore/api/server.py- 既存の Flask 実装(変更なし、共存状態)
動作確認結果
静的解析結果
- リンターエラー: なし
- 型チェック: 未実施(このタスクではテストファイル未作成)
コードレビュー結果
.cursorrulesの FastAPI 実装ルールに準拠- Pydantic BaseModel を使用した型安全な実装
- APIRouter を使用した適切な構造
- 認証不要エンドポイントの明示的な扱い
テスト結果
このタスクではテストファイルは作成していません。
理由:
- CR-FASTAPI-001 は「スケルトン作成」のみを目的とする
- 後続の CR-FASTAPI-00X で TestClient ベースのテストを追加予定
設計上の改善点
アーキテクチャの改善
- 明確な責務分離
routes/: エンドポイント定義schemas/: リクエスト/レスポンスモデルdependencies/: 認証などの依存関係- 各モジュールの責務が明確
- 拡張性の確保
- 新しい router を追加しやすい構造
- 認証実装を後から差し替え可能な設計
- バージョニング(
/api/v1/)を考慮した構造
- 型安全性の向上
- Pydantic BaseModel による型定義
- FastAPI の型推論を活用
- 暗黙の dict/tuple を排除
将来の拡張性への配慮
/api/v1/executeなどの主要エンドポイント追加を想定- 認証実装(JWT / API Key)の差し替えを考慮
- Admin 用 router の追加を想定
既知の制約・注意事項
既存コードとの互換性
- 既存の Flask
server.pyは変更していないため、既存の API 呼び出しに影響なし - FastAPI と Flask は別々のポートで起動する想定(共存状態)
制限事項やトレードオフ
- 認証未実装
- 現時点では
get_current_user()は常に 401 を返す - 認証が必要なエンドポイントは CR-FASTAPI-003 まで実装不可
- 現時点では
- テスト未実装
- このタスクではテストファイルを作成していない
- 後続タスクで TestClient ベースのテストを追加予定
- 既存エンドポイントの未移行
- Flask の
/api/v1/executeなどはまだ移行していない - 段階的な移行を想定
- Flask の
移行時の注意点
- FastAPI アプリケーションを起動するには、別途エントリポイント(例:
uvicorn src.nexuscore.api.fastapi_app:app)が必要 - 既存の Flask アプリケーションとは別プロセスで起動する想定
次のステップ
推奨されるフォローアップアクション
- CR-FASTAPI-000: API 棚卸し
- 既存の Flask エンドポイントを棚卸し
- 移行優先順位を決定
- CR-FASTAPI-002: Health Check テスト追加
- TestClient を使用した
/api/v1/healthのテスト - FastAPI アプリケーションの起動確認
- TestClient を使用した
- CR-FASTAPI-003: 認証実装
- JWT または API Key による認証実装
get_current_user()の実装
- CR-FASTAPI-004: Execute エンドポイント移行
- Flask の
/api/v1/executeを FastAPI に移行 - 既存機能との互換性確認
- Flask の
- CR-FASTAPI-005: その他エンドポイント移行
- 残りの Flask エンドポイントを段階的に移行
- Flask の完全な廃止
関連ファイル
.cursorrules- FastAPI 実装ルール定義src/nexuscore/api/server.py- 既存の Flask 実装(参考用)docs/completion_reports/- 他の CR 完了レポート
備考
このタスクは「FastAPI 移行の第一歩」として、最小限のスケルトンコードを作成しました。 既存の Flask 実装を壊すことなく、新しい FastAPI ベースの実装を並行して構築できる状態になっています。