├── pyproject.toml # プロジェクト設定・依存関係管理(uv使用)
├── uv.lock # 依存関係のロックファイル
├── .python-version # Pythonバージョン指定
├── docker-compose.yml # Docker Compose設定(API + MySQL)
├── Dockerfile # APIコンテナのビルド設定
└── README.md # プロジェクト説明書
├── app/ # メインアプリケーションディレクトリ
├── tests/ # テストファイル
├── init/ # データベース初期化スクリプト
├── .venv/ # Python仮想環境
└── .vscode/ # VSCode設定
├── main.py # FastAPIアプリケーションの起動ファイル
├── core/
│ ├── __init__.py # パッケージ初期化
│ ├── config.py # アプリケーション設定管理
│ └── database.py # データベース接続設定
役割: アプリケーションの基盤設定
- config.py: 環境変数から設定を読み込み、データベースURLを生成
- database.py: SQLAlchemyエンジンとセッション管理
├── api/
│ ├── __init__.py # パッケージ初期化
│ ├── deps.py # 依存関係注入(データベースセッション等)
│ └── v1/ # API v1
│ ├── __init__.py # パッケージ初期化
│ ├── api.py # v1のルーター統合
│ └── endpoints/ # エンドポイント定義
│ ├── __init__.py # パッケージ初期化
│ └── pokedex.py # ポケモン図鑑API
役割: APIエンドポイントの管理
- deps.py: FastAPIの依存関係(DBセッション等)
- v1/api.py: 各エンドポイントの統合
- endpoints/: 個別のAPIエンドポイント
├── models/
│ ├── __init__.py # モデルのエクスポート
│ ├── pokedex.py # ポケモン図鑑モデル
│ ├── name.py # 名前モデル
│ ├── type.py # タイプモデル
│ ├── ability.py # 特性モデル
│ ├── move.py # 技モデル
│ └── forme_type.py # フォルムタイプモデル
役割: SQLAlchemy ORMモデル(データベーステーブル定義)
├── schemas/
│ ├── pokedex.py # ポケモン図鑑スキーマ
│ ├── name.py # 名前スキーマ
│ ├── type.py # タイプスキーマ
│ ├── ability.py # 特性スキーマ
│ ├── move.py # 技スキーマ
│ └── forme_type.py # フォルムタイプスキーマ
役割: Pydanticスキーマ(APIリクエスト/レスポンスの型定義)
├── init/
│ └── _pkmn_20250808.sql # データベース初期化SQL
役割: MySQLコンテナ起動時に実行される初期データ
├── tests/
│ └── test_main.py # メインアプリケーションのテスト
HTTP Request → main.py → api/v1/api.py → endpoints/pokedex.py → models/pokedex.py → MySQL
MySQL → models/pokedex.py → schemas/pokedex.py → endpoints/pokedex.py → HTTP Response
.env → core/config.py → core/database.py → models/*.py
- core/: アプリケーション設定とデータベース接続
- api/: HTTPリクエスト/レスポンスの処理
- models/: データベーステーブルの定義
- schemas/: APIの入出力データの型定義
- endpoints/: 具体的なAPIエンドポイントの実装
この構造により、責任の分離が明確で、保守性と拡張性が高いアプリケーションになっています。
├── pyproject.toml # プロジェクト設定・依存関係管理(uv使用)
├── uv.lock # 依存関係のロックファイル
├── .python-version # Pythonバージョン指定
├── docker-compose.yml # Docker Compose設定(API + MySQL)
├── Dockerfile # APIコンテナのビルド設定
└── README.md # プロジェクト説明書
├── app/ # メインアプリケーションディレクトリ
├── tests/ # テストファイル
├── init/ # データベース初期化スクリプト
├── .venv/ # Python仮想環境
└── .vscode/ # VSCode設定
├── main.py # FastAPIアプリケーションの起動ファイル
├── core/
│ ├── __init__.py # パッケージ初期化
│ ├── config.py # アプリケーション設定管理
│ └── database.py # データベース接続設定
├── api/
│ ├── __init__.py # パッケージ初期化
│ ├── deps.py # 依存関係注入(データベースセッション等)
│ └── v1/ # API v1
│ ├── __init__.py # パッケージ初期化
│ ├── api.py # v1のルーター統合
│ └── endpoints/ # エンドポイント定義
│ ├── __init__.py # パッケージ初期化
│ └── pokedex.py # ポケモン図鑑API
├── models/
│ ├── __init__.py # モデルのエクスポート
│ ├── pokedex.py # ポケモン図鑑モデル
│ ├── name.py # 名前モデル
│ ├── type.py # タイプモデル
│ ├── ability.py # 特性モデル
│ ├── move.py # 技モデル
│ └── forme_type.py # フォルムタイプモデル
├── schemas/
│ ├── pokedex.py # ポケモン図鑑スキーマ
│ ├── name.py # 名前スキーマ
│ ├── type.py # タイプスキーマ
│ ├── ability.py # 特性スキーマ
│ ├── move.py # 技スキーマ
│ └── forme_type.py # フォルムタイプスキーマ
├── init/
│ └── _pkmn_20250808.sql # データベース初期化SQL
├── tests/
│ └── test_main.py # メインアプリケーションのテスト
HTTP Request → main.py → api/v1/api.py → endpoints/pokedex.py → models/pokedex.py → MySQL
MySQL → models/pokedex.py → schemas/pokedex.py → endpoints/pokedex.py → HTTP Response
.env → core/config.py → core/database.py → models/*.py