第8部:実践プロジェクト Step 23 / 24

ブログアプリ実装編

設計に基づいて、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
設計編 次へ:仕上げ編