記事一覧に戻る
💻
Tech
2025/1/5
7分

Next.js + FastAPI構成のベストプラクティス

Next.jsFastAPIベストプラクティス

フロントエンドとバックエンドの分離

Next.js + FastAPI構成での開発で得られた知見をまとめます。

プロジェクト構成

project/
├── frontend/          # Next.js
│   ├── src/
│   ├── public/
│   └── package.json
├── backend/           # FastAPI
│   ├── app/
│   ├── requirements.txt
│   └── main.py
└── docker-compose.yml
text

開発環境のセットアップ

Docker Compose活用

version: '3.8'
services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    volumes:
      - ./frontend:/app
    
  backend:
    build: ./backend
    ports:
      - "8000:8000"
    volumes:
      - ./backend:/app
yaml

CORS設定

FastAPI側

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["http://localhost:3000"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
python

認証の実装

JWT トークンベース認証

  1. ログイン時にアクセストークンとリフレッシュトークンを発行
  2. Next.js側でhttpOnlyクッキーに保存
  3. API呼び出し時に自動でトークンを付与

API呼び出しの統一化

カスタムフック活用

const useAPI = () => {
  const fetchAPI = async (endpoint: string, options?: RequestInit) => {
    const response = await fetch(`${API_BASE_URL}${endpoint}`, {
      credentials: 'include',
      ...options,
    })
    return response.json()
  }
  
  return { fetchAPI }
}
typescript

デプロイメント戦略

Vercel + Railway

  • フロントエンド: Vercel
  • バックエンド: Railway
  • データベース: PostgreSQL

パフォーマンス最適化

  1. フロントエンド

    • Next.js Image Optimization
    • Bundle analyzer導入
    • キャッシュ戦略の最適化
  2. バックエンド

    • FastAPI非同期処理の活用
    • レスポンスキャッシュ
    • データベースクエリ最適化

この構成により、スケーラブルで保守性の高いアプリケーションを構築できます。

この記事が役に立ったらシェアしてください!

他の人にも役立つ情報を広めましょう