◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SONNET 4.5 — Claude API での提供終了は 11/30、残り27日。API 連携を足したアプリは移行先の確認を●SDK 58 — React Native 0.88 に更新されました。Android のリリース版で R8 が既定オンになり、iOS は SceneDelegate を生成します●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SONNET 4.5 — Claude API での提供終了は 11/30、残り27日。API 連携を足したアプリは移行先の確認を●SDK 58 — React Native 0.88 に更新されました。Android のリリース版で R8 が既定オンになり、iOS は SceneDelegate を生成します●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-06-20上級

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

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

Rork611React Native242Expo234ページネーション無限スクロールFlatList10状態設計

✦ プレミアム記事

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-09-04
EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める
EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。
⬡ 開発ツール2026-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
⬡ 開発ツール2026-07-30
Renovate が触ってよい依存と、触ってはいけない依存 — Expo SDK 57 の123パッケージを機械的に切り分ける
Rork 生成アプリに依存の自動更新を入れると、Expo が版を管理している123パッケージまで巻き込まれます。2026年7月30日時点の実測では、うち6件が npm の最新版へメジャー更新される差でした。除外リストを手で書かず SDK から機械生成する手順をまとめます。