fastapi について
fastapiは、FastAPIアプリケーションを開発する人向けのスキルです。非同期エンドポイント、Pydanticスキーマ、依存性注入、バックグラウンドタスク、WebSocket、APIドキュメントの例を提供します。
主な機能
- 01アプリケーション構成と実行コマンド
- 02非同期エンドポイントとルーターのパターン
- 03Pydanticスキーマの例
- 04依存性注入のパターン
- 05バックグラウンドタスクとWebSocket
活用シーン
- 01FastAPIアプリケーションのエンドポイント作成
- 02リクエストとレスポンスのスキーマ定義
- 03依存関係を通じたサービスの構成
- 04バックグラウンド処理やWebSocketメッセージの処理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thelobbi/ claude --skill fastapiインストール後、Claude Code で/fastapiを入力して読み込まれたか確認します。
詳細
FastAPI スキル
Golden Armada AI Agent Fleet Platform 向けに、包括的な FastAPI 開発機能を提供します。
このスキルを使用する場面
以下の作業を行うときに、このスキルを有効にします。
- FastAPI アプリケーションの開発
- 非同期エンドポイントの実装
- Pydantic モデルの定義
- 依存性注入のパターン
- OpenAPI/Swagger ドキュメント
クイックリファレンス
実行コマンド
```bash
開発
uvicorn main:app --reload --host 0.0.0.0 --port 8000
本番環境
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
Gunicorn を使用
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 ```
アプリケーション構成
``` app/ ├── main.py ├── config.py ├── dependencies.py ├── routers/ │ ├── init.py │ ├── agents.py │ └── tasks.py ├── models/ │ ├── init.py │ ├── agent.py │ └── task.py ├── schemas/ │ ├── init.py │ ├── agent.py │ └── task.py └── services/ ├── init.py └── llm_service.py ```
基本的なアプリケーション
```python
main.py
from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager
from app.routers import agents, tasks from app.config import settings
@asynccontextmanager async def lifespan(app: FastAPI): # 起動 print("Starting up...") yield # シャットダウン print("Shutting down...")
app = FastAPI( title="Golden Armada Agent API", version="1.0.0", lifespan=lifespan )
app.add_middleware( CORSMiddleware, allow_origins=settings.allowed_origins, allow_credentials=True, allow_methods=[""], allow_headers=[""], )
app.include_router(agents.router, prefix="/api/v1/agents", tags=["agents"]) app.include_router(tasks.router, prefix="/api/v1/tasks", tags=["tasks"])
@app.get("/health") async def health_check(): return {"status": "healthy", "service": "golden-armada"} ```
Pydantic スキーマ
```python
schemas/agent.py
from pydantic import BaseModel, Field from typing import Optional from enum import Enum
class AgentType(str, Enum): CLAUDE = "claude" GPT = "gpt" GEMINI = "gemini"
class AgentBase(BaseModel): name: str = Field(..., min_length=1, max_length=100) type: AgentType description: Optional[str] = None
class AgentCreate(AgentBase): pass
class AgentResponse(AgentBase): id: str status: str created_at: datetime
model_config = ConfigDict(from_attributes=True)
```
ルーターの例
```python
routers/agents.py
from fastapi import APIRouter, HTTPException, Depends, status from typing import List
from app.schemas.agent import AgentCreate, AgentResponse from app.services.agent_service import AgentService from app.dependencies import get_agent_service
router = APIRouter()
@router.post("/", response_model=AgentResponse, status_code=status.HTTP_201_CREATED) async def create_agent( agent: AgentCreate, service: AgentService = Depends(get_agent_service) ): """新しいエージェントを作成します。""" return await service.create(agent)
@router.get("/", response_model=List[AgentResponse]) async def list_agents( skip: int = 0, limit: int = 100, service: AgentService = Depends(get_agent_service) ): """すべてのエージェントを一覧表示します。""" return await service.list(skip=skip, limit=limit)
@router.get("/{agent_id}", response_model=AgentResponse) async def get_agent( agent_id: str, service: AgentService = Depends(get_agent_service) ): """IDでエージェントを取得します。""" agent = await service.get(agent_id) if not agent: raise HTTPException(status_code=404, detail="Agent not found") return agent ```
依存性注入
```python
dependencies.py
from functools import lru_cache from typing import Annotated from fastapi import Depends
from app.config import Settings from app.services.agent_service import AgentService from app.services.llm_service import LLMService
@lru_cache def get_settings(): return Settings()
async def get_llm_service( settings: Annotated[Settings, Depends(get_settings)] ) -> LLMService: return LLMService(api_key=settings.anthropic_api_key)
async def get_agent_service( llm_service: Annotated[LLMService, Depends(get_llm_service)] ) -> AgentService: return AgentService(llm_service=llm_service) ```
バックグラウンドタスク
```python from fastapi import BackgroundTasks
@router.post("/tasks/{task_id}/execute") async def execute_task( task_id: str, background_tasks: BackgroundTasks, service: TaskService = Depends(get_task_service) ): background_tasks.add_task(service.execute_async, task_id) return {"status": "accepted", "task_id": task_id} ```
WebSocket のサポート
```python from fastapi import WebSocket, WebSocketDisconnect
@router.websocket("/ws/{agent_id}") async def agent_websocket(websocket: WebSocket, agent_id: str): await websocket.accept() try: while True: data = await websocket.receive_text() response = await process_message(agent_id, data) await websocket.send_text(response) except WebSocketDisconnect: print(f"Agent {agent_id} disconnected") ```