mcpField
P
python-best-practices

python-best-practices

github.com/c0x12c開発111115 回インストール21 週間前に更新
リポジトリ

python-best-practices について

python-best-practicesは、PythonとFastAPI開発向けのクイックリファレンススキルです。アーキテクチャ、Pydantic v2、非同期処理、永続化、設定、ページネーションを扱い、詳細な例はcode-patterns.mdに案内します。

主な機能

  1. 01ルーター・サービス・リポジトリの階層構成
  2. 02Pydantic v2のスキーマ指針
  3. 03非同期処理とlifespanのパターン
  4. 04論理削除とSQLAlchemyの指針
  5. 05設定とページネーションのパターン

活用シーン

  1. 01FastAPIプロジェクトの構成計画
  2. 02APIスキーマとエンドポイントの設計
  3. 03非同期ルートとデータベース処理の確認
  4. 04設定と一覧レスポンスの標準化

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/c0x12c/ai-toolkit --skill python-best-practices

インストール後、Claude Code で/python-best-practicesを入力して読み込まれたか確認します。

同梱ファイルcode-patterns.md

詳細

Python + FastAPI のベストプラクティス — クイックリファレンス

レイヤードアーキテクチャ

ルーター → サービス → リポジトリ → データベース。各レイヤーは、1つ下のレイヤーのみを呼び出します。

プロジェクト構造全体とレイヤーの例については、code-patterns.md を参照してください。

Pydantic v2

Create/Update/Response のスキーマを分けます。ORM との連携には ConfigDict(from_attributes=True) を使用します。Optional[str] ではなく、str | None の構文を使用します。

スキーマの例については、code-patterns.md を参照してください。

非同期パターン

I/O を行うルートには async def を、CPU 負荷の高い処理には通常の def を使用します。on_event ではなく、ライフスパンのコンテキストマネージャーを使用します。外部への HTTP 呼び出しには httpx.AsyncClient を使用します。

非同期処理の例については、code-patterns.md を参照してください。

論理削除

SQLAlchemy モデルで SoftDeleteMixin を使用します。すべてのクエリで where(Model.deleted_at.is_(None)) によるフィルタリングを行います。

Mixin とリポジトリのパターンについては、code-patterns.md を参照してください。

設定

すべての設定に pydantic-settings を使用します。シークレット、URL、マジックナンバーをハードコードしないでください。

Settings クラスのパターンについては、code-patterns.md を参照してください。

ページネーション

すべてのリストエンドポイントで、汎用の PaginatedResponse[T] を使用します。必ず total、page、limit、has_more を返します。

パターンについては、code-patterns.md を参照してください。

注意点

  • パフォーマンスにおいて、async def と def の使い分けは重要です。 ブロッキング処理(time.sleep() や同期 DB ドライバーなど)を呼び出す async def ルートは、イベントループ全体をブロックします。CPU 負荷の高い処理には通常の def を使用してください。FastAPI がスレッドプールで実行します。async def は、何かを await する場合にのみ使用してください。

  • datetime.utcnow() は Python 3.12 から非推奨です。 代わりに datetime.now(UTC) を使用してください。以前の関数はタイムゾーン情報のない naive datetime を返すため、比較時の不具合につながります。新しい関数は、タイムゾーン情報を持つ UTC の値を返します。

  • Pydantic の可変なデフォルト引数は安全に見えますが、注意が必要です。 tags: list[str] = [] は Pydantic では機能します(デフォルト値がコピーされます)。ただし、tags: list[str] = Field(default_factory=list) と明示する方が、ネストされたモデルでは安全です。単純なフィールドでは、どちらでも問題ありません。複雑なネストされたデフォルト値には、必ず default_factory を使用してください。

  • from_attributes=True は orm_mode=True に代わるものです。 Pydantic v2 では設定 API が変更されました。以前の orm_mode を使用しても何も起きず、ORM オブジェクトが正しくシリアライズされません。

  • SQLAlchemy の Column() はレガシーです。 SQLAlchemy 2.0 では、mapped_column() と Mapped[type] を使用してください。以前の Column(String) も引き続き動作しますが、型チェッカーのサポートと IDE の自動補完が失われます。

コメント