sqlalchemy-code-review について
SQLAlchemy のコードレビュー向けスキルで、セッション、リレーション、クエリ、Alembic のマイグレーションを確認します。セッションのライフサイクル、N+1 クエリ、マイグレーションに関する指摘には、ファイルと行番号の根拠を求めます。
主な機能
- 01セッションライフサイクルのチェックリスト
- 02リレーション読み込みと N+1 の確認
- 03SQLAlchemy 2.0 クエリの指針
- 04一括操作のレビュー項目
- 05Alembic マイグレーションの確認
活用シーン
- 01セッションの作成とクリーンアップのレビュー
- 02N+1 クエリの可能性の発見
- 03マイグレーションの可逆性確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill sqlalchemy-code-reviewインストール後、Claude Code で/sqlalchemy-code-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/migrations.mdqueries.mdrelationships.mdsessions.md詳細
SQLAlchemy コードレビュー
クイックリファレンス
| 問題の種類 | 参照先 |
|---|---|
| セッションのライフサイクル、コンテキストマネージャー、非同期セッション | references/sessions.md |
| relationship()、遅延読み込み、N+1、joinedload | references/relationships.md |
| select() と query() の比較、ORM のオーバーヘッド、一括操作 | references/queries.md |
| Alembic のパターン、ロールバック可能なマイグレーション、データマイグレーション | references/migrations.md |
レビューチェックリスト
- セッションでコンテキストマネージャー(
with、async with)を使用している - リクエスト間またはスレッド間でセッションを共有していない
- セッションを適切に終了・クリーンアップしている
-
relationship()で適切なlazy戦略を使用している - N+1 を避けるため、
joinedload/selectinloadを明示的に指定している - ループ内で遅延読み込みを行っていない(N+1 クエリ)
- レガシーな
query()ではなく、SQLAlchemy 2.0 のselect()構文を使用している - 一括操作では ORM のループではなく、bulk_insert/bulk_update を使用している
- 非同期セッションで適切な非同期コンテキストマネージャーを使用している
- マイグレーションが
downgrade()でロールバック可能である - データマイグレーションでは ORM モデルではなく
op.execute()を使用している - マイグレーションの依存関係が適切な順序になっている
ゲート(SQLAlchemy 固有)
SQLAlchemy 関連の各指摘について 1 回ずつ、file:line を特定できた後(review-verification-protocol を参照)、指摘を確定する前に実行します。手順の合格条件を満たさない場合は、記載どおりの指摘を断定しないでください。証拠を集める、指摘を取り下げる、重大度を下げる、または質問形式に言い換えてください。
ゲート 1 — セッションのスコープとライフサイクル
| 手順 | アクション | 合格条件 |
|---|---|---|
| 1a | セッションが作成または注入されているモジュールを(記憶に頼らず)開きます。 | Session、sessionmaker、async_session、またはセッションを生成するファクトリー/Depends() の file:line。 |
| 1b | リーク、リクエスト間の共有、またはクリーンアップ漏れを指摘する場合:セッションのスコープ(コンテキストマネージャー、try/finally、ミドルウェア)を追跡します。 | file:line の範囲で引用したスコープ範囲。確認後、スコープが正しければ指摘を取り下げます。 |
ゲート 2 — N+1、遅延読み込み、先読み込み
| 手順 | アクション | 合格条件 |
|---|---|---|
| 2a | ループまたは繰り返し呼び出される箇所(ORM 属性へのアクセス、ループ内の execute)を特定します。 | ループまたはホットパスの file:line。 |
| 2b | N+1 を指摘する場合:反復ごとに実行されるリレーションシップまたはクエリパターンを明示します。 | file:line を示したリレーションシップまたは反復ごとの SQL パターン。不明確な場合は質問形式に言い換えます。 |
ゲート 3 — マイグレーション(Alembic)
| 手順 | アクション | 合格条件 |
|---|---|---|
| 3a | リビジョンファイルを開きます(例:versions/ の下、またはプロジェクトの Alembic レイアウト内)。 | revision/upgrade/downgrade のリポジトリ相対パスと file:line。 |
| 3b | downgrade() の不具合またはリスクのあるデータマイグレーションを指摘する場合:該当する op.*/op.execute() を示します。 | 指摘する各操作について、そのファイル内のスニペットまたは行範囲を示します。示せない場合は指摘を取り下げます。 |
参照資料を読み込むタイミング
- セッションの作成/クリーンアップをレビューする場合 → sessions.md
- モデルのリレーションシップをレビューする場合 → relationships.md
- データベースクエリをレビューする場合 → queries.md
- Alembic のマイグレーションファイルをレビューする場合 → migrations.md
レビュー時の質問
- すべてのセッションがコンテキストマネージャーで適切に管理されていますか?
- N+1 クエリを避けるようにリレーションシップが設定されていますか?
- クエリで SQLAlchemy 2.0 の
select()構文を使用していますか? - すべてのマイグレーションがロールバック可能で、適切にテストされていますか?
コメント
Markdown 対応