◉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-05-04上級

Rork × Better Auth で Web/モバイル統合認証を実装する — Cookie・Deep Link・パスキーまで

Rork で作るモバイルアプリと Web 版を同一の Better Auth バックエンドに統合する実装ガイド。メールリンク・ソーシャル・パスキー・組織機能まで Cookie/Deep Link の落とし穴を全て押さえます。

Better Auth認証15React Native239CookieDeep Link3PasskeysB2B SaaS

✦ プレミアム記事

3 つの Rork アプリを運営してきて、毎回いちばん時間を吸われたのは UI でも課金実装でもなく、認証まわりでした。Web 版を Clerk にしてモバイルを Supabase Auth、Apple Sign In だけ別実装、組織機能は自前で作って、と継ぎ接ぎしているうちに、ユーザー削除のときに 4 箇所更新しないといけないコードベースが完成してしまったのです。

その反省から、最近の新規プロジェクトでは Better Auth に一本化しています。Better Auth は 2024 年後半に登場した TypeScript ファーストの認証ライブラリで、フレームワーク非依存・プラグイン式・自前 DB という思想で作られています。Clerk のような SaaS と違って自分のサーバーで動かしますが、その代わり 1 つのバックエンドで Web ブラウザ・iOS・Android すべてを同じセッションモデルで扱えるのが最大の利点です。

ここで扱うのはRork で作ったモバイルアプリ(React Native + Expo)と Next.js の管理画面を、ひとつの Better Auth サーバーに統合する手順を、私が本番で踏んだ落とし穴と一緒にまとめます。コード例はすべて、執筆時点の Better Auth 1.2 系で動作確認済みです。

なぜいま Better Auth なのか — Clerk・Supabase Auth・Auth.js との違い

最初に「なぜ Clerk や Supabase Auth ではないのか」を整理しておきます。私自身どちらも本番で使ってきたので、向き不向きの判断軸を率直に書きます。

Clerk は UI コンポーネントが完成度高く、B2B 機能(組織・招待・SSO)が箱から出してすぐ使えます。一方で MAU 課金が積み上がりやすく、無料アプリで月 5 万 MAU を超えてくると課金体系が個人開発の収益と合わなくなります。Clerk はうまく行きすぎたときに困る選択肢でもあるのです。

Supabase Auth は Postgres と密結合で安いのですが、サーバーセッションが GoTrue (JWT) ベースで Cookie 同期がモバイルでやや扱いづらい印象です。Apple Sign In や Passkeys のような OS 固有機能は自分でラップする必要があります。

Auth.js (旧 NextAuth) は Web 中心で、React Native での公式サポートが弱いです。

そこに登場した Better Auth は、上記のいいとこ取りを TypeScript で実装したような設計です。具体的には、

  • セッションは DB に保存される Cookie + Token のハイブリッド。Web は HttpOnly Cookie、モバイルは Bearer トークンとして同じ session レコードを参照する
  • 認証メソッドは プラグイン。メールパスワード・マジックリンク・ソーシャル・パスキー・OTP・2FA・組織・SSO・Stripe 連携などをコンポーザブルに足せる
  • DB アダプタは Drizzle・Prisma・Mongo・Kysely をサポート。Cloudflare D1 や Neon Postgres も Drizzle 経由で動く
  • フロントは React・Vue・Svelte・Solid・React Native に公式クライアントあり

つまり「Web でうまく動いた認証フローが、そのままモバイルでも同じ DB に書き込める」という体験を提供してくれます。私が継ぎ接ぎ運用に疲れた人向けには、これがいちばん効きます。

Better Auth が Rork アプリに合う 3 つの理由

Rork は React Native + Expo で生成されたアプリを npm publish のように Cloudflare に乗せて使う構成なので、認証バックエンドも Cloudflare 上で動かしたほうがレイテンシが揃います。Better Auth はこの構成と特に相性が良く、理由は 3 つあります。

第 1 に、Cloudflare Workers + Hono で Better Auth を素直に動かせること。betterAuth.handler は標準の Request を受け取って Response を返すだけなので、Hono ルートに app.all('/api/auth/*', c => auth.handler(c.req.raw)) と書くだけで動きます。

第 2 に、Drizzle ORM 経由で Cloudflare D1 や Neon Postgres を共有できること。Rork で作ったアプリのバックエンドにすでに Drizzle を使っているなら、認証用テーブルを既存スキーマに足すだけです。私の現プロジェクトでは Rork × Neon Postgres + Drizzle ORM 完全ガイド で組んだ DB をそのまま使い、auth-schema.ts だけ追加しました。

第 3 に、Expo の Deep Link と Cookie を両方サポートしていること。これが地味に効きます。後述しますが、Apple Sign In のリダイレクト URL を myapp://auth/callback で受けつつ、Web 版では Cookie で同じセッションを引き継ぐ、という運用が可能です。

✦

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

この記事の続きを読む

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

この記事で得られること
✦Web 版とモバイル版で別々の認証基盤を持っていて運用が辛かった人が、Rork × Better Auth で 1 つの DB と 1 つのコードベースに統合できる
✦Deep Link が Safari でだけ動かない・Cookie が iOS で保存されない・Apple Sign In のリダイレクトが切れるといった「あと一歩」で詰まるトラブルをすべて再現可能なコードで解決できる
✦個人開発でも B2B SaaS でも通用する組織(Organizations)プラグイン・パスキー・セッション同期の本番運用パターンを今日から取り入れられる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-09-10
画面を暗くする機能を足したら、アプリを閉じたあとも iPhone が暗いままでした
expo-brightness の setBrightnessAsync は、Android では現在のアクティビティにだけ効き、iOS では端末の明るさそのものを変えます。戻す責任が片側にしかない理由と、AppState で後始末をするフックの実装をまとめました。
⬡ 開発ツール2026-09-04
EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める
EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。
⬡ 開発ツール2026-09-01
expo-paste-input で画像を貼り付けられる入力欄を作り、消える file:// を documents へ逃がす
チャット入力に画像やGIFを貼り付けられるようにする expo-paste-input の実装手順です。onPaste が返す file:// は一時ファイルで、送信までの間に消えることがあります。保存先を移す実装と、実機で確かめる順番をまとめました。