FastAPI + Pydantic + Zod + openapi-zod-client を使用した API の型とバリデーションルール一元管理のデモプロジェクトです。
.
├── backend/ # FastAPI バックエンド
│ ├── app/
│ │ ├── models/ # Pydantic モデル
│ │ ├── routers/ # FastAPI ルーター
│ │ └── main.py # メインアプリケーション
│ └── pyproject.toml # Poetry 設定
└── frontend/ # React フロントエンド
├── src/
│ ├── components/ # React コンポーネント
│ └── lib/api/ # API クライアント
├── package.json # npm 設定
└── schema-format.hbs # openapi-zod-client テンプレート
- 依存関係のインストール
cd backend
poetry install --no-root- サーバーの起動
poetry run uvicorn app.main:app --reloadサーバーは http://localhost:8000 で起動します。
- 依存関係のインストール
cd frontend
pnpm install- スキーマの生成(バックエンドが起動中に実行)
pnpm codegen- 開発サーバーの起動
pnpm devフロントエンドは http://localhost:5173 で起動します。
backend/app/models/user.py: Pydantic モデル定義backend/app/routers/users.py: FastAPI ルーターbackend/app/main.py: メインアプリケーション設定
frontend/src/components/UserForm.tsx: React Hook Form 連携コンポーネントfrontend/src/lib/api/client.ts: 型安全な API クライアントfrontend/schema-format.hbs: openapi-zod-client テンプレート
- FastAPI: Python Web フレームワーク
- Pydantic: データ検証とシリアライゼーション
- Poetry: Python パッケージ管理
- React: UI ライブラリ
- TypeScript: 型安全性の確保
- Zod: スキーマ検証ライブラリ
- React Hook Form: フォーム管理
- openapi-zod-client: OpenAPI から Zod スキーマ生成
- Tailwind CSS: スタイリング
- Vite: ビルドツール
- バックエンドで Pydantic モデルを定義・変更
- FastAPI が OpenAPI スキーマを自動生成
- フロントエンドで
pnpm codegenを実行 - Zod スキーマが自動生成され、型安全性が確保される
このフローにより、型の不整合を早期に検知し、バリデーションロジックの二重実装を回避できます。