コンテンツにスキップ

テンプレートの利用

FastAPI-fastkit は、さまざまな技術スタックですばやく開発を始められるよう、あらかじめ用意されたプロジェクトテンプレートを提供しています。

利用可能なテンプレート

list-templates コマンドで利用可能なテンプレートを確認できます:

$ fastkit list-templates
                      Available Templates
┌─────────────────────────┬───────────────────────────────────┐
│ fastapi-custom-response │ Async Item Management API with    │
│                         │ Custom Response System            │
│ fastapi-dockerized      │ Dockerized FastAPI Item           │
│                         │ Management API                    │
│ fastapi-empty           │ No description                    │
│ fastapi-async-crud      │ Async Item Management API Server  │
│ fastapi-psql-orm        │ Dockerized FastAPI Item           │
│                         │ Management API with PostgreSQL    │
│ fastapi-default         │ Simple FastAPI Project            │
└─────────────────────────┴───────────────────────────────────┘

テンプレートの説明

1. fastapi-default

シンプルな FastAPI プロジェクト

  • 必要十分な機能を備えた基本的な FastAPI セットアップ
  • モックデータを使ったアイテム管理
  • 学習やシンプルな API に最適
  • 基本的な CRUD 操作を含む

適した用途:

  • FastAPI の初心者
  • シンプルな Web API
  • 学習やプロトタイピング

2. fastapi-async-crud

非同期アイテム管理 API サーバー

  • 完全に非同期な FastAPI アプリケーション
  • async / await を使った高度な CRUD 操作
  • I/O 操作のパフォーマンス向上
  • 非同期パターンを用いたモックデータストレージ

適した用途:

  • 高パフォーマンスアプリケーション
  • I/O 集約的な処理
  • モダンな非同期 Python 開発

3. fastapi-custom-response

カスタムレスポンス機構を備えた非同期アイテム管理 API

  • カスタムレスポンスモデルとフォーマット
  • 高度なエラーハンドリング
  • ページネーション対応
  • カスタム HTTP ステータスコードとレスポンス

適した用途:

  • 特定のレスポンス形式が要求される API
  • 高度なエラーハンドリングが必要な場面
  • レスポンスにカスタムビジネスロジックを含める場合

4. fastapi-dockerized

Docker 化された FastAPI アイテム管理 API

  • 完全な Docker コンテナ化
  • 本番運用向けのデプロイ構成
  • マルチステージ Docker ビルド
  • 環境ベースの設定

適した用途:

  • 本番デプロイ
  • コンテナ化された環境
  • DevOps と CI/CD パイプライン

5. fastapi-psql-orm

PostgreSQL 対応の Docker 化された FastAPI アイテム管理 API

  • PostgreSQL データベース統合
  • SQLAlchemy ORM と Alembic マイグレーション
  • ローカル開発のための Docker Compose
  • フル機能のデータベース CRUD 操作

適した用途:

  • データベース駆動のアプリケーション
  • 本番品質のデータストレージ
  • 複雑なデータリレーションシップ

6. fastapi-empty

最小構成の FastAPI プロジェクト

  • 必要最小限の FastAPI セットアップ
  • あらかじめ用意された機能はありません
  • カスタム開発のためのまっさらなスタート

適した用途:

  • ゼロから始める
  • 最小限の依存関係
  • 独自のアーキテクチャ要件

テンプレートからプロジェクトを作成する

startdemo コマンドでテンプレートからプロジェクトを作成します:

$ fastkit startdemo
Enter the project name: my-blog-api
Enter the author name: John Doe
Enter the author email: john@example.com
Enter the project description: Blog API with PostgreSQL

Available Templates:
           fastapi-default
┌─────────────┬──────────────────────┐
│ Description │ Simple FastAPI       │
│             │ Project              │
│ Stack       │ FastAPI, Uvicorn     │
│ Database    │ Mock Data            │
│ Features    │ Basic CRUD           │
└─────────────┴──────────────────────┘

           fastapi-psql-orm
┌─────────────┬──────────────────────┐
│ Description │ Dockerized FastAPI   │
│             │ Item Management API  │
│             │ with PostgreSQL      │
│ Stack       │ FastAPI, PostgreSQL, │
│             │ SQLAlchemy, Docker   │
│ Database    │ PostgreSQL           │
│ Features    │ Full ORM, Migrations │
└─────────────┴──────────────────────┘

Select template (fastapi-default, fastapi-async-crud, fastapi-custom-response, fastapi-dockerized, fastapi-psql-orm, fastapi-empty): fastapi-psql-orm

           Project Information
┌──────────────┬─────────────────────┐
│ Project Name │ my-blog-api         │
│ Author       │ John Doe            │
│ Author Email │ john@example.com    │
│ Description  │ Blog API with       │
│              │ PostgreSQL          │
└──────────────┴─────────────────────┘

       Template Dependencies
┌──────────────┬───────────────────┐
│ Dependency 1 │ fastapi           │
│ Dependency 2 │ uvicorn           │
│ Dependency 3 │ sqlalchemy        │
│ Dependency 4 │ alembic           │
│ Dependency 5 │ psycopg2-binary   │
│ Dependency 6 │ python-dotenv     │
│ Dependency 7 │ pytest            │
└──────────────┴───────────────────┘

Available Package Managers:
                   Package Managers
┌────────┬────────────────────────────────────────────┐
│ PIP    │ Standard Python package manager            │
│ UV     │ Fast Python package manager                │
│ PDM    │ Modern Python dependency management        │
│ POETRY │ Python dependency management and packaging │
└────────┴────────────────────────────────────────────┘

Select package manager (pip, uv, pdm, poetry) [uv]: uv
Do you want to proceed with project creation? [y/N]: y

✨ FastAPI project 'my-blog-api' from 'fastapi-psql-orm' has been created successfully!

テンプレートの機能比較

機能 Default Async CRUD Custom Response Dockerized PostgreSQL ORM Empty
基本 FastAPI
モックデータ
非同期サポート 基本
カスタムレスポンス
Docker
データベース モック モック モック モック PostgreSQL なし
ORM SQLAlchemy
マイグレーション Alembic
テスト
適した用途 学習 パフォーマンス カスタム API 本番運用 DB アプリ カスタム

テンプレートごとのセットアップ

fastapi-psql-orm を使う

このテンプレートは PostgreSQL のフルセットアップを含みます。作成後:

  1. Docker で PostgreSQL を起動:
$ cd my-blog-api
$ docker-compose up -d postgres
Starting my-blog-api_postgres_1 ... done
  1. データベースマイグレーションを実行:
$ source .venv/bin/activate
$ alembic upgrade head
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade -> bedcdc35b64a, first alembic
  1. API サーバーを起動:
$ fastkit runserver
INFO:     Uvicorn running on http://127.0.0.1:8000

fastapi-dockerized を使う

このテンプレートは Docker のフル機能を提供します:

  1. Docker イメージのビルド:
$ cd my-dockerized-api
$ docker build -t my-dockerized-api .
Successfully built abc123def456
Successfully tagged my-dockerized-api:latest
  1. コンテナの起動:
$ docker run -p 8000:8000 my-dockerized-api
INFO:     Uvicorn running on http://0.0.0.0:8000

fastapi-custom-response を使う

このテンプレートには高度なレスポンス処理が含まれています:

  1. カスタムレスポンスモデル:
from src.helper.pagination import PaginatedResponse
from src.schemas.base import StandardResponse

@router.get("/", response_model=PaginatedResponse[Item])
def read_items(skip: int = 0, limit: int = 10):
    items = items_crud.get_multi(skip=skip, limit=limit)
    total = items_crud.count()

    return PaginatedResponse(
        data=items,
        total=total,
        page=skip // limit + 1,
        pages=(total + limit - 1) // limit
    )

@router.post("/", response_model=StandardResponse[Item])
def create_item(item: ItemCreate):
    new_item = items_crud.create(item)
    return StandardResponse(
        data=new_item,
        message="Item created successfully",
        status_code=201
    )
  1. 拡張されたエラーハンドリング:
from src.helper.exceptions import ItemNotFoundError, ValidationError

@router.get("/{item_id}", response_model=StandardResponse[Item])
def read_item(item_id: int):
    try:
        item = items_crud.get(item_id)
        return StandardResponse(data=item)
    except ItemNotFoundError:
        raise HTTPException(
            status_code=404,
            detail=f"Item with id {item_id} not found"
        )

テンプレートのプロジェクト構造

各テンプレートは一貫した、しかしテンプレートごとに調整された構造を持ちます:

fastapi-default の構造

my-project/
├── src/
│   ├── main.py
│   ├── core/config.py
│   ├── api/
│   │   ├── api.py
│   │   └── routes/items.py
│   ├── crud/items.py
│   ├── schemas/items.py
│   └── mocks/mock_items.json
├── tests/
├── scripts/
└── requirements.txt

fastapi-psql-orm の構造

my-project/
├── src/
│   ├── main.py
│   ├── core/
│   │   ├── config.py
│   │   └── db.py
│   ├── api/
│   │   ├── api.py
│   │   ├── deps.py
│   │   └── routes/items.py
│   ├── crud/items.py
│   ├── schemas/items.py
│   ├── alembic/
│   │   ├── env.py
│   │   └── versions/
│   └── utils/
├── tests/
├── scripts/
├── docker-compose.yml
├── Dockerfile
├── alembic.ini
└── requirements.txt

テンプレートのカスタマイズ

テンプレートからプロジェクトを作成した後、必要に応じてカスタマイズできます:

1. 新しいルートを追加

$ fastkit addroute posts my-blog-api
$ fastkit addroute users my-blog-api
$ fastkit addroute comments my-blog-api

2. 設定の変更

src/core/config.py を編集してニーズに合わせます:

from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    PROJECT_NAME: str = "My Blog API"
    VERSION: str = "1.0.0"
    API_V1_STR: str = "/api/v1"

    # Database settings (for PostgreSQL templates)
    DATABASE_URL: str = "postgresql://user:password@localhost/dbname"

    # Security settings
    SECRET_KEY: str = "your-secret-key-here"
    ACCESS_TOKEN_EXPIRE_MINUTES: int = 30

    class Config:
        env_file = ".env"

settings = Settings()

3. 環境変数の追加

プロジェクトルートに .env ファイルを作成します:

# .env
PROJECT_NAME=My Blog API
VERSION=1.0.0
DEBUG=True

# Database (for PostgreSQL templates)
DATABASE_URL=postgresql://user:password@localhost:5432/myblogdb
POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_DB=myblogdb

# Security
SECRET_KEY=your-super-secret-key-here
ACCESS_TOKEN_EXPIRE_MINUTES=30

テンプレートのテスト

各テンプレートはあらかじめ構成されたテストを備えています:

$ cd my-blog-api
$ source .venv/bin/activate
$ python -m pytest

======================== test session starts ========================
tests/test_items.py::test_create_item PASSED
tests/test_items.py::test_read_items PASSED
tests/test_items.py::test_read_item PASSED
tests/test_items.py::test_update_item PASSED
tests/test_items.py::test_delete_item PASSED
======================== 5 passed in 0.23s ========================

テンプレート開発のワークフロー

1. 適切なテンプレートを選ぶ

  • 学習 / シンプルな API: fastapi-default
  • 高パフォーマンス: fastapi-async-crud
  • カスタムレスポンス形式: fastapi-custom-response
  • 本番デプロイ: fastapi-dockerized
  • データベースアプリケーション: fastapi-psql-orm
  • 独自アーキテクチャ: fastapi-empty

2. 作成とセットアップ

$ fastkit startdemo
# プロンプトに従う
$ cd your-project
$ source .venv/bin/activate

3. 開発

# 開発サーバーを起動
$ fastkit runserver

# テストを実行
$ python -m pytest

# 新機能を追加
$ fastkit addroute new-resource your-project

4. デプロイ

本番向けテンプレート (fastapi-dockerizedfastapi-psql-orm) の場合:

# 本番ビルド
$ docker build -t your-app .

# Docker Compose でデプロイ
$ docker-compose up -d

ベストプラクティス

1. テンプレートを賢く選ぶ

  • 学習にはシンプルなテンプレートから始める
  • データ駆動型アプリにはデータベース対応のテンプレート
  • 本番デプロイには Docker 対応テンプレート

2. 環境管理

  • 設定には常に .env ファイルを使う
  • 機密データはバージョン管理にコミットしない
  • 開発と本番で異なる環境を使う

3. カスタマイズの方針

  • 新しいルートは fastkit addroute で追加
  • 既存コードは自分のビジネスロジックに合わせて変更
  • プロジェクト構造は整理された状態を維持

4. テスト

  • 開発中は定期的にテストを実行
  • 実装した新機能にはテストを追加
  • 同梱のテスト構造をガイドとして活用

トラブルシューティング

データベース接続の問題 (PostgreSQL テンプレート)

PostgreSQL に接続できない場合:

  1. Docker が動作しているか確認:
$ docker ps
  1. PostgreSQL コンテナを確認:
$ docker-compose logs postgres
  1. 環境変数を確認:
DATABASE_URL=postgresql://user:password@localhost:5432/dbname

Docker ビルドの失敗

Docker ビルドに失敗する場合:

  1. Dockerfile の構文を確認
  2. 必要なファイルがすべて存在するか確認
  3. Docker デーモンが動作しているか確認

依存関係が見つからない

import エラーが出る場合:

  1. 仮想環境を有効化:

    $ source .venv/bin/activate
    

  2. 依存関係をインストール:

    $ pip install -r requirements.txt
    

次のステップ

テンプレートを理解できたら:

  1. 最初のプロジェクト: 完全なアプリケーションを構築
  2. ルートの追加: テンプレートベースのプロジェクトを拡張
  3. CLI リファレンス: 利用可能なすべてのコマンドを習得

テンプレートのヒント

  • テンプレートは出発点であって最終的な解ではありません
  • 自分の要件に合わせてテンプレートをカスタマイズしましょう
  • テンプレートのコードを読み、FastAPI のベストプラクティスを学びましょう
  • 自分のカスタマイズを追えるようバージョン管理を活用しましょう