RORK LABEN
FUNDING — RorkがLeft Lane Capital主導で$15Mのシードを調達。Peak XV・True Ventures・Goodwater・a16z Speedrunが参加しましたENGINE — Rork MaxはClaude CodeとClaude Opus 4.6で駆動。X で800万超のビューを集め、2週間で年間売上を倍増させましたSWIFT — Rork MaxはWebで初めてSwiftアプリを生成できるビルダーで、Apple伝統のXcodeを置き換える位置づけですPRODUCT — Rork MaxはiPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessageまでApple全域に対応しますCLASSIC — 通常のRorkはReact Native(Expo)で、英語の説明だけからiOS/Androidアプリを生成しストア配信できますPRICING — 無料で始められ、有料は月25ドル〜。Rork Maxは月200ドルですFUNDING — RorkがLeft Lane Capital主導で$15Mのシードを調達。Peak XV・True Ventures・Goodwater・a16z Speedrunが参加しましたENGINE — Rork MaxはClaude CodeとClaude Opus 4.6で駆動。X で800万超のビューを集め、2週間で年間売上を倍増させましたSWIFT — Rork MaxはWebで初めてSwiftアプリを生成できるビルダーで、Apple伝統のXcodeを置き換える位置づけですPRODUCT — Rork MaxはiPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessageまでApple全域に対応しますCLASSIC — 通常のRorkはReact Native(Expo)で、英語の説明だけからiOS/Androidアプリを生成しストア配信できますPRICING — 無料で始められ、有料は月25ドル〜。Rork Maxは月200ドルです
記事一覧/アプリ開発
アプリ開発/2026-06-24中級

Next.js × Supabase で必ず向き合う3つの実装 — RLS・状態管理・リアルタイム更新

Webアプリの土台を組んだ先で必ず詰まる3つ、DBのアクセス制御(RLS)・画面の状態管理・リアルタイム更新を、Next.jsとSupabaseのコードを交えて実装レベルで解説します。購読の解除忘れによるメモリリークや、認証とRLSの連動といった、本番でハマる落とし穴まで。

Next.js3Supabase32RLS3状態管理10リアルタイム7認証12premium3

プレミアム記事

前編では、Webアプリの全体像と、土台をBaaSに任せるところまでを地図として描きました。後編は、その土台の上で必ず向き合うことになる3つの実装に踏み込みます。DBのアクセス制御、画面の状態管理、そしてリアルタイム更新です。どれも「動くものは作れたが、本番に出す前に詰まる」典型でした。

私自身、個人開発でアプリの裏側を組むとき、この3つでそれぞれ別のハマり方をしました。順に、コードを交えて整理します。

なぜ「誰でもDBを直接叩ける」のは危険なのか

BaaSの便利さの裏返しが、ブラウザから直接DBを呼べてしまうことです。これは「悪意のある人が他人のデータも見えるのでは」という当然の不安につながります。その不安は正しく、ここで効くのが RLS(Row Level Security、行レベルセキュリティ)です。

RLSは「テーブルの各行に対して、誰がアクセスできるかをDB自体に設定する」機能です。クエリ自体は誰が送っても同じですが、RLSが送信者を見て、返す行を自動で絞り込みます。

-- 「自分が作成したタスクしか見えない」をDBレベルで強制する
alter table tasks enable row level security;
 
create policy "自分のタスクのみ参照可能"
  on tasks for select
  using (auth.uid() = owner_id);

普通のプログラミングでは「アクセス制御はアプリのコード(if文)で書く」と考えがちですが、BaaSの世界ではDB自体にルールを持たせます。これにより、フロントのコードにバグがあっても、DBレベルで他人のデータの漏洩を防げます。私のお勧めは、「テーブルを作ったらRLSを有効にしてポリシーを書く」までを必ず1セットの作業にすることです。後回しにすると、そのまま本番に出て事故になります。

認証とRLSは同じトークンで連動している

RLSのポリシーに出てきた auth.uid() の中身は、ログイン状態を表すトークンそのものです。ログイン機能を自作するのは大変ですが、BaaSを使うとライブラリのように扱えます。

// ログイン
const { data, error } = await supabase.auth.signInWithPassword({
  email: 'user@example.com',
  password: 'password123',
});
 
// 現在ログイン中のユーザーを取得
const { data: { user } } = await supabase.auth.getUser();

知っておくと整理しやすいのは、ログイン状態がブラウザに保存されるトークンで管理されている、という点です。ログイン時に受け取ったトークンをブラウザが保持し、以降のリクエストで一緒に送ることで、サーバーに「ログイン済みのこのユーザーだ」と伝えます。このトークンが、先ほどのRLSの auth.uid() の中身です。つまり認証とRLSは、同じトークンを通じて連動しています。ここがつながって見えると、アクセス制御の全体像が一気に腑に落ちます。

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

この記事の続きを読む

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

この記事で得られること
ブラウザから直接DBを叩く構成で他人のデータを守るRLSポリシーの書き方と、認証トークンとの連動
propsのバケツリレーを避けるグローバル状態管理(Zustand)の最小実装と使い分けの基準
Realtime購読の解除忘れによるメモリリークを防ぐ、useEffectクリーンアップの具体コード
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-06-24
プログラミングは分かる人が、初めてWebアプリを公開するときの地図 — Next.jsとSupabaseで掴む全体像
アルゴリズムは書けるのに、フロントエンドとバックエンドの違いやReactのコンポーネントで詰まる。そんな経験者向けに、Next.jsとSupabaseを例にWebアプリの全体像を一枚の地図として整理します。サーバーで動くコードとブラウザで動くコードの境界まで。
開発ツール2026-03-25
Rork × Supabase 認証&リアルタイム機能実装ガイド — ノーコードでバックエンドを構築する方法
RorkとSupabaseを組み合わせて、認証機能とリアルタイムデータ同期を実装する方法を解説。ユーザー登録からリアルタイムチャットまで、実践的なステップバイステップガイドです。
開発ツール2026-05-13
Supabase Storage に画像を保存したのに URL が 403 になる ─ Rork 開発でよく引っかかる RLS とバケット設定の落とし穴
RorkアプリでSupabase Storageに画像をアップロードしても URL が 403 エラーになる問題を解決します。バケットの Public/Private 設定、RLS ポリシーの SELECT 許可、getPublicUrl と createSignedUrl の使い分けという3パターンを具体的なコードで解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →