fastapi-code-review について
fastapi-code-reviewは、ルート、依存関係、バリデーション、非同期処理の実践方法に照らしてFastAPIコードを確認するレビュー用スキルです。指摘を報告する前に、コード位置と根拠を求める検証ゲートを備えています。
主な機能
- 01ルートとレスポンスモデルの確認
- 02依存性注入のレビュー
- 03Pydanticバリデーションの確認
- 04非同期処理とブロッキングI/Oのレビュー
- 05指摘の根拠を確認するゲート
活用シーン
- 01FastAPIルート実装のレビュー
- 02依存関係のクリーンアップ方法の確認
- 03バリデーションとエラー処理の評価
- 04報告するコード上の問題の検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill fastapi-code-reviewインストール後、Claude Code で/fastapi-code-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/async.mddependencies.mdroutes.mdvalidation.md詳細
FastAPI コードレビュー
クイックリファレンス
| 問題の種類 | リファレンス |
|---|---|
| APIRouter の設定、response_model、ステータスコード | references/routes.md |
| Depends()、yield 依存関係、クリーンアップ、共有依存関係 | references/dependencies.md |
| Pydantic モデル、HTTPException、422 の処理 | references/validation.md |
| 非同期ハンドラー、ブロッキング I/O、バックグラウンドタスク | references/async.md |
レビューチェックリスト
- 適切な prefix と tags を設定した APIRouter
- すべてのルートで型安全性のために
response_modelを指定している - 正しい HTTP メソッド(GET、POST、PUT、DELETE、PATCH)を使用している
- 適切なステータスコード(200、201、204、404 など)を使用している
- 依存関係では手動呼び出しではなく
Depends()を使用している - yield 依存関係で適切なクリーンアップを行っている
- リクエスト/レスポンスモデルで Pydantic を使用している
- HTTPException にステータスコードと詳細を指定している
- すべてのルートハンドラーが
async defである - ブロッキング I/O(
requests、time.sleep、open())を使用していない - ブロッキングしない処理にはバックグラウンドタスクを使用している
- ルートハンドラーで裸の
exceptを使用していない
有効なパターン(指摘しないでください)
以下は問題があるように見えても正しい、FastAPI らしいパターンです。
- Pydantic がリクエストボディを自動検証する - 型付きの Pydantic モデルをパラメーターとして使用している場合、手動検証は不要です
- データベースセッションの依存性注入 - セッションは関数引数として渡されるのではなく、
Depends()から取得されます - すべての HTTP エラーに HTTPException を使用する - FastAPI が適切な HTTP レスポンスへの変換を処理します
- await のない async def エンドポイント - 同期依存関係や単純な処理を使用している場合があります。FastAPI がこれを処理します
- Depends() の型アノテーション - これはドキュメント/IDE のサポートであり、型アサーションではありません
- Query/Path/Body のデフォルト値 - FastAPI は従来の Python のデフォルト値としてではなく、実行時にこれらを処理します
- エンドポイントから dict を返す -
response_modelが設定されていれば、Pydantic が自動的に変換します
コンテキスト依存のルール
コンテキスト上、指摘が妥当な場合に限り問題を指摘してください。
- 検証不足を指摘するのは、そのフィールドがバリデーター付きの Pydantic モデルにすでに含まれていない場合に限ります
- 認証不足を指摘するのは、エンドポイントが認証依存関係を使った
Depends()を使用していない場合に限ります - エラーハンドリング不足を指摘するのは、エラーケースで HTTPException が適切に発生させられていない場合に限ります
- 非同期処理内の同期処理を指摘するのは、単に非同期でないだけではなく、実際にブロッキングを伴う処理(ファイル I/O、ネットワーク呼び出し、CPU 負荷の高い処理)の場合に限ります
ゲート(FastAPI 固有)
ハンドラーの file:line を特定できた後(review-verification-protocol を参照)、指摘を記載する前に、FastAPI 関連の指摘ごとに一度実行してください。手順の合格条件を満たさない場合は、その内容のまま指摘してはなりません。根拠を集めるか、指摘を取り下げるか、重大度を下げるか、質問形式に言い換えてください。
ゲート 1 — ルートデコレーターとレスポンスの仕様
| 手順 | アクション | 合格条件 |
|---|---|---|
| 1a | リポジトリ内でハンドラーのルートデコレーターを開きます(記憶に頼らないでください)。 | @router.* / @app.*(またはこのハンドラーを登録する箇所)の file:line。 |
| 1b | そのデコレーターの HTTP メソッド、response_model=、status_code= を記録します(または記載がないことを記録します)。 | その行の スニペット、または同じ file:line を添えた 明示的な記載なし。 |
ゲート 2 — ブロッキング処理または「async にすべき」
| 手順 | アクション | 合格条件 |
|---|---|---|
| 2a | ハンドラーの本体全体を読みます。 | 本体全体を含む file:line 範囲。 |
| 2b | ブロッキング I/O を主張する場合は、ブロッキング呼び出しをそれぞれ明記します(例:requests.、open(、time.sleep、同期 DB/ORM)。 | 各呼び出しに file:line が示されていること。本体を読んで該当するものがない場合は、指摘を取り下げます。 |
Gate 3 — 依存関係、バリデーション、認証
| ステップ | アクション | 合格条件 |
|---|---|---|
| 3a | パラメーターを列挙します。Depends / Annotated[..., Depends]、Pydantic モデル、Body/Query/Path、Request/Response を確認します。 | シグネチャの file:line にひも付けた 名前 + 仕組み。 |
| 3b | 認証が欠落していると主張する場合は、ハンドラーファイル(分かれている場合は APIRouter モジュールも)で Depends、Security、HTTPBearer、またはプロジェクトの認証依存関係を検索します。 | 既存のフックへの 引用、または 検索結果:検索したパス + N 件の一致(0 件でも可)。 |
| 3c | バリデーションが欠落していると主張する場合は、その引数がすでに Pydantic モデル、または制約付きの Query/Path/Body になっていないことを確認します。 | file:line を含む 型/ソース。または、すでにバリデーションが適用されている場合は指摘を取り下げます。 |
FastAPI フレームワークの動作
FastAPI と Pydantic は、多くの処理を自動で行います。
- Pydantic モデルによるリクエストのバリデーション
- response_model によるレスポンスのシリアライズ
- 横断的関心事に対する依存関係の注入
- 例外ハンドラーによる例外処理
機能が「欠落している」と指摘する前に、FastAPI が処理していないことを確認してください。
参照資料を読み込むタイミング
- ルート定義のレビュー → routes.md
- 依存関係の注入のレビュー → dependencies.md
- Pydantic モデル/バリデーションのレビュー → validation.md
- 非同期ルートハンドラーのレビュー → async.md
レビューの質問
- すべてのルートに明示的なレスポンスモデルとステータスコードがありますか?
- 依存関係は適切なクリーンアップを伴って Depends() で注入されていますか?
- すべての Pydantic モデルで入力が正しくバリデーションされていますか?
- すべてのルートハンドラーが非同期かつノンブロッキングですか?
指摘を提出する前に
- FastAPI 関連の各指摘について、上記の ゲート(FastAPI 固有) を完了してください。
- 問題を報告する前に、review-verification-protocol(事前報告チェックリストと 問題の種類ごとの検証)を読み込み、その手順に従ってください。
コメント
Markdown 対応