Communitygithub.com

Cursorデータアクセススキル(N+1問題対策)

本番データアクセスにおけるN+1クエリ問題への対処法。コードがループ内でデータベースにクエリを発行している場合、ORMが行ごとに関連を遅延ロードしている場合、あるいはリストエンドポイントが5行では速くて50行では遅い場合に使用します。

Cursorデータアクセススキル(N+1問題対策) とは?

このスキルは、開発者がコードベースでN+1クエリ問題を特定し、修正するための実践的なプレイブックです。主にPython(Django ORM、SQLAlchemy)、Ruby on Rails(ActiveRecord)、.NET(Entity Framework)などのORMを使ったアプリケーションで発生するパフォーマンス問題に焦点を当てています。ルール`03`は「N+1禁止、ホットパスでの`SELECT *`禁止、クエリはインデックス利用、大規模リストはページネーション」を定めています。このスキルでは、そのルールがORMやループによってラウンドトリップが隠蔽されることでどのように破られるかを示します。具体的には、親リストのN行に対して同じリレーションのクエリがN回発行される問題や、`eager loading`の欠如、ページネーションと結合の衝突などを検出・修正します。使用前に`references/bad-vs-good.md`を参照し、実際の修正例を学ぶことを推奨します。このスキルはCursor、Claude Code、CodexなどのAIエージェントで利用可能で、マークダウンドキュメントとして提供されます。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/backupcompany/skill-cursor/tree/HEAD/skills/data-access

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

データアクセス

ルール03が基本です:N+1禁止、ホットパスでのSELECT *禁止、クエリはインデックスを利用、大規模リストはページネーション。このスキルは、ORMやループによってラウンドトリップが隠蔽され、そのルールがどのように破られるかを示します。

コレクションからリレーションをロードする前、マッピングを eager に設定する前、または1対多リレーションをページネーション付きリストに結合する前に、references/bad-vs-good.md を読んでください。

完了条件

  • N個の親リストに対して、同じリレーションのクエリがN回発行されていない。
  • クエリログまたはトレースで、固定された数のステートメント(1または2、あるいは1 + N/バッチサイズ)が表示され、行ごとではない。
  • 親の1ページが要求した数の親を返し、結合された行のページではない。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

関連スキル