数分で動くFastAPIバックエンドのスケルトンを構築する方法
新しいFastAPIプロジェクトを始めるたびに、グリーホッグデイのような繰り返しに縛られます。ディレクトリ構造を再びセットアップし、データベースに接続し、マイグレーションを書き、環境変数を設定し、Dockerfileを構築し、リントツールを設定する必要があります。最初の実際のエンドポイントすら現れる前に、まる一日をこのルーティンに費やすのは簡単です。
もちろん、以前のリポジトリから構造をコピーすることはできます。しかし、通常それは古い回避策、不要な依存関係、時代遅れのライブラリ一大堆を含んでいます。検索結果からの既成のボイラープレートも滅多にニーズに合いません。作者はTortoiseORMを選んだけれどあなたはSQLAlchemy 2.0が必要,或者他们塞进了重量级的Celery而不是轻量级队列。
開発者s3riusのFastAPI-templateリポジトリは、この問題を異なる方法で解決します。静的なテンプレートではなく、柔軟なインタラクティブなプロジェクトジェネレーターです。
硬質なテンプレートではなくコンストラクタ
このプロジェクトはターミナルでの質問票のように動作します。pip、uv、またはDockerでユーティリティを起動し、数十の質問に答えるだけで、ニーズに合わせたコードベースが得られます。
ジェネレーターの主な利点は多様性です。ほとんどのテンプレートは特定のスタックを強制しますが、ここでは必要なコンポーネントセットを自分で組み立てます。
好みのデータベースとORM
単一のライブラリに縛られることなく、ユーティリティはいくつかの一般的なデータ処理オプションをサポートしています:
- 非同期エンジン付きのSQLAlchemy 2.0
- Aerichによるマイグレーション生成付きのTortoiseORM
- Piccolo ORM
- Ormar
- MongoDB用のBeanie
- ORMなしの生psycopgドライバー
データベースがまったく必要ない場合は、データストレージなしオプションを選択できます。その場合、コードには不要な依存関係やゴミ設定ファイルが含まれません。
RESTまたはGraphQL
デフォルトでは、ジェネレーターは自動的なSwaggerドキュメントを備えたクラシックなREST APIを構築します。しかし、フロントエンドがGraphQL経由での作業を好む場合、ジェネレーターはStrawberryライブラリに基づいたラッパーをセットアップします。手動でスキーマとタイプを設定する必要はありません。
バックグラウンドタスクとキュー
重量級のCeleryの代わりに、テンプレート作者はPython用の最新の非同期タスクマネージャーTaskiqとの統合を追加しました。FastAPIの全体的な非同期アーキテクチャに完璧にフィットします。メッセージブローカーとして、生成時にRedis、RabbitMQ、またはKafkaを選択できます。
箱から出してすぐに使えるモニタリングとログ記録
テンプレートには、別々の記事から手動で構成する必要がある готовые統合がすでに組み込まれています:
- Prometheus用のメトリクス収集
- OpenTelemetryによるトレーシング
- Sentryへのエラー送信
- Loguruによる構造化ログ記録
これらのオプションはすべて、シンプルなフラグまたはインタラクティブメニューでの選択で切り替え可能です。
クイックスタート
ユーティリティを実行するには、マシンにGit、Python、高速パッケージマネージャーuvがインストールされている必要があります。
ジェネレーターはpipでインストールします:
python3 -m pip install fastapi_template
fastapi_template
起動後、コンソールにステップバイステップの質問票が表示されます。プロジェクト名、必要なDBMS、認証タイプ(JWTまたはfastapi-usersによるクッキー)、CI/CD形式(GitHub ActionsまたはGitLab CI)、追加サービスを選択できます。
ジェネレーターが完了したら、作成されたフォルダに移動して環境を立ち上げます:
cd my_awesome_project
docker-compose up --build
パッケージをローカルにインストールしたくない場合は、Dockerで1行でジェネレーターを実行できます:
docker run --rm -it -v "$(pwd):/projects" ghcr.io/s3rius/fastapi_template
CLIフラグによる生成
社内で自動化されたマイクロサービス作成を設定している場合、インタラクティブモードを無効にできます。ユーティリティはすべてのパラメータをコマンドライン引数で受け取ります:
fastapi_template \
--name billing_service \
--api-type rest \
--db postgresql \
--orm sqlalchemy \
--migrations \
--redis \
--taskiq \
--prometheus \
--ci github \
--quiet
この呼び出しは、ターミナルで1つも質問されることなく、SQLAlchemy、Alembicマイグレーション、Taskiqバックグラウンドタスク、メトリクス、GitHubパイプラインが 구성된 готовыйサービスをを作成します。
生成されたプロジェクトの内部
生成されたコードは、その構造で喜んで驚かれるでしょう。すべてを1つのファイルに詰め込んだような乱雑さはなく、。
アーキテクチャは論理的レイヤーに分かれています:
web/api: バージョンプレフィックスとモジュール別に分類されたルーターdb: データベース接続、モデル、マイグレーション設定services: ビジネスロジックと外部サービスクライアントsettings.py: pydantic-settingsに基づく型付き設定
プロジェクトには、基本構造の約90%のカバー率を持つpytestテスト、リンターが 구성된pre-commit、選択したすべてのサービスが含まれた готовый docker-compose.ymlがすぐに含まれています。ローカル開発用にRedisやPostgreSQLを別途立ち上げる必要はありません。
誰がこのプロジェクトを見つけるか
ジェネレーターは2つのシナリオに最適です。
最初のケースは、ペットプロジェクトとMVPの迅速な起動です。週末に仮説をテストしたい場合は、ボイラープレートに半日を費やす気力は湧かないでしょう。
2番目のケースはチームでのマイクロサービス標準化です。このテンプレートをベースにするか、そのCLIインターフェースを使用して、公司内の新しいサービスがすでに構成されたテレメトリとテストで単一の標準に従って作成されるようにできます。
Pythonで書いていて、頻繁に新しいFastAPIバックエンドを立ち上げる場合は、ぜひこのリポジトリをブックマークしてください。開始時に多くの時間と神経を節約できます。
関連プロジェクト