RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-03-29中級

Rorkアプリのデータベース・バックエンド接続エラー解決法 — Firebase/Supabase対応

RorkアプリがFirebase、Supabaseなどのバックエンドと接続できない場合の完全解決ガイド。認証エラー、CORS問題、ネットワークセキュリティ設定、データ永続化、オフライン同期まで、実践的なトラブルシューティングを網羅。

rork58databasebackend3troubleshooting25firebase

バックエンド接続エラーはなぜ起こるのか

Rorkで生成したアプリがFirebaseやSupabaseなどのバックエンドと接続できない場合、その原因は大きく分けて3つです:

  1. 認証情報の設定ミス — API キーや設定ファイルの不備
  2. ネットワーク・セキュリティ設定 — CORS、ファイアウォール、プライベートネットワーク
  3. ランタイムのバグ — 非同期処理の待機不足、state 更新タイミング

このガイドでは、各パターンの症状と解決方法を詳しく解説します。もしビルド段階でエラーが発生している場合は、Rorkアプリのビルドエラー完全解決ガイドも参考にしてください。


エラー1:Firebase Configuration Error

症状

Error: Firebase initialization failed
Error: firebaseConfig is undefined

アプリ起動時に Firebase が初期化できず、ブラウザコンソール(または Xcode)にエラーが表示されます。

原因

  • google-services.json(Android)または GoogleService-Info.plist(iOS)をプロジェクトに追加していない
  • Firebase config が Rork のコード内に正しくインポートされていない
  • API key が誤入力または無効

解決方法

ステップ1:Firebase Console から設定ファイルをダウンロード

  1. Firebase Console にログイン
  2. プロジェクトを選択
  3. 「Project Settings」(歯車アイコン)をクリック
  4. 「Your apps」セクションで、アプリを選択
  5. iOS / Android それぞれの設定ファイルをダウンロード

iOS の場合:GoogleService-Info.plist Android の場合:google-services.json

ステップ2:Rork プロジェクトに追加

iOS の場合、Xcode で「File」→「Add Files to Project」で plist を追加。 Android の場合、android/app/google-services.json に配置。

ステップ3:Firebase 初期化コードを確認

Rork が生成したコードで以下のパターンを確認:

// src/config/firebase.js (例)
import { initializeApp } from 'firebase/app';
 
const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_PROJECT.firebaseapp.com",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_PROJECT.appspot.com",
  messagingSenderId: "YOUR_SENDER_ID",
  appId: "YOUR_APP_ID",
};
 
const app = initializeApp(firebaseConfig);
export default app;

YOUR_API_KEY など全て実際の値に置き換わっているか確認します。


エラー2:Supabase 接続エラー

症状

Error: Failed to connect to database
Error: SUPABASE_URL or SUPABASE_KEY is undefined

Supabase へのリクエストが失敗し、ネットワークタブに「CORS error」または「401 Unauthorized」が表示されます。

原因

  • Supabase の Project URL または Anon Key が誤設定
  • CORS 設定が未構成
  • API キーに正しい権限がない

解決方法

ステップ1:Supabase からクレデンシャルを取得

  1. Supabase Dashboard にログイン
  2. プロジェクトを選択
  3. 「Settings」→「API」から以下を確認:
    • Project URLhttps://xxxxx.supabase.co
    • Anon Key(公開可能):eyJhbGc... で始まる長い文字列
    • Service Role Key(秘密):絶対に公開しない

ステップ2:環境変数に設定

React Native / Expo プロジェクトの場合、.env ファイルに:

EXPO_PUBLIC_SUPABASE_URL=https://xxxxx.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=eyJhbGc...

EXPO_PUBLIC_ プレフィックスが重要です(クライアントから見える変数)。

ステップ3:Supabase クライアントを初期化

import { createClient } from '@supabase/supabase-js';
 
const supabaseUrl = process.env.EXPO_PUBLIC_SUPABASE_URL;
const supabaseAnonKey = process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY;
 
export const supabase = createClient(supabaseUrl, supabaseAnonKey);

エラー3:CORS(Cross-Origin)エラー

症状

Access to XMLHttpRequest has been blocked by CORS policy
Origin 'http://localhost:3000' is not allowed

ブラウザのコンソールに CORS エラーが表示されます。

原因

  • バックエンドが、ローカル開発環境(localhost:3000 など)からのリクエストを拒否している
  • CORS ヘッダーが正しく設定されていない

解決方法

Firebase の場合:CORS 設定不要

Firebase は クライアントサイドライブラリなので CORS エラーは出ません。上記エラーが出た場合は、Firebase 以外のカスタムバックエンド呼び出しで CORS 設定が必要な可能性があります。

Supabase の場合:自動で CORS 対応

Supabase の REST API・Realtime API は CORS が自動で有効です。ただし、カスタム RPC 関数を呼び出す場合は、以下を確認:

カスタムバックエンド(Express 等)の場合:

const cors = require('cors');
 
app.use(cors({
  origin: [
    'http://localhost:3000',
    'http://localhost:19000',  // Expo
    'https://yourdomain.com'   // 本番
  ],
  credentials: true
}));

エラー4:認証トークン無効エラー

症状

Error: Invalid or missing authentication token
Error: 401 Unauthorized

ログイン直後はいいが、時間が経つとトークンが期限切れになります。

原因

  • Firebase / Supabase のセッションが自動更新されていない
  • トークン更新ロジックが実装されていない
  • ローカルストレージ/Secure Store にトークンが保存されていない

解決方法

Firebase の場合:自動リフレッシュ

Firebase SDK は自動的にトークンをリフレッシュします。以下で確認:

import { onAuthStateChanged } from 'firebase/auth';
import { auth } from './firebase.config';
 
// セッション確認フック
export function useFirebaseAuth() {
  const [user, setUser] = useState(null);
 
  useEffect(() => {
    const unsubscribe = onAuthStateChanged(auth, (currentUser) => {
      setUser(currentUser);
      // トークンは自動更新される
    });
 
    return unsubscribe;
  }, []);
 
  return user;
}

Supabase の場合:リフレッシュトークン管理

import AsyncStorage from '@react-native-async-storage/async-storage';
 
// 起動時にセッション復元
export async function restoreSession() {
  const { data, error } = await supabase.auth.refreshSession();
  if (error) console.error('Session refresh failed:', error);
  return data;
}
 
// アプリ初期化時に実行
useEffect(() => {
  restoreSession();
}, []);

エラー5:ネットワークセキュリティエラー

症状

Error: Network request failed
ERR_SSL_PROTOCOL_ERROR

HTTP ベースのバックエンドに接続できません。

原因(iOS)

iOS 9+ では、デフォルトで HTTPS 必須です。HTTP サイトへのアクセスはセキュリティ例外を追加する必要があります。

解決方法(iOS)

Info.plist に以下を追加:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsLocalNetworking</key>
  <true/>
  <key>NSExceptionDomains</key>
  <dict>
    <key>localhost</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

本番環境では HTTPS サーバーを使用してください。HTTP は開発環境のみです。

原因(Android)

AndroidManifest.xmlandroid:usesCleartextTraffic の設定が必要な場合があります。

<application
  android:usesCleartextTraffic="true"
  ...>
</application>

本番環境では必ず HTTPS にしてください。


エラー6:データ永続化・オフライン同期エラー

症状

  • アプリがオフラインになると、データが表示されない
  • データベースに保存されたはずのデータが消える
  • ネットワーク復帰後に同期されない

原因

  • ローカルキャッシュが実装されていない
  • SwiftData(iOS)または Realm(React Native)の設定が不完全
  • オフライン時の状態管理が不十分

解決方法

Firebase + iOS の場合:Firestore Persistence 有効化

import FirebaseFirestore
 
let db = Firestore.firestore()
db.settings.isPersistenceEnabled = true
 
// これでオフラインデータが自動保存される

Supabase + React Native の場合:ローカルキャッシュを実装

import AsyncStorage from '@react-native-async-storage/async-storage';
 
export async function fetchAndCacheData(table) {
  try {
    // ネットワークから取得を試みる
    const { data, error } = await supabase
      .from(table)
      .select();
 
    if (!error) {
      // 成功時、ローカルに保存
      await AsyncStorage.setItem(
        `cache_${table}`,
        JSON.stringify(data)
      );
      return data;
    }
  } catch (e) {
    console.error('Network fetch failed, loading from cache');
  }
 
  // キャッシュからロード
  const cached = await AsyncStorage.getItem(`cache_${table}`);
  return cached ? JSON.parse(cached) : null;
}

全体を振り返って

データベース接続エラーの 90% は、設定ミス・認証情報の不備・CORS 設定の不完全さで解決します。重要なのは、エラーメッセージを丁寧に読むこと、環境変数を確認することです。

本当に難しいのは、オフライン同期やリアルタイム同期の実装です。Rork で生成したアプリなら、基本構造は既に用意されているので、あとは微調整するだけです。

バックエンド接続が完了したら、RorkアプリのTestFlight配信からApp Store公開までのトラブル対処法に進むことをお勧めします。

より詳しいバックエンド設計について学びたい場合は、以下の書籍を参考にしてください:

Rork で生成したアプリはプロダクションレディですので、これらのエラーもシステマティックに解決できます。頑張りましょう!

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

開発ツール2026-05-24
Rork アプリでバックグラウンド復帰時に画面が真っ白/状態が消える原因の切り分け
Rork で作ったアプリをバックグラウンドに置いたまま数時間放置して戻ると、画面が真っ白になったり、編集途中のデータが消えていたり、再ログインを求められたりする。AppState・AsyncStorage 復元タイミング・iOS のメモリ回収・Navigation state 復元の4つの観点から切り分ける手順を、5,000万DL の壁紙・癒し系アプリを個人開発してきた経験を交えてまとめます。
開発ツール2026-05-23
Rork 生成プロジェクト特有の expo start --offline forbidden — テンプレ構成が原因の4パターン
Rork が生成するテンプレート構成が原因で expo start --offline が forbidden になる4つのパターン(tsconfigPaths・expo-router キャッシュ・ネイティブプリビルド・lock 不一致)を、Rork プロジェクト固有の観点で切り分けます。汎用的な Expo 側の対処(プロキシ403・依存検証)は別記事にまとめています。
開発ツール2026-04-24
Rork Max で生成した SwiftUI アプリが Xcode でビルドエラー — 症状別の復旧ガイド
Rork Max で生成した SwiftUI プロジェクトを Xcode で開いてビルドしようとした際に遭遇しやすいエラー(依存解決失敗・Info.plist 不整合・Entitlements 欠落・Bundle Identifier 重複など)を、症状ごとに原因と復旧手順に分けて整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →