コンテンツにスキップ

アーキテクチャプリセット / 機能マトリクス

fastkit init --interactive は機能選択の前に アーキテクチャプリセット を尋ねます (issue #44)。プリセットは生成されるプロジェクトのレイアウトを決めます。プリセットごとに異なるベーステンプレートを使い、生成された設定ファイルを既存の構造に並べる形で配置します (並列の src/config/ ツリーを作るのではなく)。

このページは、各プリセットの動作、ファイルの配置先、手動配線が必要な機能の組み合わせを確認するための基準ページです。

プリセット → ベーステンプレート

プリセット ベーステンプレート 説明
minimal fastapi-empty 最小構成の動作可能な FastAPI アプリ — プレースホルダの main.py は機能選択から再生成されます。
single-module fastapi-single-module 単一ファイル FastAPI アプリ — main.py は再生成されます。
classic-layered fastapi-default レイヤー型分割 (api/routescrudschemascore)。テンプレートに含まれる main.py はそのまま使われます。
domain-starter fastapi-domain-starter ドメイン指向 (src/app/domains/<concept>/)。テンプレートに含まれる main.py はそのまま使われます。推奨デフォルト。

生成ファイルの配置先

プリセット main.py オーバーレイ データベース設定の配置先 認証設定の配置先
minimal src/main.py で再生成 src/config/database.py src/config/auth.py
single-module src/main.py で再生成 src/config/database.py src/config/auth.py
classic-layered 保存 (テンプレートに含まれるものをそのまま使用) src/core/database.py src/core/auth.py
domain-starter 保存 (テンプレートに含まれるものをそのまま使用) src/app/core/database.py src/app/core/auth.py

プリセット別のデータベース / 認証機能サポート

これらの機能は すべての プリセットでサポートされます — パッケージインストールは常に成功します。違いは、動的な main.py オーバーレイが自動でそれらを配線するかどうかです。

機能 minimal / single-module classic-layered / domain-starter
データベース (PostgreSQL、MySQL、SQLite、MongoDB) 設定モジュールを生成し、再生成された main.pyawait init_db() 呼び出しのスタブも入ります。 プリセットごとのパスに設定モジュールを生成します。テンプレートに含まれる main.pyそのまま残る ため、get_db() はルーター側で手動で配線してください。
認証 (JWT、FastAPI-Users、OAuth2、セッションベース) 認証設定モジュールを生成します。JWT の場合は再生成された main.pyHTTPBearer も import されます。 プリセットのパスに認証設定モジュールを生成します。main.py への import は追加されません — 依存性は手動で配線してください。
バックグラウンドタスク (Celery、Dramatiq) パッケージはインストールされますが、現状は main.py オーバーレイなし。 同上。
キャッシュ (Redis) パッケージはインストールされますが、現状は main.py オーバーレイなし。 同上。
CORS (ユーティリティ) 再生成された main.pyCORSMiddlewareallow_origins=['*'] で追加されます。 テンプレートに含まれる main.pyすでに組み込み済み です (settings.all_cors_origins に応じて条件分岐)。.envBACKEND_CORS_ORIGINS を設定すれば有効化されます — コード変更は不要です。
テスト (Basic / Coverage / Advanced) プロジェクトルートに pytest.ini を生成。 同上。
デプロイ (Docker、docker-compose) プロジェクトルートに Dockerfile または docker-compose.yml を作成。 同上。

"Preset compatibility" 警告が出る場面

テンプレートに含まれる main.pyそのまま使う プリセット (classic-layereddomain-starter) では、一部の機能選択が自動配線されません。CLI は生成の最後に、手動配線が必要な選択を 1 回だけまとめて警告します:

選択した機能 classic-layered / domain-starter で警告が出るか?
CORS (ユーティリティ) ❌ — テンプレートに含まれる main.py で配線済み。.envBACKEND_CORS_ORIGINS を埋めるだけ。
Rate-Limiting (ユーティリティ) ✅ — slowapi リミッタのセットアップは追加されない
Prometheus (モニタリング) ✅ — Instrumentator().instrument(app) は呼び出されない
任意のデータベース / 認証選択 ⚠️ — 設定ファイルは生成されますが、自分で Depends() をルーターに組み込む必要があります

minimalsingle-module プリセットでは、動的 main.py オーバーレイが CORS、レート制限、Prometheus 計装を自動で扱います。警告は出ません。

サポート外の組み合わせ (安全側に倒す)

ストラテジストはあえて テンプレートに含まれる main.py に生成コードを差し込みません。差し込むと import が壊れたり、ルーターが重複登録されたりするリスクがあるためです。現在の前提は次のとおりです:

  • 選択されたパッケージは常にインストールされます (pip freeze がユーザーの意図と一致します)。
  • 生成された設定モジュールは常にプリセットに応じた配置先へ作られます。
  • main 保存型プリセットでは、コードが暗黙に壊れるのではなく、どの選択がまだ手動配線を要するかを利用者に明示します。

すべての機能を完全に自動配線したい場合は minimal または single-module を選んでください — それらは機能フラグから main.py を再生成します。