Rork で「ログイン機能付きのアプリを作って」と頼んだ直後、生成されたコードに process.env.EXPO_PUBLIC_RORK_AUTH_URL のような見慣れない環境変数が含まれていて、ここに何を入れたらよいのか手が止まる。これは私自身も最初の数本で経験した、Rork 生成アプリならではのつまずきポイントです。
問題は値が分からないことそのものではありません。空欄のままビルドが通ってしまうことが本当の落とし穴です。Expo の EXPO_PUBLIC_* 系の環境変数は値が未定義でも undefined としてアプリに埋め込まれるため、Rork のプレビュー上では普通に動いて見えてしまい、その状態のまま EAS Build → TestFlight に進めてから「ログインだけ動かない」と気付きます。
ここではRork が生成したコードに現れる認証URL系の EXPO_PUBLIC_ 変数を、開発・プレビュー・本番のどこに何を設定すべきかを順を追って整理します。私が30本ほどのアプリを Rork で公開していく中で固まった、再現性のある設定手順です。
なぜ Rork は認証URLを環境変数として生成するのか
Rork の AI は認証フローを書くとき、API のエンドポイントをコードに直接埋め込まず、EXPO_PUBLIC_* で外から差し替えられる形にして出してきます。理由は単純で、認証バックエンドはユーザーごとに違うからです。Supabase を使う人、Firebase を使う人、自前の Hono サーバーを Cloudflare Workers に乗せている人、それぞれで URL が変わります。
Rork は「あなたが後で差し替えてください」という意図で EXPO_PUBLIC_RORK_AUTH_URL のようなプレースホルダーを置いているわけです。ここを差し替え忘れたまま進むと、生成されたクライアントコードは存在しないドメインに POST し続け、ネットワークエラーが返るだけの状態になります。
ちなみに EXPO_PUBLIC_ プレフィックス自体は Expo の標準仕様で、これが付いた変数はクライアントバンドルに埋め込まれて公開されます。Auth エンドポイントの URL は公開してよい情報なのでこれで問題ありませんが、API の シークレットキーには絶対に EXPO_PUBLIC_ を付けないことだけ覚えておいてください。
値として何を入れるべきか — 3つの典型パターン
私が実装してきた範囲では、Rork 生成アプリの認証URLは大きく3つのパターンに分かれます。プロジェクトの構成に合わせてどれかを選びます。
パターンA: Supabase Auth を使う場合
最も手間が少なく、個人開発者には私もこのアプローチを薦めています。Supabase プロジェクトの URL をそのまま指定します。
# .env
EXPO_PUBLIC_RORK_AUTH_URL=https://your-project-id.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEYただし、Rork が生成したコードが /auth/v1/token のようなパスを内部で組み立てている場合は、ベースURL(プロジェクトURL)だけを入れる形になります。生成コードを開いて、fetch(\${process.env.EXPO_PUBLIC_RORK_AUTH_URL}/auth/v1/token...`)` のように書かれていればベースURLでOKです。
パターンB: Firebase Auth を使う場合
Firebase の場合は通常 SDK を直接使うため、Auth URL を環境変数で渡すケースは少なめです。Rork が生成した認証コードが Firebase SDK ベースなら、EXPO_PUBLIC_RORK_AUTH_URL ではなく EXPO_PUBLIC_FIREBASE_* 系の値(API Key・projectId 等)を埋める形に置き換えるのが正解です。生成コードを一度精査することをお勧めします。
パターンC: 自前のバックエンドを使う場合
Hono / Express / tRPC などで認証エンドポイントを自分で運用している場合は、デプロイ済みのドメインを入れます。
# .env (開発)
EXPO_PUBLIC_RORK_AUTH_URL=http://localhost:8787
# .env.production (本番)
EXPO_PUBLIC_RORK_AUTH_URL=https://api.your-app.com実機テストで localhost が機能しないとき(同じLAN内なのに繋がらない)の対処は、開発機のLAN内IPに置き換えるか、ngrok で一時的に外部公開するのが定番です。
開発環境(.env)の設定で詰まりやすい点
.env ファイルを作ったのに値が反映されない、というのは Rork 生成アプリでもっとも頻繁に来る相談です。原因はほぼ以下のどれかです。
第一に、Metro バンドラの再起動が必要です。.env を編集しても、起動中の npx expo start には反映されません。Ctrl+C で止めて npx expo start -c でキャッシュごと再起動してください。-c フラグを忘れると、変数の追加だけは反映されても変更が反映されないことがあります。
第二に、ファイル名は完全に .env であって、.env.txt や env ではないこと。macOS の Finder で作ると .txt が付いてしまうことがあります。ターミナルで ls -la | grep env で確認するのが確実です。
第三に、process.env.EXPO_PUBLIC_RORK_AUTH_URL の綴りミス。Rork の生成コードでは大文字スネークケースですが、自分で書き足すときに小文字や別名にしてしまうとサイレントに undefined が入ります。
環境変数まわりのトラブルは類型化できるので、別の症状で詰まったときは Rorkアプリの環境変数が読み込めない原因と解決法 も合わせて読むと診断が早くなります。
EAS Build と本番環境での設定
.env は Rork のプレビューや npx expo start のローカル開発でしか効きません。EAS Build で本番ビルドを作るときは、別途 EAS Secrets に登録する必要があります。
# 本番用シークレットを登録
eas secret:create --scope project \
--name EXPO_PUBLIC_RORK_AUTH_URL \
--value "https://api.your-app.com" \
--type string
# 確認
eas secret:listeas.json の production プロファイルでこのシークレットを参照する設定になっていれば、ビルド時に自動で埋め込まれます。注意点として、EXPO_PUBLIC_* で始まる変数はクライアントバンドルに焼き込まれるため、ビルドごとに値を変えても、配布済みアプリの値は更新されません。本番URLを後から変えるなら、新しいビルドを出す必要があります。
私はステージング用と本番用で EXPO_PUBLIC_RORK_AUTH_URL を分けるために、eas.json のプロファイルごとに env を切り替える運用にしています。CI まわりは Rork EAS Build CI/CD パイプライン構築ガイド で詳しく扱っているので、自動化したい方は参考にしてください。
URL を間違えたときに起きる典型的な症状
設定が間違っているときの症状をまとめておきます。コンソールに出るエラーから逆算すると診断が早いです。
Network request failed がログイン時に出る場合、URL が空欄か到達不能なドメインです。console.log(process.env.EXPO_PUBLIC_RORK_AUTH_URL) を一時的に挿入して値を確認してください。
CORS error がブラウザ実機で出る場合は、URL自体は届いているがバックエンド側の CORS 設定で拒否されています。Supabase なら大半は許可されているので、自前バックエンドのケースが大半です。
401 Unauthorized が返る場合は URL は正しく、認証情報側の問題です。EXPO_PUBLIC_SUPABASE_ANON_KEY のような併用変数のほうが間違っていることがほとんどなので、そちらも確認してください。Supabase 認証の典型的なエラーパターンは Rork × Firebase / Supabase 認証エラー対処 にまとめています。
実機からだけ繋がらない場合は、開発機の localhost を実機が解決できていないだけのことが多いです。LAN内のIP(例: 192.168.1.10)に置き換えれば動きます。
次にやること
ここまで読んでいただいた方に、まず一つだけお願いしたいのは、今動いているアプリの .env を開いて EXPO_PUBLIC_RORK_AUTH_URL の行を声に出して読んでみることです。プレースホルダーのままになっていたり、https:// が抜けていたり、開発用URLのままだったり、目視で見つかる事故が一番多いところです。
そのうえで、もし Supabase での認証実装をこれから作るなら Rork × Supabase 認証 + リアルタイム実装ガイド が次に読む記事として相性が良いです。生成されたコードのテンプレと実運用の配線をつなぐ手順を順に追っています。
Rork が出してくる環境変数は単なる「埋めろ」のサインで、放っておくとプレビューでは無事動いてしまうのが厄介です。最初に5分、.env と EAS Secrets を見直す習慣をつけるだけで、TestFlight でログインボタンが効かないという冷や汗を一度減らせます。