RORK LABEN
MAX — Rork Maxが全Appleプラットフォーム向けのネイティブSwiftを生成。iPhoneからVision Proまで対応しますNATIVE — AR/LiDAR・Metalの3D・Dynamic Island・Live Activities・HealthKitなどネイティブ機能に踏み込めますPUBLISH — 2クリックでApp Storeへ公開できます。Rork Maxは月$200ですEXPO — 通常のRorkはReact Native(Expo)でiOS/Androidを同時生成し、無料から始められますPROMPT — プレーンな英語でアプリの構想を書くと、ストアへ配布できる動くコードが生成されますPRICE — 無印Rorkの有料プランは月$25から。まず無印で作り、ネイティブ機能が要る段でMaxを検討できますMAX — Rork Maxが全Appleプラットフォーム向けのネイティブSwiftを生成。iPhoneからVision Proまで対応しますNATIVE — AR/LiDAR・Metalの3D・Dynamic Island・Live Activities・HealthKitなどネイティブ機能に踏み込めますPUBLISH — 2クリックでApp Storeへ公開できます。Rork Maxは月$200ですEXPO — 通常のRorkはReact Native(Expo)でiOS/Androidを同時生成し、無料から始められますPROMPT — プレーンな英語でアプリの構想を書くと、ストアへ配布できる動くコードが生成されますPRICE — 無印Rorkの有料プランは月$25から。まず無印で作り、ネイティブ機能が要る段でMaxを検討できます
記事一覧/開発ツール
開発ツール/2026-06-21上級

Rork のお気に入り一覧を長押しドラッグで並べ替える — 再レンダリングを抑えた reorderable list と並び順の永続化

Rork が生成したお気に入り一覧に、長押しドラッグの並べ替えを後から足す実装手順です。再レンダリングを抑える設計、worklet の境界、並び順の永続化、ジャンクやゴーストカードの回避までを実コードでまとめました。

Rork430React Native172Reanimated8ドラッグ並べ替え状態管理9

プレミアム記事

お気に入りに登録した順番を、ユーザーが自分の手で入れ替えたい——この要望は、一覧画面を持つアプリならほぼ必ず出てきます。私自身、個人開発で運用している壁紙アプリでも「気に入った壁紙をよく使う順に並べ替えたい」という声が一定数あり、お気に入り機能を足した直後から要望が来ました。

ところが Rork に「お気に入りをドラッグで並べ替えられるようにして」と頼むと、見た目は動くものの、実機で触ると指に追従せずカクついたり、離した瞬間に元の順番へ戻ったりすることがあります。生成されたコードは FlatList の上に手書きの PanResponder を載せただけ、という構成になりがちで、ここがつまずきの入口です。

前置きは抜きにして、実際に詰まる箇所から順に直していきます。題材は React Native(Expo)版の Rork が出力するコードですが、考え方は Rork Max の SwiftUI 出力で List.onMove を足す場合にもそのまま応用できます。

ドラッグ並べ替えで詰まる3つの壁

長押しドラッグの並べ替えは、一見すると「指の位置にカードを動かすだけ」ですが、実装すると次の3つが同時に襲ってきます。

壁1: フレーム落ち

ひとつ目は、フレーム落ちです。指の移動に合わせて毎フレーム再レンダリングが走ると、JavaScript スレッドが詰まってカードが遅れて付いてきます。60fps を保つには、ドラッグ中の移動を JS スレッドではなく UI スレッド(worklet)で処理する必要があります。

壁2: 状態の二重管理

ふたつ目は、状態の二重管理です。ドラッグ中の「見た目の順番」と、確定後に保存する「データの順番」を別々に持つと、離した瞬間に片方へ寄せる処理が必要になります。ここをいい加減にすると、指を離したときに順番が巻き戻る不具合が出ます。

壁3: スクロールとの競合

みっつ目は、スクロールとの競合です。縦に並ぶ一覧では、ドラッグと縦スクロールがどちらも上下方向のジェスチャーなので、どちらを優先するか決めないとスクロールが効かなくなったり、逆にドラッグが始まらなくなったりします。

この3つは本番運用に入ってから端末差で表面化しやすく、自前の PanResponder で全部捌こうとすると、コード量が膨らむうえに端末差で壊れます。各壁の対処は後半で具体的に手当てしていきます。私はここを手書きで通そうとして数時間溶かした経験があり、個人的には実績のあるライブラリに任せるのを推奨します。個人開発では、これが一番堅い判断だと考えています。

ライブラリ選定 — draggable-flatlist という現実解

並べ替え可能なリストの選択肢は、大きく分けて3つあります。それぞれの向き不向きを整理します。

選択肢強み注意点
自前 PanResponder依存ゼロ・完全に制御できるworklet 化・スクロール競合・端末差を全部自分で背負う
react-native-draggable-flatlistReanimated/Gesture Handler ベースで滑らか・実装が短い内部が FlatList なので大量データは別途最適化が要る
FlashList + 手組み巨大リストの描画が速い並べ替えのジェスチャー層は自分で書く必要がある

お気に入りのように「数十件、多くても数百件」の一覧であれば、react-native-draggable-flatlist が最短かつ最も安定します。内部で react-native-reanimatedreact-native-gesture-handler を使っており、ドラッグ中の移動を worklet で処理してくれるので、フレーム落ちの壁を自分で越えなくて済みます。

Expo 管理下の Rork プロジェクトに足す場合は、Expo と互換のバージョンを入れるのが安全です。

# Expo プロジェクトに導入(reanimated と gesture-handler は Expo 互換版を入れる)
npx expo install react-native-reanimated react-native-gesture-handler
npm install react-native-draggable-flatlist

react-native-reanimated を入れたら、babel.config.js のプラグイン末尾に Reanimated のプラグインを置くのを忘れないでください。これが抜けていると worklet が動かず、ドラッグ自体が無反応になります。

// babel.config.js — reanimated のプラグインは必ず配列の最後に置く
module.exports = function (api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
    plugins: ['react-native-reanimated/plugin'], // ← 最後であることが必須
  };
};

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

この記事の続きを読む

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

この記事で得られること
Rork 生成のお気に入り一覧でドラッグ並べ替えが効かず諦めていた人が、長押しで滑らかに動く実装を今日手に入れられる
並べ替え中にカクつく・順番が戻る・スクロールと喧嘩する、という典型的な3つの不具合を切り分けて直せるようになる
並び順を端末に保存して再起動後も保つ永続化の型を、最小構成で自分のアプリに組み込める
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-05-13
RorkアプリでZustand v5を導入したら、Context APIで詰まっていた再レンダリング問題が解消した話
RorkアプリでContext APIを使い続けたら再レンダリングが多発。Zustand v5への移行で解決した経緯と、v4からの変更点・実践的な実装パターンを紹介します。
開発ツール2026-04-30
RorkアプリのTextInputで文字が消える・カーソルが飛ぶ問題を3パターンで直す
Rorkで生成したアプリのTextInputで、入力中に文字が消えたりカーソルが文末に飛んだりする問題を、再レンダリング・親stateの遅延・onChangeText変換の3パターンで切り分けて直す方法を解説します。
開発ツール2026-04-29
Rork アプリに Bottom Sheet を組み込む実践ガイド — @gorhom/bottom-sheet で iOS と Android の操作感を揃える
Rork が生成する Modal は便利ですが、複数のスナップポイントや慣性スクロールが必要になった瞬間に物足りなくなります。@gorhom/bottom-sheet を後から差し込む実装手順、キーボード対応、iOS/Android の差分対処までを実例で解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →