RORK LABEN
NATIVE — Rork Max では AR / LiDAR スキャン、Metal を使った 3D、Dynamic Island、Siri Intents、HealthKit、NFC、App Clips、Core ML まで届きますIOS27 — iOS 27 Developer Beta 4 で Siri AI の対象が iPhone 15 Pro / 15 Pro Max・16 シリーズ・17 系へ広がり、応答が初期ベータより明確に速くなりましたDESIGN — iOS・iPadOS・macOS 27 向けの Apple 純正デザインキットが Figma と Sketch 向けに公開されました。新 OS の UI を組む段階で参照できますCANARY — Android 17(Cinnamon Bun)は従来の Developer Preview を廃し、継続更新される Canary ビルドへ移行しました。検証のタイミング設計が変わりますSPARK — Android 17 の Gemini Spark は、アプリを直接操作して配車の予約や注文といった複合的な作業を自動化しますSCALE — Rork は a16z から $2.8M を調達し、月間訪問は74万件規模まで伸びていますNATIVE — Rork Max では AR / LiDAR スキャン、Metal を使った 3D、Dynamic Island、Siri Intents、HealthKit、NFC、App Clips、Core ML まで届きますIOS27 — iOS 27 Developer Beta 4 で Siri AI の対象が iPhone 15 Pro / 15 Pro Max・16 シリーズ・17 系へ広がり、応答が初期ベータより明確に速くなりましたDESIGN — iOS・iPadOS・macOS 27 向けの Apple 純正デザインキットが Figma と Sketch 向けに公開されました。新 OS の UI を組む段階で参照できますCANARY — Android 17(Cinnamon Bun)は従来の Developer Preview を廃し、継続更新される Canary ビルドへ移行しました。検証のタイミング設計が変わりますSPARK — Android 17 の Gemini Spark は、アプリを直接操作して配車の予約や注文といった複合的な作業を自動化しますSCALE — Rork は a16z から $2.8M を調達し、月間訪問は74万件規模まで伸びています
記事一覧/開発ツール
開発ツール/2026-06-20上級

Rork の一覧が増えるほどスクロールで重複と欠落が出る——カーソルページネーションと再取得の状態設計

Rork が生成する素朴な offset ページネーションは、リストが更新されるたびに重複や欠落を起こします。カーソル方式の契約設計、取得状態を一つに束ねる usePaginatedList フック、失敗時の指数バックオフ再試行まで、本番運用で詰まらない一覧の作り方を実装中心に解説します。

Rork525React Native218Expo156ページネーション2無限スクロールFlatList9状態設計

プレミアム記事

50件で快適だった一覧が、3,000件で崩れ始めた

個人開発で運用している一覧画面が、データが増えるにつれて少しずつおかしくなっていきました。最初の数十件のうちは何の問題もありません。ところが投稿が数千件を超えたあたりから、スクロールの途中で同じカードが二度現れたり、逆に数件が抜け落ちたり、末尾で永遠にスピナーが回り続けたりするようになりました。

原因を追っていくと、Rork が最初に組み上げてくれた素朴なページネーションに行き着きました。「ページ番号で何件目から何件取る」という、いわゆる offset 方式です。プロトタイプの段階では完璧に動きます。けれども一覧が動き続ける——新しい投稿が増え、古い投稿が消える——本番では、この方式は静かに破綻します。

ここでは、その破綻がなぜ起きるのかを腑に落としたうえで、カーソル方式への置き換えと、取得まわりの状態をひとつに束ねる設計を、実際のコードで組み立てていきます。私自身、個人開発の複数のアプリで同じ壁に順番にぶつかってきました。AI に下地を作ってもらった一覧を、長く運用に耐える形へ詰め直すための実装メモです。


offset 方式はなぜ「動いているのに壊れる」のか

offset 方式は「何件目から(offset)何件(limit)」という指定でデータを切り出します。1ページ目は offset=0, limit=20、2ページ目は offset=20, limit=20、という具合です。

問題は、この offset が「順位」を指している点にあります。ユーザーが1ページ目を読んでいる数秒のあいだに、リストの先頭へ新しい1件が挿入されたとします。すると全体が1つ後ろへずれ、本来2ページ目の先頭に来るはずだった item は、すでに1ページ目の末尾で表示済みの item と同じものになります。これが重複の正体です。逆に先頭の item が削除されれば、全体が1つ前へ詰まり、1件が読み飛ばされます。

観点offset 方式カーソル方式
位置の指定順位(何件目)境界の値(このidより後)
取得中にリストが変化重複・欠落が発生する境界が固定されるため安定
深いページの性能offset が大きいほど遅くなりやすい索引で一定に保ちやすい
「前のページ」への移動容易双方向カーソルが必要
無限スクロール適性低い高い

無限スクロールのように「先へ先へと読み進める」用途では、順位ではなく「どこまで読んだか」という境界そのものを持ち回るほうが理にかなっています。これがカーソル方式です。


ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
offset 方式が破綻する理由を理解し、リスト更新中でも重複と欠落が起きないカーソルページネーションの契約を設計できる
取得・追加取得・再読込・エラー・終端を一つの状態機械として束ねる usePaginatedList フックを実装できる
ページ取得失敗時の指数バックオフ再試行と重複排除によるキー安定化まで、本番で必要な実装を一通り習得できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-05-22
FlatList の onEndReached が連続発火して API を叩きすぎる問題の原因と対処
FlatList の onEndReached が画面遷移時や初期描画時に何度も呼ばれて、ページネーション API を多重に叩いてしまう問題。Rork で生成したリスト画面でも頻発するこの挙動の原因と、実運用で使える対処パターンを整理しました。
開発ツール2026-07-30
Renovate が触ってよい依存と、触ってはいけない依存 — Expo SDK 57 の123パッケージを機械的に切り分ける
Rork 生成アプリに依存の自動更新を入れると、Expo が版を管理している123パッケージまで巻き込まれます。2026年7月30日時点の実測では、うち6件が npm の最新版へメジャー更新される差でした。除外リストを手で書かず SDK から機械生成する手順をまとめます。
開発ツール2026-07-28
prebuild --clean で消える手入れを、上げる前に数える — Expo SDK 57 移行の棚卸し
Expo SDK 57 への移行前に、ios/ へ加えた手入れが prebuild の再生成でいくつ失われるかを数える手順をまとめました。素の差分649行のうち意味を持つのは3行。ノイズを正規化して実質的な変更だけを抽出するスクリプトと、config plugin への移し替えを実測つきで共有します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →