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-12中級

Rork でユーザー認証を実装する — Firebase・Supabase 連携ガイド

Rork で作ったアプリにユーザー認証機能を追加する方法を解説。Firebase Authentication と Supabase Auth の両方に対応した実装ガイドです。

認証14Firebase10Supabase33ユーザー管理ログインセキュリティ13

Rork アプリに認証機能を追加しよう

ユーザー認証はほぼすべてのアプリに欠かせない機能です。Rork で生成したアプリは React Native / Expo ベースのため、Firebase Authentication や Supabase Auth などの実績ある認証サービスをスムーズに組み込めます。

Rork アプリに認証機能を追加する 2 通りの方法を順を追って整理していきます。

  • Firebase Authentication — Google エコシステムとの親和性が高く、ソーシャルログインに強い
  • Supabase Auth — オープンソースで PostgreSQL と直結、シンプルな API が魅力

認証フローの全体像

┌─────────────────────────────────────────────┐
│  App(Rork 生成コード)                        │
│  ┌──────────┐   ┌──────────┐   ┌──────────┐ │
│  │ LoginScreen│→│ AuthHook │→│HomeScreen│ │
│  └──────────┘   └──────────┘   └──────────┘ │
│                       ↕                      │
│              Firebase / Supabase             │
└─────────────────────────────────────────────┘

Rork が生成する Expo Router ベースのプロジェクトでは、認証状態をカスタムフックで管理し、未ログインユーザーをログイン画面にリダイレクトするパターンが一般的です。


Firebase Authentication を使う

1. Firebase プロジェクトのセットアップ

Firebase Console でプロジェクトを作成し、「Authentication」→「ログイン方法」でメール/パスワードを有効にします。次に google-services.json(Android)と GoogleService-Info.plist(iOS)をダウンロードしておきます。

2. Rork のプロンプト例

メール・パスワード認証を追加して。
- ログイン画面とサインアップ画面を作成
- Firebase Authentication を使用
- 認証済みユーザーだけがホーム画面に入れるようにする
- ログアウトボタンをプロフィール画面に追加

Rork はこのプロンプトから必要なコードを自動生成します。生成後に Firebase の設定値だけ差し替えれば動作します。

3. Firebase 設定の追加

Rork が生成したプロジェクトに firebase.config.js を追加します。

// firebase.config.js
import { initializeApp } from 'firebase/app';
import { getAuth } from 'firebase/auth';
 
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 const auth = getAuth(app);

4. 認証フック

// hooks/useAuth.js
import { useState, useEffect } from 'react';
import { onAuthStateChanged } from 'firebase/auth';
import { auth } from '../firebase.config';
 
export function useAuth() {
  const [user, setUser] = useState(null);
  const [loading, setLoading] = useState(true);
 
  useEffect(() => {
    const unsubscribe = onAuthStateChanged(auth, (currentUser) => {
      setUser(currentUser);
      setLoading(false);
    });
    return () => unsubscribe();
  }, []);
 
  return { user, loading };
}

5. ログイン画面の実装例

// app/login.jsx
import { useState } from 'react';
import { View, TextInput, Button, Text, StyleSheet } from 'react-native';
import { signInWithEmailAndPassword } from 'firebase/auth';
import { auth } from '../firebase.config';
import { router } from 'expo-router';
 
export default function LoginScreen() {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [error, setError] = useState('');
 
  const handleLogin = async () => {
    try {
      await signInWithEmailAndPassword(auth, email, password);
      router.replace('/home');
    } catch (e) {
      setError('メールアドレスまたはパスワードが間違っています');
    }
  };
 
  return (
    <View style={styles.container}>
      <TextInput
        placeholder="メールアドレス"
        value={email}
        onChangeText={setEmail}
        keyboardType="email-address"
        autoCapitalize="none"
        style={styles.input}
      />
      <TextInput
        placeholder="パスワード"
        value={password}
        onChangeText={setPassword}
        secureTextEntry
        style={styles.input}
      />
      {error ? <Text style={styles.error}>{error}</Text> : null}
      <Button title="ログイン" onPress={handleLogin} />
    </View>
  );
}
 
const styles = StyleSheet.create({
  container: { flex: 1, justifyContent: 'center', padding: 20 },
  input: {
    borderWidth: 1, borderColor: '#ccc',
    borderRadius: 8, padding: 12, marginBottom: 12,
  },
  error: { color: 'red', marginBottom: 8 },
});

Supabase Auth を使う

Firebase の代わりに Supabase を使う場合は、よりシンプルな構成で認証が実装できます。

1. Supabase プロジェクトのセットアップ

Supabase Dashboard でプロジェクトを作成し、「Authentication」→「Providers」でメール認証を有効にします。Project URLanon key を控えておきます。

2. Rork プロンプト例

Supabase を使ったメール認証を実装して。
- サインアップ時にメール確認を送信
- ログイン・ログアウト機能
- 認証状態に応じて画面を切り替える

3. Supabase クライアントの設定

// lib/supabase.js
import { createClient } from '@supabase/supabase-js';
import AsyncStorage from '@react-native-async-storage/async-storage';
 
export const supabase = createClient(
  'https://YOUR_PROJECT.supabase.co',
  'YOUR_ANON_KEY',
  {
    auth: {
      storage: AsyncStorage,
      autoRefreshToken: true,
      persistSession: true,
      detectSessionInUrl: false,
    },
  }
);

ポイント: React Native では AsyncStorage をセッション保存先に指定することで、アプリ再起動後もログイン状態が維持されます。

4. 認証フック(Supabase版)

// hooks/useAuth.js
import { useState, useEffect } from 'react';
import { supabase } from '../lib/supabase';
 
export function useAuth() {
  const [session, setSession] = useState(null);
  const [loading, setLoading] = useState(true);
 
  useEffect(() => {
    supabase.auth.getSession().then(({ data: { session } }) => {
      setSession(session);
      setLoading(false);
    });
 
    const { data: { subscription } } = supabase.auth.onAuthStateChange(
      (_event, session) => setSession(session)
    );
 
    return () => subscription.unsubscribe();
  }, []);
 
  return { session, user: session?.user, loading };
}

5. ログイン処理

// サインアップ
const { error } = await supabase.auth.signUp({
  email: 'user@example.com',
  password: 'securepassword',
});
 
// ログイン
const { data, error } = await supabase.auth.signInWithPassword({
  email: 'user@example.com',
  password: 'securepassword',
});
 
// ログアウト
await supabase.auth.signOut();

認証ガード:未ログインユーザーをリダイレクト

Expo Router を使っている場合、_layout.jsx でルートガードを実装できます。

// app/_layout.jsx
import { useEffect } from 'react';
import { Slot, router, useSegments } from 'expo-router';
import { useAuth } from '../hooks/useAuth';
 
export default function RootLayout() {
  const { user, loading } = useAuth();
  const segments = useSegments();
 
  useEffect(() => {
    if (loading) return;
 
    const inAuthGroup = segments[0] === '(auth)';
 
    if (!user && !inAuthGroup) {
      // 未ログインなのに保護ページにいる → ログイン画面へ
      router.replace('/(auth)/login');
    } else if (user && inAuthGroup) {
      // ログイン済みなのに認証画面にいる → ホームへ
      router.replace('/home');
    }
  }, [user, loading, segments]);
 
  return <Slot />;
}

Firebase vs Supabase — どちらを選ぶ?

比較項目Firebase AuthSupabase Auth
無料枠月 10,000 MAU月 50,000 MAU
ソーシャルログイン◎(Google, Apple, Twitter など)○(主要プロバイダー対応)
データベース連携Firestore(NoSQL)PostgreSQL(SQL)
オープンソース✗(Google独自)
学習コスト
Rork との相性

個人開発や MVP 段階では Supabase の無料枠が広く扱いやすいのでおすすめです。Google / Apple ログインを重視するなら Firebase が安定しています。


Tips:ソーシャルログインを追加する

Rork のプロンプトで一言追加するだけでソーシャルログインも実装できます。

Google ログインと Apple ログインのボタンも追加して。
expo-auth-session を使って実装してください。

Apple ログインは App Store に公開する際、ソーシャルログインを提供するアプリには実装が必須です。忘れずに対応しておきましょう。


全体を振り返って

  • Rork は React Native / Expo ベースのため、Firebase・Supabase のどちらとも親和性が高い
  • 認証フローは「カスタムフック」→「ルートガード」のパターンで一元管理するとシンプル
  • Firebase は Google エコシステム重視、Supabase はオープンソース・SQL 重視と使い分けを
  • onAuthStateChanged / onAuthStateChange を使って認証状態をリアルタイムで監視することがポイント

認証機能を追加することで、ユーザーごとのデータ管理やパーソナライズ機能が実現でき、アプリのクオリティが大きく向上します。ぜひ試してみてください。

シェア

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

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

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

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

関連記事

開発ツール2026-06-21
Rork アプリの認証トークンはどこに保存すべきか — expo-secure-store と生体認証ゲートの設計
Rork で生成したアプリの認証トークンを AsyncStorage から expo-secure-store へ移し、生体認証を読み出しの前段に挟むまでの設計をまとめました。サイズ制限や失効処理など、運用で踏んだ落とし穴も添えています。
開発ツール2026-03-28
Rork Max × Supabase Edge Functions & Row Level Security — セキュアな API 設計
Rork Max アプリで Supabase Edge Functions と Row Level Security(RLS)を活用し、セキュアでスケーラブルな API を設計・実装するための上級ガイド。認可パターンから本番運用まで網羅します。
開発ツール2026-03-25
Rork × Supabase 認証&リアルタイム機能実装ガイド — ノーコードでバックエンドを構築する方法
RorkとSupabaseを組み合わせて、認証機能とリアルタイムデータ同期を実装する方法を解説。ユーザー登録からリアルタイムチャットまで、実践的なステップバイステップガイドです。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →