なぜ公開前に確かめるのか
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さんや、ログインしていない人が見られないか」を確かめます。
- テスト用のアカウントを2つ作ります(Aさん、Bさん)。
- Aさんでログインし、メモや予約など、Aさんだけのデータを1件作ります。
- そのデータを開いたときのURLを控えます。URLには番号や長い英数字(ID)が入っていることが多いです。
- ログアウトしてBさんでログインし、控えたURLを開きます。Aさんのデータが見えたら問題です。
- ログアウトした状態でも、同じURLを開きます。
- 一覧の画面で、Bさんの画面にAさんのデータが混ざっていないかも見ます。
画面の上で見えないだけでは足りない点に注意してください。Supabase のように、ブラウザから直接データベースに問い合わせる作りでは、画面を通さずにデータを取りにいけます。この場合は、データベースの側で RLS が効いているかを確かめます。手順は「Supabase の RLS が効いているか確認する方法」にまとめました。
秘密の鍵(APIキー)が画面側に出ていないか
APIキーは、外部のサービス(AIのAPI、決済、メール送信など)を使うときの合言葉のような文字列です。鍵を持っている人は、あなたのアカウントとしてそのサービスを使えます。Google の Gemini API の説明では、鍵が漏れると、他人に利用枠を使われたり、思わぬ請求が来たり、非公開の資源に触れられたりするとしています。
ブラウザで動くコード(画面側のコード)に入れた値は、誰でも読めます。Vite という道具を使うアプリでは、名前が VITE_ で始まる環境変数(コードの外に置く設定値)は画面側のコードに入ります。Vite の公式の説明でも、VITE_ の変数にAPIキーのような秘密を入れないよう注意しています。Next.js では、NEXT_PUBLIC_ で始まる変数がブラウザに送られるコードに埋め込まれます。
ブラウザで確かめる
- 公開したアプリを Chrome で開き、開発者ツールを開きます(ページを右クリックして「検証」)。
- Mac なら Command+Option+F、Windows なら Control+Shift+F を押すと、読み込まれたファイル全体を検索する画面が開きます。
- 使っているサービスの管理画面で、秘密の鍵の先頭の数文字を確かめ、その文字で検索します。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 に聞くことも、人に頼む範囲も絞れます。判断に迷う所は、経験のある人に一度見てもらうと早いです。