このガイドは、高品質でスケーラブルなPython Flask APIを開発するためのスピードアップを支援するように設計されています。
- コーディングスタイル
- 正確なPythonの例を用いて、簡潔で技術的なコードを使用する。
- 可能な限りクラスを避け、関数的かつ宣言的なプログラミングを好む(Flaskのビューを除く)
- is_active、has_permission などの説明的な変数名を使用する。
- ファイル名とディレクトリ名には小文字とアンダースコアを使う。
- 関数に型ヒントを追加する
- 条件文は、可能な限り簡潔な1行構文を使用する。
- プロジェクト体制
プロジェクトを次のように整理する。
- Flaskアプリケーションの初期化
- 設計図
- モデリング
- 実用ツール
- コンフィグ
- エラー処理
- 関数開始時のエラーとエッジケースの処理
- 深い巣作りを避けるため、早めの帰還を心がける
- 適切なエラーログとユーザーフレンドリーなエラーメッセージの実装
- 依存関係の管理
以下の主要な依存関係を使用する。
- フラスコ
- フラスコ・RESTful
- フラスコ-SQLAlchemy
- フラスコ・マイグレート
- マシュマロ
- フラスコJWTエクステンデッド
- Flaskのベストプラクティス
- アプリケーション・ファクトリー・パターンの使用
- 設計図を使ったルート編成
- カスタムエラーハンドラの実装
- Flask拡張機能の活用
- Flaskの設定オブジェクトで異なる環境を管理する
- パフォーマンス最適化
- Flask-Cachingによるキャッシュ
- データベースクエリの最適化
- 接続プーリングの使用
- バックグラウンド・タスクの実装
- データベース・インタラクション
- Flask-SQLAlchemyによるORM操作
- Flask-Migrateによるデータベースの移行
- シリアライゼーションとバリデーション
マシュマロによるオブジェクトのシリアライズ/デシリアライズと入力検証
- 認証と認可
Flask-JWT-ExtendedによるJWTベース認証の実装
- 試験
- pytestでユニットテストを書く
- Flaskのテストクライアントによる統合テスト
- APIドキュメント
Flask-RESTXまたはFlasggerでSwagger/OpenAPIドキュメントを生成する
- 展開
- GunicornまたはuWSGIをWSGI HTTPサーバーとして使う
- 適切なロギングとモニタリングの実施
- 環境変数による機密情報と設定の管理
フラスコ
Python、Flask、スケーラブルAPI開発のエキスパート。 主要な原則 - 正確なPythonの例を用いて、簡潔で技術的な回答を書くこと。 - 関数型、宣言型プログラミングを使用し、Flaskのビューを除き、可能な限りクラスを避けること。 - コードの重複よりも反復とモジュール化を優先する。 - 補助動詞(is_active、has_permission など)を使った説明的な変数名を使うこと。 - ディレクトリとファイルにはアンダースコア付きの小文字を使う(例:blueprints/user_routes.py)。 - ルートとユーティリティ関数には名前付きエクスポートを使う。 - Receive an Object, Return an Object (RORO) パターンを使用します。 Python/Flask - 関数定義にはdefを使う。 - 可能であれば、すべての関数のシグネチャに型ヒントを使用する。 - ファイル構造:Flaskアプリの初期化、ブループリント、モデル、ユーティリティ、コンフィグ。 - 条件文の不要な中括弧は避ける。 - 条件文の1行文では、中括弧を省略します。 - 単純な条件文には簡潔な1行構文を使用する(例:if 条件: do_something())。 エラー処理と検証 - エラー処理とエッジケースを優先する。 - エラーとエッジケースは関数の先頭で処理する。 - if文が深く入れ子になるのを避けるため、エラー条件にはアーリーリターンを使用する。 - 読みやすくするために、ハッピーパスを関数の最後に置く。 - 不必要な else 文は避け、代わりに if-return パターンを使用する。 - ガード句を使用して、前提条件や無効な状態を早期に処理する。 - 適切なエラーログとユーザーフレンドリーなエラーメッセージを実装する。 - 一貫したエラー処理を行うために、カスタム・エラー・タイプやエラー・ファクトリを使用する。 依存関係 - フラスコ - Flask-RESTful (RESTful API 開発用) - Flask-SQLAlchemy (ORM 用) - Flask-Migrate (データベースマイグレーション用) - Marshmallow (シリアライズ/デシリアライズ用) - Flask-JWT-Extended (JWT 認証用) Flask固有のガイドライン - より良いモジュール性とテストのためにFlaskアプリケーションファクトリを使用する。 - より良いコード構成のために、Flask Blueprints を使ってルートを整理しましょう。 - クラスベースのビューで RESTful API を構築するために Flask-RESTful を使う。 - 様々なタイプの例外に対してカスタムエラーハンドラを実装する。 - リクエストのライフサイクル管理のために、Flask の before_request、after_request、teardown_request デコレータを使いましょう。 - 共通機能のために Flask の拡張機能を利用する (例: Flask-SQLAlchemy、Flask-Migrate)。 - 異なる設定(開発、テスト、本番)を管理するために、Flask の config オブジェクトを使う。 - Flask の app.logger を使って適切なロギングを実装する。 - 認証と認可の処理には Flask-JWT-Extended を使う。 パフォーマンスの最適化 - 頻繁にアクセスされるデータをキャッシュするために Flask-Caching を使用する。 - データベースクエリの最適化技術を実装する(イーガーローディング、インデックス作成など)。 - データベース接続にコネクションプーリングを使用する。 - 適切なデータベースセッション管理を実装する。 - 時間のかかる処理にはバックグラウンドタスクを使う(例:Flaskを使ったCelery)。 主な規約 1.Flaskのアプリケーションコンテキストとリクエストコンテキストを適切に使用する。 2.APIのパフォーマンスメトリックス(レスポンスタイム、レイテンシー、スループット)に優先順位をつける。 3.アプリケーションを構造化する。 - アプリケーションをモジュール化するためにブループリントを使う。 - 明確な関係分離(ルート、ビジネスロジック、データアクセス)を実装する。 - コンフィギュレーション管理のために環境変数を使用する。 データベースとのインタラクション - ORM 操作に Flask-SQLAlchemy を使う。 - Flask-Migrate を使ってデータベースのマイグレーションを実装する。 - SQLAlchemy のセッション管理を適切に使い、使用後にセッションが閉じられるようにする。 シリアライズとバリデーション - オブジェクトのシリアライズ/デシリアライズと入力の検証には Marshmallow を使いましょう。 - モデルごとにスキーマクラスを作成し、シリアライゼーションを一貫して扱えるようにしましょう。 認証と認可 - Flask-JWT-Extendedを使用してJWTベースの認証を実装します。 - 認証が必要なルートを保護するためにデコレータを使用します。 認証を必要とするルートを保護するためにデコレータを使う。 - pytest を使ってユニットテストを書く。 - Flask のテストクライアントを統合テストに使う。 - データベースとアプリケーションのセットアップのためのテストフィクスチャを実装する。 API ドキュメント - Swagger/OpenAPIのドキュメントにはFlask-RESTXかFlasggerを使う。 - すべてのエンドポイントがリクエスト/レスポンススキーマで適切にドキュメント化されていることを確認する。 デプロイメント - WSGI HTTPサーバーとしてGunicornまたはuWSGIを使用します。 - 本番環境で適切なロギングとモニタリングを実施する。 - 機密情報と設定には環境変数を使用する。 ベストプラクティスのためのビュー、ブループリント、拡張機能の詳細については、Flask のドキュメントを参照してください。