なぜ公開前に確かめるのか

AIエージェント(指示を受けて、コードを書いたり動かしたりするAI)を使うと、画面や基本の動きはすぐに形になります。一方で、データを誰が読めるか、秘密の鍵がどこに置かれているか、といった画面に出ない部分は、頼まないと抜けたままになることがあります。

実際に報告されている例を挙げます。

  • セキュリティ企業の Escape.tech は、バイブコーディング(AIに指示して、コードをほとんど読まずにアプリを作るやり方)で作られた約5,600のアプリを調べ、2,000件を超える脆弱性(悪用できる弱点)、400件を超える秘密の情報の露出、175件の個人情報の露出を見つけたと報告しています。
  • 2026年2月には、Lovable で作られた試験・成績のアプリで18,697件の記録が外から読める状態だったと報じられました。16件の脆弱性のうち6件が重大で、RLS(行単位のアクセス制御)が無く、ログインの判定が逆になっていたとされています。
  • Lovable で作られた1,645のアプリのうち170で、RLS の設定漏れからデータが読めた問題は、CVE-2025-48757 として登録されています。

作る道具の側も対策を進めています。Lovable は、公開の画面を開くと簡易スキャン(Quick scan)を自動で実行します。ただし Lovable 自身の説明では、基本のスキャンはアプリの処理の誤りまでは調べません。重大な問題があるときに公開を止める設定も、ワークスペースの管理者が有効にした場合に働くものです。より深い確認として、Aikido と組んだ有料の侵入テスト(1回100ドル)も用意されています。

スキャンは手がかりとして使い、ここから先の確認も自分で行うのが確実です。

他人のデータが見えないか

いちばん大事な確認です。ログインして使うアプリなら、「Aさんのデータを、Bさんや、ログインしていない人が見られないか」を確かめます。

  1. テスト用のアカウントを2つ作ります(Aさん、Bさん)。
  2. Aさんでログインし、メモや予約など、Aさんだけのデータを1件作ります。
  3. そのデータを開いたときのURLを控えます。URLには番号や長い英数字(ID)が入っていることが多いです。
  4. ログアウトしてBさんでログインし、控えたURLを開きます。Aさんのデータが見えたら問題です。
  5. ログアウトした状態でも、同じURLを開きます。
  6. 一覧の画面で、Bさんの画面にAさんのデータが混ざっていないかも見ます。

画面の上で見えないだけでは足りない点に注意してください。Supabase のように、ブラウザから直接データベースに問い合わせる作りでは、画面を通さずにデータを取りにいけます。この場合は、データベースの側で RLS が効いているかを確かめます。手順は「Supabase の RLS が効いているか確認する方法」にまとめました。

秘密の鍵(APIキー)が画面側に出ていないか

APIキーは、外部のサービス(AIのAPI、決済、メール送信など)を使うときの合言葉のような文字列です。鍵を持っている人は、あなたのアカウントとしてそのサービスを使えます。Google の Gemini API の説明では、鍵が漏れると、他人に利用枠を使われたり、思わぬ請求が来たり、非公開の資源に触れられたりするとしています。

ブラウザで動くコード(画面側のコード)に入れた値は、誰でも読めます。Vite という道具を使うアプリでは、名前が VITE_ で始まる環境変数(コードの外に置く設定値)は画面側のコードに入ります。Vite の公式の説明でも、VITE_ の変数にAPIキーのような秘密を入れないよう注意しています。Next.js では、NEXT_PUBLIC_ で始まる変数がブラウザに送られるコードに埋め込まれます。

ブラウザで確かめる

  1. 公開したアプリを Chrome で開き、開発者ツールを開きます(ページを右クリックして「検証」)。
  2. Mac なら Command+Option+F、Windows なら Control+Shift+F を押すと、読み込まれたファイル全体を検索する画面が開きます。
  3. 使っているサービスの管理画面で、秘密の鍵の先頭の数文字を確かめ、その文字で検索します。Supabase の secret key なら sb_secret_、古い形式なら service_role で探せます。

見つかった場合は、その鍵を使う処理をサーバー側(利用者の手元に届かない場所)に移すよう AI に頼み、そのうえで鍵を作り直します。コードから消すだけでは足りません。一度公開された鍵は、すでに誰かに控えられているかもしれないからです。

なお、Supabase の publishable key(sb_publishable_ で始まる鍵)や古い anon キーは、画面側に置く前提の鍵です。見つかっても、それ自体は問題ではありません。その代わり、RLS で守る必要があります。

Git の履歴にも残っていないか

GitHub などにコードを置いているなら、過去の変更にも鍵が残っていないか確かめます。Google の説明でも、APIキーを Git に入れないよう求めています。手元にコードがあれば、次のコマンドで、その文字列を足したり消したりした変更を探せます。

git log -p -S "sb_secret_"

何も表示されなければ、その文字列を含む変更は履歴にありません。

公開先の環境変数

秘密の鍵は、公開先のサービスの環境変数に置くのが基本です。Vercel では、環境変数を変えても、すでに公開中のものには反映されず、次に公開(デプロイ)したものから使われます。変えたあとは公開し直してください。Netlify も、秘密の値はリポジトリに入るファイル(netlify.toml)ではなく、管理画面や CLI で設定するよう勧めています。

管理画面とログインの守り

管理者だけが使う画面や操作がある場合は、次を確かめます。

  • 一般のアカウントで、管理画面のURLを直接開いてみる。開けたら問題です。
  • ログアウトした状態でも、同じことを試す。
  • 管理者用のボタンが「見えない」だけで、裏の処理は誰でも呼べる作りになっていないか、AI に説明させる。ボタンを隠すのは見た目の話で、守りにはなりません。判定はサーバーやデータベースの側で行う必要があります。

先に挙げた Lovable のアプリの例では、ログインの判定が逆になっていたと報じられています。条件の書き間違いは、ふだんの操作では気づきにくいものです。「ログインしていない人」「一般のユーザー」「管理者」の3つの立場で、同じ操作を1つずつ試すのが確実です。

パスワードの再設定やメールアドレスの確認など、メールが届く流れも、本番の環境で一度通しておきます。Supabase の本番向けチェックリストでは、標準のメール送信は1時間に2通までと書かれていて、上限を変えるには自前の SMTP(メール送信のサービス)の設定が要ります。利用者が増えると確認メールが届かなくなるので、公開前にどうするかを決めておきます。

費用と使いすぎの上限

AI の API など、使った分だけ請求されるサービスをつないでいる場合は、使いすぎを止める仕組みを用意します。

  • 各サービスの管理画面で、利用額の上限や通知を設定できるかを確かめる。できることはサービスごとに違います。
  • ログインしていない人が、AI を呼ぶ機能を何度でも使えないか。
  • 1人が短い時間に何度も呼べないか(回数の制限があるか)。

無料のプランの制限も確かめておきます。たとえば Supabase の無料プランでは、使われていないプロジェクトが7日で一時停止されることがあり、データベースのバックアップをダウンロードできません。人に使ってもらうアプリなら、プランの違いを一度読んでおくと安心です。

バックアップと元に戻す手順

公開したあとに AI に修正を頼むと、別の所が壊れることがあります。戻せるようにしておきます。

  • コード:GitHub などに置き、公開した時点の状態が分かるようにしておく。
  • データ:データベースのバックアップがどこにあり、どう戻すかを確かめる。できることはプランによって違います。
  • 公開先:以前の版に戻す方法を、使っているサービスの説明で確かめておく。

表や列を足したり消したりする修正は、元に戻すのが難しいことがあります。本番のデータがある状態で頼むときは、先に「何が変わり、消えるデータはあるか」を AI に説明させてから進めます。

規約と法律まわりの表記

利用者の情報を集めたり、お金を受け取ったりする場合は、プライバシーポリシー、利用規約、特定商取引法にもとづく表記などが要るかを確かめます。何が必要かはアプリの内容によって変わるので、この記事では判断できません。

  • ネットで物やサービスを売る場合は、消費者庁の「特定商取引法ガイド」の通信販売のページで、表示が必要な事項を確かめる。
  • 個人情報の扱いは、個人情報保護委員会の案内を確かめる。
  • 迷ったら弁護士に相談する。

AI に規約の文面を作らせることはできます。ただ、その内容が自分のアプリに合っているか、法律の求めを満たしているかは、AI の答えだけで決めないでください。

公開前のチェック表

ここまでの確認を1つの表にまとめます。

項目確かめ方問題のサイン
他人のデータ2つのアカウントとログアウトした状態で、同じURLを開く他人のデータが見える
データベースの守りSupabase なら Security Advisor と RLS の一覧を見るRLS が無効の表がある
秘密の鍵開発者ツールで、鍵の先頭の文字を検索するsecret 系の鍵が見つかる
Git の履歴git log -p -S で鍵の先頭の文字を探す過去の変更に鍵がある
管理画面一般のユーザーとログアウトした状態で、URLを直接開く開ける、操作できる
メール本番で登録とパスワード再設定を通すメールが届かない
費用各サービスの上限と通知の設定を見る上限も通知も無い
戻し方コードとデータの戻し方を確かめる戻し方が分からない
表記公式の案内を読み、必要なら弁護士に相談する必要な表記が無い

すべてに自信を持って「大丈夫」と言える必要はありません。どこが分からないかがはっきりすれば、AI に聞くことも、人に頼む範囲も絞れます。判断に迷う所は、経験のある人に一度見てもらうと早いです。