◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●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)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-04-24上級

Rork に Convex を組み合わせて型安全なリアクティブバックエンドを作る

Rork が生成する React Native アプリに Convex を組み込んで、リアクティブ購読・型安全なクエリ・ファイル処理・Cron ジョブまでを一本化する実装ガイド。本番でのハマりどころも網羅しました。

Rork585ConvexReact Native239バックエンド11リアクティブ

✦ プレミアム記事

Rork でアプリの画面まわりはあっという間に組めるのに、バックエンド選定で一晩悩んだ経験はないでしょうか。Firebase と Supabase、どちらも強力ですが、「Rork が生成する TypeScript コードの型安全性」と「リアルタイム性」を両立させようとすると、クライアント側のコードがじわじわと膨らんでいきます。

私自身、壁紙アプリや癒し系アプリを個人で運用していて、ユーザー同士の小さなインタラクション(お気に入り・スタンプ・コメント)を足すたびに、「もうリアルタイム DB にした方が早いのでは」と感じてきました。最近ようやく腑に落ちたのが Convex です。リアクティブな購読・自動生成される型・サーバーレス関数が1つの API にまとまっていて、Rork が吐き出すコードとの相性がとにかく良いんです。

この記事は、Rork 生成アプリに Convex を組み込んで、バックエンドを1段階賢くするまでの実装手順をまとめたものです。初回セットアップから、リアクティブ購読、ファイルアップロード、認証、スケジュール実行、本番で遭遇したハマりどころまで、動くコードで追いかけていきます。

Rork 生成アプリに Convex が刺さる5つの理由

Convex を選ぶ理由は「リアルタイム DB が欲しい」だけではありません。Rork が自動生成する TypeScript コードベースとの統合観点から並べ直すと、以下の5点に集約されます。

第一に、スキーマ → サーバー関数 → クライアント関数の型が全部つながることです。convex/schema.ts を書き換えると、useQuery の戻り値の型まで自動的に更新されます。Rork が tsconfig.json を strict で生成するため、Supabase のような「手動で型ファイルを生成する運用」より相性が良いです。

第二に、リアクティブ購読がデフォルトです。useQuery はそのまま使うだけで自動再購読してくれます。Firebase Firestore や Supabase Realtime だと明示的にチャネルを購読・解除する実装が必要で、画面遷移時のメモリリーク対策が地味に面倒です。

第三に、楽観的更新が1行で書けます。useMutation(api.tasks.toggle).withOptimisticUpdate(...) の形で、UI 即応性と整合性を両立できます。個人開発者には正直ありがたい設計です。

第四に、ファイルストレージと関数が同じプロジェクトに同居します。S3 + Lambda のような別サービス連携を組まずに、ctx.storage.generateUploadUrl() でアップロード URL を発行して返すだけ。これは Rork のプロンプト指示にもそのまま乗せられます。

第五に、Clerk との統合が公式にサポートされていること。Rork + Clerk のソーシャルログイン を使っているなら、Convex はその認証情報をそのまま関数内で ctx.auth.getUserIdentity() として受け取れます。

プロジェクトへのセットアップ

Rork で生成したプロジェクトに Convex を入れる手順は、思っているより簡単です。ターミナルで以下のコマンドを実行します。

# 既存の Rork プロジェクトのルートで実行
npx convex dev
# 初回は Convex アカウントのログイン、プロジェクト作成が走ります
# 完了すると convex/ ディレクトリと .env.local に NEXT_PUBLIC_CONVEX_URL が追記されます
 
npm install convex

次に、React Native アプリ全体を ConvexProvider でラップします。Expo Router を使っている Rork 生成プロジェクトなら、app/_layout.tsx に組み込むのが自然です。

// app/_layout.tsx(抜粋)
import { ConvexProvider, ConvexReactClient } from "convex/react";
import { Stack } from "expo-router";
 
// 環境変数は app.json の extra 経由で読むか、EXPO_PUBLIC_ プレフィックスを使います
const convex = new ConvexReactClient(process.env.EXPO_PUBLIC_CONVEX_URL!, {
  unsavedChangesWarning: false, // React Native では不要なので無効化
});
 
export default function RootLayout() {
  return (
    <ConvexProvider client={convex}>
      <Stack screenOptions={{ headerShown: false }} />
    </ConvexProvider>
  );
}

ここで unsavedChangesWarning: false を入れているのが、地味に重要です。Web の離脱警告を前提にしたデフォルト挙動が React Native 環境で警告を吐くので、最初に止めておきます。

✦

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

この記事の続きを読む

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

この記事で得られること
✦Firebase と Supabase の選定で止まっていた開発者が、Rork で動く型安全なリアクティブバックエンドを今日手に入れられる
✦スキーマ定義から購読・ファイルアップロード・Cron ジョブまで、コピー&ペーストで使える実装パターンを習得できる
✦本番で起きがちなレート制限・冪等性・スキーマ変更のハマりどころを事前に回避できる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-09-04
EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める
EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。
⬡ 開発ツール2026-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
⬡ 開発ツール2026-08-14
Expo SDK 57 に上げる前に、prebuild で消えるネイティブ変更を洗い出す
Expo SDK 57 では expo prebuild が既定で ios と android を消してから再生成します。手編集を上げる前に洗い出す方法、config plugin への移し替え、57.0.9 で解消したメモリ回帰までを実務の順序でまとめました。