RORK LABEN
MAX — Rork Maxが全Appleプラットフォーム向けのネイティブSwiftを生成。iPhoneからVision Proまで対応しますPUBLISH — Xcodeを使わず2クリックでApp Storeへ公開でき、Macのハードウェアを介さずiOS配布まで届きますNATIVE — 通常のRorkはReact Native(Expo)でネイティブiOS/Androidを生成し、モバイルに特化していますPROMPT — プレーンな英語でアプリの構想を書くと、ストアへ配布できる動くコードが生成されますFUND — Rorkはa16zから$2.8Mを調達し、月間743,000訪問・成長率85%と報じられていますPRICE — 無料で開始でき、有料プランは月$25から。ただしクレジット消費が多いとの利用者の声もありますMAX — Rork Maxが全Appleプラットフォーム向けのネイティブSwiftを生成。iPhoneからVision Proまで対応しますPUBLISH — Xcodeを使わず2クリックでApp Storeへ公開でき、Macのハードウェアを介さずiOS配布まで届きますNATIVE — 通常のRorkはReact Native(Expo)でネイティブiOS/Androidを生成し、モバイルに特化していますPROMPT — プレーンな英語でアプリの構想を書くと、ストアへ配布できる動くコードが生成されますFUND — Rorkはa16zから$2.8Mを調達し、月間743,000訪問・成長率85%と報じられていますPRICE — 無料で開始でき、有料プランは月$25から。ただしクレジット消費が多いとの利用者の声もあります
記事一覧/開発ツール
開発ツール/2026-06-20上級

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

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

Rork426React Native170Expo88ページネーション2無限スクロールFlatList8状態設計

プレミアム記事

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-06-20
Rork が直せるバグと自分で直すバグを見分ける — エクスポートコードのトリアージ手順
Rork が自力で直すバグと、エクスポートしたReact Native/Expoコードを自分で手当てすべきバグを切り分けるトリアージ手順を、動くコードとともに整理しました。
開発ツール2026-06-19
Rork で作ったリストのスクロールが重い — 画像キャッシュとプリフェッチの設計
Rork が生成した FlatList は画像が増えるとスクロールがカクつきます。expo-image のキャッシュ、recyclingKey、プリフェッチ、FlashList への移行を実機の数値とともに整理し、滑らかさを取り戻すまでの設計を残しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →