AIでコードを書くには“放飛”する勇気と“損切り”する勇気が必要――私のvibe coding安全実践の心得
個人の経験と思考から、vibe codingのセキュリティ注意点(キーの漏洩や誤ってデータベースを削除するリスクなど)と実践例について考察します。

はじめに
私が初めて“vibe coding”を試した時、新しい世界の扉が開いたようでした。一言入力するだけで AI が自動的にコードを補完し、頭の中にあるあらゆるアイデアを実現してくれます。小さなスクリプトから Web サービスまで、ニーズが動くコードに変わる様子は確かに中毒性があります。しかし、徐々に現実の副作用も目の前に現れ、“思いとどまる”必要を痛感しました。キーの漏洩、誤って本番データベースを削除、テスト用パッケージの本番環境への混入……こうした“失敗体験”によって、AI でのコーディングは楽しいが vibe coding は素晴らしいものであるものの、最低限の安全基準を忘れれば、軽微な場合はリソースの浪費、重大な場合は甚大な損失を招くことを強く認識しました。
では、どうすれば vibe coding の効率と自由を享受しつつ、安全リスクを最大限に回避できるのでしょうか?本稿は、私の実践での“失敗”体験を踏まえ、AI 支援コーディングにおけるよくあるセキュリティの盲点と実践的な対策を深くまとめ、vibe coding に挑戦したい、または既に深く実践している皆様の参考や警鐘になれば幸いです。
本文
1. Vibe coding は安全な「ショートサーキット」からどれくらい離れているのか?
AI 駆動の vibe coding の本質は「自然言語+自動補完」で、直感的なアイデアを開発のリズムとして推進し、従来の「設計-コード記述-テスト-リリース」という各段階のプロセス感を弱めています。確かにこれにより、イノベーションやプロトタイプ作成の爆発力は増し、技術的なハードルを大きく下げましたが、あまりにスムーズすぎるため、私たちは無意識に重要なセキュリティ操作への注意を緩めてしまいます——
- コードが動けば=コードが安全とは限らない。 多くの AI 生成コードは「動作可能」にすることに重点を置き、例えば入力検証、権限確認、例外処理、API 呼び出し頻度制限などの基本的なセキュリティ対策を無視しています。
- 「理解できていない」箇所こそリスクが最大。 多くの場合、AI は「パズル」のようにコード構造を組み合わせて機能を形成しますが、私たち人間が審査する際、隠れたリスク(危険なオブジェクトの直接露出、キーの残存、依存の悪用など)が層層に積み重なった自動呼び出しの中に見落としがちです。
- AI は「言われたことしかしない」ので、安全要件を伝えなければ勝手に補完されない。 例えば多くの人は単に「ファイルアップロードを実装せよ」と書きますが、LLM はそのまま動くが危険なファイルアップロードインターフェースを出力し、任意ファイル種別やパス・トラバーサルなど問題が頻発します。
- AI は「安全でない」世界で訓練されている。 LLM の訓練データは多くがパブリックなネットから取られており、その中にはセキュリティ意識の低いコードも多数含まれています。明示的な要求をしなければ、AI はこれら“不良知見”をこっそりと再利用してあなたのプロジェクトに混入します。
私自身の経験もこうした懸念を裏付けています。例えばあるプロジェクトで、AI にログインと決済機能を構築させたところ、コードが API キーやデータベース設定をそのままフロントエンドに埋め込み、GitHub へアップロードした直後にセキュリティスキャンで警告が飛びました。あの時発見が遅ければ、数千円分の API 利用枠があっという間に使い果たされていたでしょう。
2. 実例:失敗を経験しなければ真の“vibe coder”とは言えない
「AI は一晩で神にも、一晩でゼロにもさせる」とよく言われます。ここでは私が実際に遭遇した典型的なセキュリティの落とし穴を 2 つ振り返ります。
ケース 1:キーの漏洩
第三者 API のキーを.env
に書き、.gitignore
も設定しました。しかし vibe coding モードで AI が自動的に env 関連設定をコードに埋め込み、ビルド後にキーがユーザーに丸見えになりました。
反省点と対策:
- すべてのキーやトークンなどの機密情報はサーバーサイドでのみ管理し、環境変数でコントロール。
.env
ファイルなどはコードやフロントエンド、Git リポジトリに絶対に含めてはいけません。 .gitignore
と重要ディレクトリの読み書き権限を適切に設定し、キーのローテーションと定期監査を推進します。.clineignore
など対応ツールの ignore ファイルも設定しましょう。- GitGuardian、Snyk、GitHub Secret Scanning などのキー監査ツールで漏洩を自動検出します。
ケース 2:誤ってデータベースを削除——誰があなたの「ロールバック」を受け止めるのか?
AI の自動支援でデータベース構造を変更。デプロイ時に AI が「テーブル再構築する」と言うので承認したところ、テストデータベースのデータが全消去されました。幸い本番への影響はありませんでしたが、テスト DB の管理すら手間がかかり、また AI 生成の非互換スキーマが本番 DB で実行されれば業務停止は免れません。
反省点と対策:
- 開発・テスト・本番環境を厳格に区分けし、データベース移行などの危険な操作は多重承認とバックアップを自動トリガー化。
- すべての自動化変更フローには CI/CD での承認と“冷却期間”を設けることを義務化。
- 業務操作には「ロールバック」機構を明確にし、定期的に演習します。すべての環境で定時自動バックアップを設定。
3. vibe coding 下での安全な「門番」体制をどう作るか?
何度も痛い目を見た経験から、vibe coding の実環境に適した安全体系を段階的に築きました。以下の原則と実践は、私がアグレッシブなイノベーションと冷静な自己反省の“綱渡り”で試行錯誤し、改善・進化させたものです。
A. セキュリティ意識が最初の防波堤
AI がどんなに“頭が良く”ても、出力コードは「デフォルトでリスクあり」と想定する。リリース前には常に自分自身がハッカーの目線で“安全監査”を実施:
- SAST、依存関係チェック、キー検出ツール(Snyk、SonarQube、Checkmarx、Dependabot など)で自動検証。
- コードレビューは妥協しない、一行ずつ精査。特に AI 生成や大量変更箇所は重点チェック。習慣化すべきは:コードは AI が書いても最終判断は必ず人間が!
- 不正・悪意ある入力や権限境界をカバーするテストケース必須。AI が生成した“ハッピーケース”だけで満足しない。
B. “ヒューマンミス防止”の設定と規範で AI 失敗の余地を減らす
多くのセキュリティ事故は悪意ではなく、不注意や無自覚な操作。プロセスとガイドラインで影響を最小化:
- git コミット前には必ず
.env
、config
、DB データなど機密情報の ignore や保護を実施。 - 環境変数や Secrets Vault で敏感データを一元管理、ハードコーディング禁止。
- API・DB アクセス権限は最小権限、階層的に設定。権限は少なければ少ないほど安全。
- AI 向け“ルールファイル”(Cursor の rules、Copilot の custom instructions 等)を用い、安全の最低限を定義。eval 禁止、危険な IO 禁止、未検証パラメータの受け入れ禁止など。
C. AI との“交渉”は明確なセキュリティ指示文が鍵
AI は「言われたことだけやる」ので、secure prompt は極めて重要。例えば:
- 「安全なファイルアップロード実装。画像のみ、最大 5MB、ファイル名はランダム処理で安全なディレクトリに保存。」
- 「すべての API エンドポイントに認証・権限検証・適切なレート制限を設けること。」
- 「以下のコードに入力検証や SQL インジェクション、XSS があれば指摘・修正してください。」
(チームで安全 prompt リストを共有し、盲点を減らすのも推奨)
D. CI/CD のセキュリティフローと運用監視は不可欠
自動スキャン・監視は災害防止とポストモーテム対策の第2の保険:
- 毎回のコードマージやリリース前に、安全リント・依存安全検査・キー検出を自動実行。
- 自動ロールバックやディザスタリカバリ機構。プレリリース・本番・敏感操作権限は厳格に分離。
- 本番環境では必ずログ収集・集中監視・アラート体制を整え、異常トラフィックや不正利用を即検知。
E. 復元可能性こそ真の安心:バージョン管理とコードロールバック
vibe coding の高速開発・イテレーションでは、誤ってコード・データ・依存関係を破壊しやすい。実践から得た教訓:
- バージョン管理(git など)は必須で断固守り、コミットは小刻みに迅速に。
- 重要変更は undo やスナップショットがあること。コードのプッシュとロールバックは制度化。
- Cursor や Goose など AI ツールは“承認モード”で使い、勝手な大量自動改変を排除。
4. 私の“vibe coding 安全チェックリスト”
以下は私が自分用にまとめた安全リストの一例です。ご参考になれば幸いで、補足も歓迎します:
- キー・機密データ管理:全てのキーは.env とバックエンドのみ。フロントエンド・コードリポジトリに絶対含めない。定期チェックとローテーション実施。
- 自動化安全検査:SAST、依存関係安全、秘密検出ツールを設定し、CI で強制検査。
- 入力・パラメータ検証:すべてのユーザー入力は検証・サニタイズし、バックエンドも緩めない。
- 認証・権限境界:API は非公開が原則、トークン検証明確化、ユーザーができることを限定。
- レート制限とブルートフォース防止:すべてのアカウント・重要 API にレート制限設定、DoS/ブルートフォース攻撃対策。
- ログ・バックアップ:操作や例外・アラートは必ずログ化し、重要データは定期バックアップ。
- コードバージョン管理:git は標準運用で、小刻みコミット、必ず復元可能。
- 本番環境隔離:環境ごとに区切り、危険な操作はデフォルトアラート&多段階承認。
- 安全 prompt とルールファイル:AI 協働時は安全最優先で明示的に指示。
- 定期セキュリティ監査:月 1 回は人工もしくは自動でコードと依存を大規模チェック。
おわりに
vibe coding は恐るべき存在ではありません。AI アシスタントの“お手軽”補完と中毒的な効率は、私たちの開発の天井を確実に押し上げました。しかし安全と責任は絶対に置き去りにできない土台です。踏んだ失敗やゾッとする瞬間は、成熟した“セキュリティエンジニア”への変革の糧です。AI と共に踊るときは、クリエイティブに大胆になりながらも、損失が出る前にしっかり止め、最後の防波堤を守りましょう。
より安全な姿勢と責任感で、vibe coding がもたらす変革と恩恵を存分に享受していきましょう。頑張れ、セキュリティとイノベーションの両立を目指す AI 開発者たち!
FAQ
Q1: AI が書いたコードは本当に安全ですか?
いいえ。AI は指示や学習データに基づいて一見使えるコードを出力するだけで、明確に指示しない限り安全対策は自動で行いません。無検証で自動リリースすると非常にリスクがあります。
Q2: 鍵の漏洩を防ぐには?
すべての鍵や秘密情報は後端の環境変数やシークレットマネージャーにのみ保存し、コード・フロントエンド・リポジトリや公開可能ディレクトリには絶対に置きません。コミット内容は定期チェックしてキーのローテーションを行います。
Q3: 「誤ってデータベースを削除」などの災害を防ぐ経験は?
敏感操作を自動ワークフローに入れず、すべての DB 移行・削除に多段階承認と自動バックアップを義務化。物理的に本番環境と開発/テスト環境を分離。
Q4: AI コーディング時に安全を意識させるには?
prompt で明確に「安全」「注入防止」「合法な入力」「レート制限」「コードレビュー」など要求。AI ツールがサポートするルールファイルやカスタム prompt で安全要件を集中宣言。
関連資料
- Vibe Coding Security Top 10 | Vibe Security
- Secure Vibe Coding Guide | CSA
- Security in Vibe Coding: The most common vulnerabilities and how to avoid them - ZeroPath Blog
- Secure Vibe Coding: The Complete New Guide - The Hacker News
- Rules Files for Safer Vibe Coding - Wiz Blog
- Fundamentals of web security for vibe coding - cased.com
- Vibe coding service Replit deleted user’s production database, faked data, told fibs galore - The Register
- Security Checklist and Prompt For Vibe Coders
- Securing AI-Driven Vibe Coding in Production - Ardor Cloud