mcpField
P
python-backend

python-backend

github.com/yonatangross開発299239 回インストール今日更新
リポジトリ

python-backend について

python-backend は、本番向け Python バックエンド開発を支援する OrchestKit スキルです。asyncio、FastAPI、SQLAlchemy 2.0、コネクションプーリングの実装パターンを、必要に応じて読み込めるルールで扱います。

主な機能

  1. 01asyncioの構造化並行処理
  2. 02FastAPIのライフサイクルと依存関係
  3. 03SQLAlchemy 2.0の非同期セッション
  4. 04データベースとHTTPのプーリング
  5. 05トピック別のルール構成

活用シーン

  1. 01非同期FastAPIサービスの構築
  2. 02リクエスト単位のSQLAlchemyセッション管理
  3. 03DBとHTTPコネクションプールの調整

インストール

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

$npx skills add https://github.com/yonatangross/orchestkit --skill python-backend

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

metadata.json
test-cases.json
assets/
fastapi-app-template.py
references/
eager-loading.md
fastapi-app-boilerplate.md
ork-delta.md
rules/
_template.md
asyncio-cancellation.md
asyncio-structured.md
_sections.md
fastapi-background.md
fastapi-middleware.md
asyncio-taskgroup.md
fastapi-dependencies.md
pooling-http.md
pooling-database.md
sqlalchemy-relationships.md
pooling-tuning.md
sqlalchemy-sessions.md
sqlalchemy-migrations.md
scripts/
async-service-template.py
repository-template.py
create-fastapi-app.md
pool-setup-template.py

詳細

Python バックエンド

asyncio、FastAPI、SQLAlchemy 2.0、接続プーリングを使って、本番環境向けの Python バックエンドを構築するためのパターンです。各カテゴリのルールは個別のファイルに記載され、必要に応じて rules/ から読み込まれます。

クイックリファレンス

カテゴリルール影響度使用する場面
Asyncio3高TaskGroup、構造化並行処理、キャンセル処理
FastAPI3高依存関係、ミドルウェア、バックグラウンドタスク
SQLAlchemy3高非同期セッション、リレーションシップ、マイグレーション
Pooling3中データベースプール、HTTP セッション、チューニング

合計:4 つのカテゴリにわたる 12 個のルールです。 削られたファイルから復元されたプロジェクト内の決定事項は references/ork-delta.md に記載されています。ベンダーの資料は再掲せず、リンクしています(アップストリームのカバー範囲(再掲しない)を参照)。

クイックスタート

# FastAPI + SQLAlchemy async session
async def get_db() -> AsyncGenerator[AsyncSession, None]:
    async with async_session_factory() as session:
        try:
            yield session
            await session.commit()
        except Exception:
            await session.rollback()
            raise

# Reusable dependency alias (FastAPI's recommended Annotated form)
SessionDep = Annotated[AsyncSession, Depends(get_db)]

@router.get("/users/{user_id}")
async def get_user(user_id: UUID, db: SessionDep):
    result = await db.execute(select(User).where(User.id == user_id))
    return result.scalar_one_or_none()
# Asyncio TaskGroup with timeout
async def fetch_all(urls: list[str]) -> list[dict]:
    async with asyncio.timeout(30):
        async with asyncio.TaskGroup() as tg:
            tasks = [tg.create_task(fetch_url(url)) for url in urls]
    return [t.result() for t in tasks]

Asyncio

構造化並行処理、TaskGroup、Python 3.11 以降の機能を活用する最新の Python asyncio パターンです。

主なパターン
  • TaskGroup は、構造化並行処理と自動キャンセルを備え、gather() に代わるものです
  • asyncio.timeout() コンテキストマネージャーによる、組み合わせ可能なタイムアウト
  • Semaphore による並行処理数の制限(HTTP リクエストのレート制限)
  • 複数のタスク失敗を処理する、ExceptionGroup と except*
  • 同期コードと非同期コードを橋渡しする asyncio.to_thread()
主な決定事項
決定事項推奨事項
タスクの起動gather() ではなく TaskGroup
タイムアウトasyncio.timeout() コンテキストマネージャー
並行処理数の制限asyncio.Semaphore
同期コードとの橋渡しasyncio.to_thread()
キャンセルCancelledError は必ず再送出する

FastAPI

ライフスパン、依存関係、ミドルウェア、設定に関する、本番環境向けの FastAPI パターンです。

主なパターン
  • 起動・終了時のリソース管理に asynccontextmanager を使う ライフスパン
  • クラスベースのサービスと Depends() による 依存性注入
  • ミドルウェアスタック:CORS -> RequestID -> Timing -> Logging
  • .env とフィールド検証を使う Pydantic Settings
  • RFC 9457 Problem Details の本文を返すように設定する 例外ハンドラー(本文形式そのものは ork:api-design にあります)
主な決定事項
決定事項推奨事項
ライフスパンasynccontextmanager(イベントではなく)
依存関係DI を使ったクラスベースのサービス
設定.env を使った Pydantic Settings
レスポンスパフォーマンス向上のため ORJSONResponse
ヘルスチェック重要な依存関係をすべて確認する

SQLAlchemy

SQLAlchemy 2.0、AsyncSession、FastAPI との統合を使った非同期データベースのパターンです。

主なパターン
  • expire_on_commit=False を指定し、リクエストごとに 1 つの AsyncSession を使う
  • リレーションシップに lazy="raise" を設定し、意図しない N+1 クエリを防ぐ
  • コレクションの先読み込みには selectinload を使う
  • 汎用の非同期 CRUD を備えた リポジトリパターン
  • メモリ管理のため、一括挿入を 1000~10000 行単位に分割する
主な決定事項
決定事項推奨事項
セッションのスコープリクエストごとに 1 つの AsyncSession
遅延読み込みlazy="raise" +明示的な読み込み
先読み込みコレクションには selectinload
expire_on_commitFalse(遅延読み込みエラーを防止)
プールpool_pre_ping=True

Pooling

高性能な非同期 Python アプリケーション向けの、データベースと HTTP の接続プーリングです。

主なパターン
  • pool_size、max_overflow、pool_pre_ping を使う SQLAlchemy プール
  • min_size/max_size と接続のライフサイクルを指定する 直接利用の asyncpg プール
  • TCPConnector の上限と DNS キャッシュを使う aiohttp セッション
  • 起動時にプールを作成し、終了時に閉じる FastAPI のライフスパン
  • Prometheus メトリクスによる プールの監視
プールサイズの計算式
pool_size = (concurrent_requests / avg_queries_per_request) * 1.5

この計算式で算出するのは、1 プロセス分のサイズです。サーバーの max_connections に対するフリート全体の上限と、プールのアラートしきい値は references/ork-delta.md に記載されています。

アンチパターン(禁止)

# NEVER use gather() for new code - no structured concurrency
# NEVER swallow CancelledError - breaks TaskGroup and timeout
# NEVER block the event loop with sync calls (time.sleep, requests.get)
# NEVER use global mutable state for db sessions
# NEVER skip dependency injection (create sessions in routes)
# NEVER share AsyncSession across tasks (race condition)
# NEVER use sync Session in async code (blocks event loop)
# NEVER create engine/pool per request
# NEVER forget to close pools on shutdown

アップストリームのカバー範囲(再掲しない)

2026-07-31 の wrap-plus-delta 間引きで削除されたトピックです。一次情報を参照してください。このスキルに含めるのは、ork のデルタ(社内ポリシー、既知の問題、稼働中の設定)だけです。ある行で社内サブセットを rules/ ファイルに残すと記載されている場合、そのファイルが OrchestKit の方針に関する正式な情報源であり、リンクはその周辺のベンダー側の情報だけを対象とします。

トピック一次情報源
asyncio タスク API リファレンス:TaskGroup と gather() の比較、asyncio.timeout()、ExceptionGroup と except*、to_thread()。プロジェクト内で扱う範囲は rules/asyncio-taskgroup.md と rules/asyncio-cancellation.md に記載されています。https://docs.python.org/3/library/asyncio-task.html
asyncio.Semaphore、Lock、Event、Queue のセマンティクス。プロジェクト内で扱う範囲は rules/asyncio-structured.md に記載されています。「一度だけ作成してタイムアウトを設定する」ルールは references/ork-delta.md に記載されています。https://docs.python.org/3/library/asyncio-sync.html
イベントループのデバッグモード、slow_callback_duration、ブロッキング呼び出しの検出(プロジェクト内で定める 100 ms のしきい値は references/ork-delta.md に記載されています)https://docs.python.org/3/library/asyncio-dev.html
FastAPI プロジェクトのひな形作成:アプリのレイアウト、APIRouter の構成、Pydantic Settings の組み込み、uvicorn のエントリーポイントhttps://fastapi.tiangolo.com/tutorial/bigger-applications/
FastAPI のライフスパン API と起動/シャットダウンの仕組み。プロジェクト内で扱う範囲は rules/fastapi-background.md に記載されています。逆順でティアダウンするルールは references/ork-delta.md に記載されています。https://fastapi.tiangolo.com/advanced/events/
Starlette/FastAPI のミドルウェア API、BaseHTTPMiddleware、call_next、CORS オプション。プロジェクト内で扱う範囲は rules/fastapi-middleware.md と references/fastapi-app-boilerplate.md に記載されています。ミドルウェアと依存関係の使い分けは references/ork-delta.md に記載されています。https://fastapi.tiangolo.com/tutorial/middleware/
SQLAlchemy 2.0 の asyncio API:create_async_engine、async_sessionmaker、expire_on_commit、Mapped/mapped_column、with_for_update、一括挿入と更新。プロジェクト内で扱う範囲は rules/sqlalchemy-sessions.md、rules/sqlalchemy-relationships.md、rules/sqlalchemy-migrations.md、references/eager-loading.md に記載されています。https://docs.sqlalchemy.org/en/20/orm/extensions/asyncio.html
SQLAlchemy のプール実装とオプション(pool_size、max_overflow、pool_pre_ping、pool_recycle、pool_timeout)。プロジェクト内で扱う範囲は rules/pooling-database.md に記載されています。https://docs.sqlalchemy.org/en/20/core/pooling.html
計測用の SQLAlchemy プールイベント(checkout、checkin、connect)。プロジェクト内で扱う範囲は rules/pooling-tuning.md に記載されています。アラートのしきい値は references/ork-delta.md に記載されています。https://docs.sqlalchemy.org/en/20/core/events.html
asyncpg プール API:create_pool、min_size/max_size、max_inactive_connection_lifetime、setup フック、型コーデックhttps://magicstack.github.io/asyncpg/current/api/index.html
aiohttp クライアントリファレンス:ClientSession、TCPConnector の制限、キープアライブ、DNS キャッシュ、ClientTimeout。プロジェクト内で扱う範囲は rules/pooling-http.md に記載されています。https://docs.aiohttp.org/en/stable/client_reference.html
PostgreSQL サーバー側の接続数制限(max_connections、superuser_reserved_connections)https://www.postgresql.org/docs/current/runtime-config-connection.html
pytest-asyncio のフィクスチャと非同期テストのセットアップhttps://pytest-asyncio.readthedocs.io/en/stable/reference/fixtures/index.html
コンテナーおよび Kubernetes のパッケージ化、レディネス/ライブネスプローブ、リソース制限https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
認証フロー、パスワードハッシュ化、トークンの有効期限ポリシー、セキュリティヘッダーork:security-patterns(src/skills/security-patterns/)が担当します。FastAPI の Depends() 認証チェーンは rules/fastapi-dependencies.md に記載されています。
RFC 9457 の問題詳細ボディ形式、API のバージョン管理、SSE および WebSocket の通信契約ork:api-design(src/skills/api-design/)が担当します。FastAPI の例外ハンドラーの組み込みは rules/fastapi-background.md と references/fastapi-app-boilerplate.md に記載されています。
FastAPI、asyncio、SQLAlchemy、プーリングの本番環境向けチェックリスト上記の情報源から導出できます。同じ内容のチェックリストは再掲していません。

関連スキル

  • ork:architecture-patterns - クリーンアーキテクチャとレイヤー分離
  • ork:async-jobs - バックグラウンド処理向けの Celery/ARQ
  • ork:api-design - ワイヤーコントラクト、RFC 9457 エラー、SSE/WebSocket ストリーミング
  • ork:database-patterns - データベーススキーマ設計
  • ork:security-patterns - 認証、パスワードハッシュ化、トークンポリシー
  • ork:testing-integration - pytest-asyncio と httpx ASGI のテスト環境設定
  • ork:devops-deployment - Docker と Kubernetes のパッケージ化

コメント