Source: DEV Community
はじめに 「OFFSET/LIMITページネーションが1000ページ目あたりから遅い」「ページ表示中に新データが追加されて同じ投稿が2回出た」——カーソルベースページネーションで大量データを高速に、かつ安定してページングする設計をClaude Codeに生成させる。 CLAUDE.mdにカーソルページネーション設計ルールを書く ## カーソルページネーション設計ルール ### カーソルの設計 - カーソル = ソートキーの値をBase64エンコードしたもの - 複合ソート(created_at DESC, id DESC)で安定したページングを保証 - カーソルは不透明(クライアントはparse不要、そのまま次のリクエストに使う) ### クエリの効率化 - WHERE created_at < cursor_created_at OR (created_at = cursor_created_at AND id < cursor_id) - id列にインデックスがあれば高速(OFFSET/LIMITと違いフルスキャン不要) - 最後のページかどうかはlimit+1件取得して判定 ### API設計 - レスポンス: { data: [...], nextCursor: string | null, hasMore: boolean } - nextCursorがnullで全データ取得完了 - prevCursorは持たない(戻るはfirstPageに戻す設計を推奨) カーソルページネーション実装の生成 カーソルベースページネーションを設計してください。 要件: - 複合ソートキーによる安定ページング - Base64カーソルエンコード - 双方向ページング - GraphQL/REST両対応 生成ファイル: src/pagination/ 生成されるカーソルページネーション実装 // src/pagination/cursorPagination.ts — カーソルページネーションエンジン export interface PageInfo { hasNextPage: boolean; hasPreviousPage: boolean; startCursor: string | null; endCursor: string | null; } e