ブログアプリ実装編
設計に基づいて、AIと一緒に実装していきましょう。ステップバイステップで進めます。
Step 1: Docker環境のセットアップ
AIへの指示
ブログアプリ用のDocker Compose環境を作成してください。 構成: - MySQL 8.0 - FastAPI(Python 3.11) - Next.js 14 要件: - 開発時のホットリロード対応 - MySQLデータの永続化 - 環境変数は.envファイルで管理
生成されるファイル
- ✓ compose.yaml
- ✓ backend/Dockerfile
- ✓ frontend/Dockerfile
- ✓ .env
docker compose up -d
Step 2: バックエンド基盤
AIへの指示
FastAPIのバックエンド基盤を作成してください。 ファイル: 1. main.py - FastAPIアプリのエントリポイント 2. config.py - pydantic-settingsで環境変数管理 3. database.py - SQLAlchemy接続設定 4. models.py - User, Postモデル 5. schemas.py - Pydanticスキーマ MySQL接続URL: mysql+pymysql://user:password@db:3306/blog
確認ポイント
- □ MySQLに接続できるか
- □ モデルが正しく定義されているか
- □ http://localhost:8000/docs でSwagger UIが表示されるか
Step 3: 認証API実装
AIへの指示
JWT認証機能を実装してください。 ファイル: 1. auth.py - パスワードハッシュ、JWT生成・検証、get_current_user 2. routers/auth.py - /auth/register, /auth/login, /auth/me 要件: - bcryptでパスワードハッシュ - JWTトークンの有効期限は30分 - SECRET_KEYは環境変数から取得
テスト
# Swagger UI (http://localhost:8000/docs) で以下をテスト 1. POST /auth/register でユーザー登録 2. POST /auth/login でトークン取得 3. GET /auth/me で自分の情報取得(Authorize ボタンでトークン設定)
Step 4: 記事API実装
AIへの指示
記事のCRUD APIを実装してください。
ファイル:
- routers/posts.py
エンドポイント:
- GET /posts - 記事一覧(ページネーション付き)
- GET /posts/{id} - 記事詳細
- POST /posts - 記事作成(認証必要)
- PUT /posts/{id} - 記事更新(本人のみ)
- DELETE /posts/{id} - 記事削除(本人のみ)
要件:
- 一覧は新しい順にソート
- 詳細では著者情報も返す
- 本人以外の更新・削除は403エラー
Step 5: フロントエンド実装
AIへの指示(認証)
Next.jsのフロントエンドで認証機能を実装してください。 ファイル: 1. contexts/AuthContext.tsx - 認証状態管理 2. app/login/page.tsx - ログインページ 3. app/register/page.tsx - 新規登録ページ 4. components/Header.tsx - ナビゲーション(認証状態で表示切替) 5. components/RequireAuth.tsx - 認証必須ラッパー 要件: - トークンはlocalStorageに保存 - ログイン状態はContext APIで管理 - ログアウト後はトップページにリダイレクト
AIへの指示(記事表示)
記事の表示機能を実装してください。 ファイル: 1. app/page.tsx - トップページ(記事一覧) 2. app/posts/[id]/page.tsx - 記事詳細 3. components/ArticleCard.tsx - 記事カード 4. components/ArticleList.tsx - 記事一覧 要件: - サーバーコンポーネントでデータ取得 - 記事カードにはタイトル、著者、日付を表示 - 詳細ページでは本人なら編集・削除ボタンを表示
AIへの指示(記事編集)
記事の作成・編集機能を実装してください。 ファイル: 1. app/posts/new/page.tsx - 記事作成ページ 2. app/posts/[id]/edit/page.tsx - 記事編集ページ 3. components/PostForm.tsx - 記事フォーム(作成・編集共通) 要件: - 認証必須 - バリデーション(タイトル必須、本文10文字以上) - 送信後は記事詳細にリダイレクト - 削除は確認ダイアログを表示
デバッグのコツ
エラーが出たら
エラーメッセージをそのままAIに貼り付けて質問
動作確認
Swagger UI(バックエンド)、ブラウザのDevTools(フロント)を活用
ログ確認
docker compose logs -f backend