◉RORK LABEN
●SDK58 — Expo SDK 58 は Beta(9/15)のまま。安定版は React Native 0.88 正式(10/12 予定)の後で、Expo Modules 2.0 もベータ扱いです●10/22 — Apple の Volume Purchasing 開始まで残り24日。複数シート購入は 9/16 から既定で有効なので、残すか外すかを先に決めておく段階です●REVIEW — 「提出直後の自動チェックで entitlement 不備と言われたが身に覚えがない」という問い。.ipa を開いて確かめ、作り直さずに通した例が出ています●NEW — 一覧画面を Opus 5.5 と GPT-6 Sol で作り比べ、effort の選び方を記録●NATIVE — Shopify の back-to-native を受けて、同じアプリを React Native とネイティブで作り実機計測した比較が公開。乗り換え判断の材料になります●CREDITS — 「AI のエラーにはクレジットを使わない」はどこまでか。同じ修正を3回頼んだ日の消費を記録して、線を引く準備をしています●SDK58 — Expo SDK 58 は Beta(9/15)のまま。安定版は React Native 0.88 正式(10/12 予定)の後で、Expo Modules 2.0 もベータ扱いです●10/22 — Apple の Volume Purchasing 開始まで残り24日。複数シート購入は 9/16 から既定で有効なので、残すか外すかを先に決めておく段階です●REVIEW — 「提出直後の自動チェックで entitlement 不備と言われたが身に覚えがない」という問い。.ipa を開いて確かめ、作り直さずに通した例が出ています●NEW — 一覧画面を Opus 5.5 と GPT-6 Sol で作り比べ、effort の選び方を記録●NATIVE — Shopify の back-to-native を受けて、同じアプリを React Native とネイティブで作り実機計測した比較が公開。乗り換え判断の材料になります●CREDITS — 「AI のエラーにはクレジットを使わない」はどこまでか。同じ修正を3回頼んだ日の消費を記録して、線を引く準備をしています
記事一覧/アプリ開発
◇ アプリ開発/2026-09-29中級

起動のたびに一瞬ログイン画面が出る expo-router アプリを、Protected routes と「まだ分からない」の三状態で組み直す

ログイン済みなのに起動直後にログイン画面が一瞬出る、ログアウトしても画面が変わらない。expo-router の Protected routes に Supabase の認証状態を「不明」込みの三つで渡し、_layout.tsx の置き場所まで含めて直した手順です。

expo-router3Supabase35認証15Protected routesRork574

✦ プレミアム記事

Rork で組んだ試作アプリに Supabase のログインを繋いだ晩、手元の iPhone で起動を何度も繰り返しておりました。ログインは済んでいるはずなのに、起動のたびにログイン画面がほんの一瞬だけ見えて、そのあとホームに切り替わるのです。

最初は気のせいだと思いました。ところが画面を録画して 1 コマずつ送ると、確かにログイン画面が描かれてから消えていました。ログアウトを押しても画面が変わらず、アプリを閉じて開き直すとようやくログイン画面になる、という別の症状も一緒に出ていたのです。

同じ症状は expo/expo の Issue #37305 に集まっています。2025 年 6 月に立ったまま開いていて、コメントは 26 件——黒い画面のまま止まる方、ログアウト後に画面が更新されない方、ドキュメントどおりに写したのに動かないと書く方が並んでおります。

最初にお伝えしたいのは、Protected routes そのものは壊れていない、という一点です。壊れていたのは私の側で、ログインしているかどうかを「はい」と「いいえ」の二つだけで持っていたことが原因でした。そう気づいたのは、録画を 1 コマずつ送り終えたあとでした。現実には三つ目の「まだ分からない」があり、起動直後はほぼ必ずそこにいるのです。

二値の guard に、三値の現実を押し込んでいました

Stack.Protected の guard は真偽値を受け取ります。ログイン済みなら true、そうでなければ false——それ自体は正しい設計です。

問題は、起動直後の「セッションをまだ読めていない」状態を、私が false に丸めていたことでした。session が null のあいだは未ログイン扱いになり、ログイン画面が描かれます。数百ミリ秒後にセッションが読み終わると guard が反転し、ホームへ切り替わるのです。

実際の状態二値のときの guard描かれる画面三値にしたときの扱い
まだ読めていないfalse(null を丸める)ログイン画面が一瞬どちらも描かない
未ログインfalseログイン画面ログイン画面
ログイン済みtrueホームホーム

壁紙アプリで、広告非表示を購入済みの検証端末に起動直後だけ広告が一度出る件を直したときと、まったく同じ構図でした。購入状態を読み終える前に「未購入」として扱っていたのが原因で、「まだ分からない」を作った瞬間に消えたのです。個人開発で何度も踏んできた穴なのに、認証でもう一度踏みました。Issue の長さを見るかぎり、私だけの癖ではないのかもしれません。

判定できないあいだは、どちらの画面も出しません。 今回の修正は、この一文に尽きます。

用意するもの

部品条件備考
Rork で生成した Expo プロジェクトexpo-router 5 以降(SDK 53 以降)Protected routes は SDK 53 で入りました
@supabase/supabase-js2 系Rork の「Connect Supabase」で入る版で十分です
expo-splash-screen同梱「不明」のあいだスプラッシュを保つために使います
実機か Expo GoiOS・Android どちらか 1 台録画できる端末だと確認が楽です

Rork の「Connect Supabase」で繋いだプロジェクトには、lib/supabase.ts のようなクライアントが既にあります。ストレージアダプタも含めてそのまま使い、認証状態の持ち方だけを差し替えます。

✦

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

この記事の続きを読む

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

この記事で得られること
✦起動直後にログイン画面が一瞬出る原因を、自分の _layout.tsx が guard に渡している値から特定できるようになります
✦認証状態を「不明・未ログイン・ログイン済み」の三つで持つ AuthProvider を、Supabase と expo-router で今日から動く形で手元に持てます
✦Issue に 26 件のコメントが並ぶ黒画面と「ログアウトしても画面が変わらない」を、グループごとの _layout.tsx とガードの平坦化で先回りして防げるようになります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◇ アプリ開発2026-07-05
ワンタイムコードの入力欄をExpoで作る — SMS自動入力とセグメント表示を両立させる
6桁の確認コードを入れる画面は、見た目こそ単純ですが、SMSの自動入力・貼り付け・1文字ずつの削除まで含めると意外と作り込みが必要です。iOSとAndroidの自動入力を最初に押さえ、単一のTextInputで崩れにくいセグメント表示を組む実装をまとめました。
◇ アプリ開発2026-06-24
Next.js × Supabase で必ず向き合う3つの実装 — RLS・状態管理・リアルタイム更新
Webアプリの土台を組んだ先で必ず詰まる3つ、DBのアクセス制御(RLS)・画面の状態管理・リアルタイム更新を、Next.jsとSupabaseのコードを交えて実装レベルで解説します。購読の解除忘れによるメモリリークや、認証とRLSの連動といった、本番でハマる落とし穴まで。
⬡ 開発ツール2026-03-25
Rork × Supabase 認証&リアルタイム機能実装ガイド — ノーコードでバックエンドを構築する方法
RorkとSupabaseを組み合わせ、コードをほとんど書かずに認証とリアルタイムデータ同期を実装する手順です。プロジェクトのセットアップからユーザー登録・ログインの実装、リアルタイムチャットへの応用まで、ステップバイステップで丁寧に解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます