チェックリスト

バイブコーディングで作ったアプリを、共有する前に安全にするには

結論

AIで作ったアプリを同僚に使ってもらう前に、まず4つを確かめます。会社のログインを通らずに誰も入れないこと、入れるのは自社のアカウントだけであること、ブラウザで動くコードにキーがないこと、アプリを通さずにデータベースを読めないこと。そのうえで、アプリの中で誰が何をできるか、あなたが辞めたら誰がオーナーになるかを確かめます。

AIで作ったアプリからの漏えいの多くは、巧妙な攻撃ではありません。開いたままのドアです。一般公開のリンク、ルールがオフのデータベース、ページの中のキー。このチェックリストは、アプリを作った人と、それを確認するIT担当者のためのものです。各項目には、何がまずいのか、普段の言葉での確かめ方、そして TeamOnly が引き受けることと、まだあなたの担当であることを書いています。

最終更新 TeamOnly が執筆しました。AIで作った社内アプリをホストしているので、各項目で、私たちが手伝える部分とそうでない部分を正直に書いています。

01なぜ大事か

AIで作ったアプリで、何がまずくなるのか

AIツールは、アプリを動かすのは得意です。ほかの誰にとっても動いてしまうかどうかには、あまり気を配りません。この2年の3つの調査結果に、その傾向が表れています。

380,000
件。2026年5月、セキュリティ企業の Red Access が Lovable、Base44、Netlify、Replit 上で見つけた、誰でも届く状態の資産の数です。そのうち約5,000件が会社の機密データを持ち、多くが Google にインデックスされていました。
1,645件中170件
2025年3月に調べた Lovable のアプリのうち、ログインせずに誰でも Supabase のデータベースのデータを読み、変更できたもの。データベースのアクセスのルールがないか、間違っていたためです(CVE-2025-48757)。
205,474
個。2025年の研究で、16のAIモデルが57万6,000件のコードサンプルの中で提案した、実在しないパッケージ名の数です。攻撃者はその名前でパッケージを公開し、誰かがインストールするのを待てます。

どれも巧妙な攻撃者は必要ありませんでした。ドアが開いていたのです。これは良い知らせでもあります。開いたドアは確かめやすく、コードを読む必要もありません。

2026年10月26日 確認。出典: Security Boulevard on Red Access’s findings(2026年5月)、Matt Palmer, statement on CVE-2025-48757(2025年)、Spracklen et al., “We Have a Package for You!”(USENIX Security 2025)。

02チェックリスト

リンクを共有する前の11のチェック

順番どおりに行ってください。最初の項目は社外の人を締め出し、後の項目は社内でのミスを見つけます。

  1. 会社のログインの前には何も表示されない

    何がまずいか
    AIツールは、ログイン画面をアプリの1ページとして作ることがよくあります。アプリの残りの部分とその API は、そのページを飛ばした人や API を直接呼んだ人にも、そのまま応答します。Red Access は、アドレスにたどり着いた人なら誰にでも管理者の権限を与えてしまう会社のアプリを見つけました。
    自分で確かめる
    ブラウザのプライベートウィンドウでアプリを開きます。ログイン画面だけが表示されるはずです。次に AIツールに「API のルートをすべて挙げて、ログインせずに動くものを教えて」と聞きます。答えは「なし」であるべきです。
    TeamOnly では
    対応済み。すべてのアプリへのすべてのリクエストは、あなたのコードが動く前に確認されます。API の呼び出しも同じで、セッションがなければ 401 が返ります。アプリを一般公開にする設定はありません。
  2. 入れるのは自社のアカウントだけ

    何がまずいか
    「Google でログイン」は、初期設定では個人の Gmail を含むどの Google アカウントも通します。Google の hd の設定はアカウントの選択画面を絞るだけで、リクエストは書き換えられるため、Google はそれに頼らないよう注意しています。ドメインはサーバー側で確認する必要があります。
    自分で確かめる
    個人の Gmail か Outlook のアカウントでログインしてみます。締め出されるはずです。AIツールに、サーバーがどこでメールのドメインを確認しているか、Google の署名つきトークンを確認しているのか、ブラウザが送った値を確認しているのかを聞きます。
    TeamOnly では
    対応済み。同僚は会社の Google、会社の Microsoft、または会社のメールに届くコードでログインします。検証済みのログイントークンにあるドメインが自社のドメインと照合され、個人のアカウントは拒否されます。
  3. 社内でも、正しい人だけ

    何がまずいか
    給与、評価、顧客のデータを持つアプリが、初期設定のままだったという理由で全社に共有されてしまう。あるいは AI が、誰も更新しない許可リストをコードの中に作ってしまう。
    自分で確かめる
    このデータを社内の全員が見るべきか、自問します。そうでないなら、見るべき人の名前を書き出し、リストにない人が締め出されることを確かめます。
    TeamOnly では
    対応済み。選ぶのはあなたです。アクセスは全社か名前のリストで、ダッシュボードか npx teamonly access only priya@acme.com で設定します。リクエストのたびに確認されるので、誰かを外すと1分以内に反映されます。
  4. 一般公開のリンクにも、検索結果にも出ない

    何がまずいか
    アプリビルダーの中には、非公開を選ばない限り一般公開のアドレスに公開するものがあります。一般公開のアプリは見つかります。Red Access によると、さらされていた会社のアプリの多くが Google などの検索エンジンにインデックスされていました。
    自分で確かめる
    Google で site: に続けてアプリのアドレスを検索します。アプリを作ったプラットフォームで、プロジェクトの公開設定を確認します。一般公開になっていたら、何よりも先に変えてください。
    TeamOnly では
    対応済み。アプリは yourapp.yourcompany.teamonly.app にあり、ログイン画面の内側です。ログイン画面を含むすべての応答が検索エンジンにインデックスしないよう伝え、ログイン画面に表示されるのはアプリの名前とログイン方法だけです。
  5. ブラウザで動くコードにキーがない

    何がまずいか
    AIツールは API キーを React のコードや、VITE_ や NEXT_PUBLIC_ で始まる変数に入れてしまいます。ブラウザに送られるものは、アプリを開いた人なら誰でも読めます。Supabase は、secret キーはすべてのデータベースのルールを飛ばすので、決してブラウザに置いてはいけないとしています。
    自分で確かめる
    AIツールに「フロントエンドのコード、VITE_ の変数、コミットされた .env ファイルに、キー、トークン、パスワードはある?」と聞きます。ブラウザで開発者ツールを開き、読み込まれたファイルを key、secret、sk_ で検索します。一度でもキーが漏れていたら、発行元のサービスでキーを変更してください。
    TeamOnly では
    一部対応。キーは npx teamonly secrets set NAME でコードの外に保存され、読めるのはアプリのサーバー側のコードだけです。TeamOnly が追加する指示は、AIツールに VITE_ のキーを決して使わないよう伝えています。ただ、自分でキーをコードに貼り付けることは止められないので、確認は続けてください。
  6. アプリを通さずにデータベースを読めない

    何がまずいか
    Supabase などのサービスでは、ブラウザがデータベースと直接やりとりし、アクセスのルール(行レベルセキュリティ)が何を見られるかを決めます。そのルールがオフか間違っていると、公開キーを持つ誰もがテーブル全体を読み、変更できます。Lovable の調査結果がまさにそれでした。
    自分で確かめる
    Supabase で Advisors を開き、Security Advisor を開きます。「RLS disabled in public」のエラーがあれば、誰でも読めるテーブルがあるということです。ルールがあるだけでは不十分です。普通の同僚としてログインし、ほかの人のレコードを開けるか試してください。
    TeamOnly では
    社外の人に対しては対応済み。各アプリのデータベースは、インターネット上に独自のアドレスを持ちません。届くのは、ログインの後に、アプリのサーバー側のコードを通したときだけです。ログインした各人がどの行を見てよいかは、引き続きアプリのコードで正しく書く必要があります(チェック8を参照)。
  7. アプリごとにデータを分ける

    何がまずいか
    手っ取り早いからと、いくつかのアプリが1つのデータベースや1つのストレージを共有する。すると、1つのアプリのキーやバグで、すべてが開いてしまいます。
    自分で確かめる
    このアプリと同じデータベース、ストレージ、キーを使っているアプリはほかにあるか、確かめます。あるなら、いちばん弱いアプリが全体の安全性を決めます。
    TeamOnly では
    対応済み。各アプリには最初のデプロイで専用のデータベース、ファイル保存、シークレットが用意され、セッションの Cookie はそのアプリのアドレスに結びつけられます。アプリがほかのアプリのデータに届くことはありません。
  8. 誰が何をできるかを、サーバーで確認する

    何がまずいか
    AI が承認ボタンをほとんどの人から隠しても、承認のルートはログインした誰にでも開いたまま。あるいはサーバーが、ブラウザから送られた役割やメールを信じてしまう。アクセス制御の不備は OWASP Top 10 の1位です。確認されない入力も似た問題で、マイナスの金額や、テキストボックスから組み立てた SQL クエリなどがあります。
    自分で確かめる
    普通の同僚としてログインし、マネージャーだけができるはずの操作を試します。AIツールに「API のルートごとに、呼んでいいのは誰で、サーバーのどこでそれを確認している?データベースのクエリはすべてプレースホルダーを使っている?」と聞きます。
    TeamOnly では
    一部対応。アプリには検証済みの人(ctx.user)と、ダッシュボードで配った役割(ctx.user.roles)が渡され、偽の本人確認ヘッダーは取り除かれます。指示は AIツールに、クエリのプレースホルダーを使い、入力をサーバーで確認するよう伝えています。各ルートで役割を確認するのは、アプリのコードの仕事です。TeamOnly はそれをレビューしません。
  9. すべてのパッケージが実在し、必要なもの

    何がまずいか
    AIツールは、存在しないパッケージを提案することがあります。攻撃者はその名前でパッケージを公開するので、インストールすると見知らぬ人のコードがアプリの中で動きます。
    自分で確かめる
    package.json を開きます。知らない名前があれば npmjs.com で調べます。本物のパッケージには履歴があり、ソースのリポジトリへのリンクがあり、安定したダウンロード数があります。デプロイの前に npm audit を実行し、アプリがもう使っていないパッケージは削除します。
    TeamOnly では
    対応していません。TeamOnly はパッケージをスキャンしません。アプリが届くのは自分のデータとキーだけなので、悪いパッケージが触れる範囲は限られますが、そのアプリの中ではすべてを読めてしまいます。
  10. 誰が何を変えたかの記録

    何がまずいか
    何かが承認、削除、変更されても、誰がしたのか誰にもわからない。AIで作ったアプリは、頼まない限りめったに履歴を残しません。
    自分で確かめる
    AIツールに、各レコードを誰がいつ作り、最後に変えたかを記録し、承認と削除の履歴テーブルを残すよう頼みます。試してみましょう。レコードを変え、そこに自分の名前があるか確かめます。
    TeamOnly では
    一部対応。ダッシュボードには、すべてのアプリのすべてのデプロイが、誰がいつデプロイしたかとともに表示され、リアルタイムのログもあります。ログはリアルタイムのみで、保存はされません。ログインやアクセス変更の監査ログは Business プランで、一緒に設定します。アプリ内の履歴(誰が経費を承認したか)は、アプリの仕事です。
  11. オーナー、バックアップ、退職時の計画

    何がまずいか
    作った人が辞めても、アプリはその人の個人アカウントで動き続けるか、その人のカードが解約されて止まる。あるいは悪い変更がテーブルを消してしまい、コピーがない。
    自分で確かめる
    アプリのオーナーと、引き継ぐ人を書き出します。コードは会社の Git リポジトリに置きます。AIツールに主なテーブルの CSV エクスポートを追加するよう頼み、試してみます。
    TeamOnly では
    一部対応。アプリは会社のもので、管理者はアプリを新しいオーナーに引き継げます。誰かの会社のアカウントを止めると、新しいログインはできなくなります。すでにログインしている人はセッションが切れるまで入れたままで、その長さは管理者が8時間から30日の間で選べます。今のところダッシュボードにバックアップやエクスポートのボタンはないので、エクスポートはアプリに組み込んでください。

03印刷用

1分でできるチェック

はい・いいえで答える11の質問。「いいえ」があれば、それが次に直すことです。

このアプリを共有する前に

  1. プライベートウィンドウでは、会社のログイン画面だけが表示される。
  2. 個人の Gmail や Outlook のアカウントは締め出される。
  3. このデータが必要な人だけが開ける。
  4. アプリのアドレスを site: で検索しても何も出てこない。
  5. ブラウザのコードにもリポジトリにも、キー、トークン、パスワードがない。
  6. アプリを通さずにデータベースに届かない。
  7. このアプリのデータとキーを、ほかのアプリと共有していない。
  8. 普通の同僚は、マネージャーだけができるはずの操作をできない。
  9. package.json のパッケージはすべて実在し、今も使っている。
  10. レコードに、誰が作り、誰が変えたかが残る。
  11. 私が辞めたら自分がこのアプリのオーナーになると知っている人がいて、データをエクスポートできる。

テキストで欲しい場合は、このページの Markdown 版に、そのまま貼り付けられるリストがあります(英語)。

04IT部門の方へ

誰かが作ったアプリをレビューする

作った人と画面を共有して15分。確かめるのは設定で、コードを1行ずつ読むわけではありません。

  1. どこにあって、誰が届くのか

    アドレスを聞きます。ログインしていない端末と、個人のアカウントから開いてみます。どのプラットフォームでホストされていて、誰のアカウントで支払っているかを聞きます。個人のアカウントなら、まずそこを変えます。

  2. どんなデータを持っているか

    何が入り、それがどこから来るのかを聞きます。顧客の個人データ、決済データ、健康データ、ほかのシステムのパスワードがあれば基準は上がり、アプリを名前のリストに限るべきかもしれません。

  3. キーはどこにあるか

    アプリが呼び出す外部サービスをすべて挙げます。各キーはホストのシークレットの設定にあり、アプリに必要な範囲に絞られ、ほかのアプリと共有されていないべきです。一度でもコードやチャットに載ったキーは、ローテーションしてください。

  4. 誰が何をできるか

    作った人に普通のユーザーとしてログインしてもらうか、同僚に頼んで、管理者の操作を試します。作った人に、AIツールで API のルートごとに、どこで役割を確認しているかを挙げてもらいます。ここの抜けは、アプリのコードで直します。

  5. パッケージとコード

    一緒に package.json を見て、npm audit を実行します。コードを作った人のノートパソコンだけでなく、会社の Git リポジトリに置くよう頼みます。

  6. オーナーと、その人が辞める日

    アプリ、オーナー、予備のオーナー、データ、ユーザーを、アプリの一覧に書きます。オーナーが辞めたときにどうするかを決めておきます。シャドーAIアプリのガイドに、コピーして使える1ページのポリシーがあります。

05よくある質問

よくいただく質問

すべての質問と回答

バイブコーディングで作ったアプリを同僚と共有しても安全ですか?

安全にできます。よくある問題は、アプリの置き場所と設定のしかたにあります。一般公開のリンク、本物のログインがない、ブラウザにキーがある、データベースのルールがオフ。どれも数分で確かめられます。リンクを送る前に、このページのチェックリストを試してください。

バイブコーディングで作ったアプリの、いちばん大きなセキュリティ上のリスクは?

ログインせずに誰でも届くデータです。たいていは2つのうちどちらかで起こります。アプリが一般公開のリンクにあって前にログインがないか、データベースがリクエストに直接応答していてアクセスのルール(Supabase の行レベルセキュリティ)がオフになっているか。どちらも設定の問題で、AIが悪いコードを書いたせいではありません。

Supabase の anon キーをブラウザに置いても安全ですか?

anon キー(publishable キー)はブラウザに置くためのものですが、それは行レベルセキュリティが届く範囲を制限しているからです。あるテーブルで行レベルセキュリティがオフなら、そのキーを持つ誰もがそのテーブルを読み、変更できます。secret キーや service_role キーは決してブラウザに置いてはいけません。すべてのルールを飛ばしてしまいます。

「Google でログイン」で、アプリを自社だけに限定できますか?

それだけではできません。初期設定では、個人の Gmail を含め、どの Google アカウントでもログインできます。Google の hd の設定はアカウントの選択画面を絞るだけで、Google 自身がそれに頼らないよう書いています。アプリのサーバーが、リクエストのたびに、検証済みのログイントークンにあるドメインを確認する必要があります。

アプリが Google にインデックスされているか確かめるには?

Google で site: に続けてアプリのアドレスを検索します。たとえば site:myapp.lovable.app です。ページが出てきたら、アプリは一般公開されていてインデックスされています。アプリを非公開にするか会社のログインの内側に移し、ドメインを所有しているなら、Search Console の削除ツールでページの削除を Google に依頼します。

AIツールに、安全なコードを書くよう伝えるべきですか?

はい。一度頼むより、常に守る指示として渡すほうが効果的です。プロジェクトのルールファイル(CLAUDE.md、AGENTS.md、Cursor のルール)で、キーをどこに置くか、データベースのクエリをどう書くか、役割をどこで確認するかをツールに伝えます。TeamOnly のアプリでは npx teamonly init がこれを追加します。それでもチェックは自分でも行ってください。指示はミスを減らしますが、なくしはしません。

TeamOnly はアプリのコードのセキュリティ問題をスキャンしますか?

いいえ。TeamOnly は、すべてのアプリの前に会社のログインを置き、アプリごとにデータとキーを分け、アプリを検索エンジンから外します。コードのレビュー、パッケージのスキャン、アプリ内のルールの確認はしません。チェックリストのそれらの項目は、引き続きあなたの担当です。

AIで作ったアプリを承認する前に、IT部門は何を確認すべきですか?

どこにホストされていて誰が届くのか、ログインはどう制限されているか、キーはどこにあるか、どんなデータを持っているか、オーナーは誰か、その人が辞めたらどうなるか。このページの「IT部門の方へ」の部分は、作った人と一緒に15分で行える短いレビューです。

アーリーアクセス

開いたドアは、プラットフォームに閉めてもらう。

コマンド1つでデプロイすると、アプリは会社のログインの内側に置かれ、検索から外れ、専用のデータベースとシークレットがつきます。14日間無料で、カード不要で試せます。

14日間無料で試すまたは今すぐ申し込む

トライアルはカード不要。その後は月額 $19 から、いつでも解約できます。

まだ検討中なら、最新情報を

会社のメールアドレスをお使いください。お知らせする価値のあるニュースがあるときだけ、たまにお送りします。

ご質問は hello@teamonly.dev へ。人が返信します。