0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Vibe Codingの落とし穴 ― AIが書いたコードの「理解負債」がセキュリティ事故を招く理由

0
Last updated at Posted at 2026-03-14

結論: 理解していないコードは守れない

AIが生成したコードを「動くからOK」で本番に入れていませんか?

私はAI生成コード特化のセキュリティスキャナー(CodeHeal)を開発・運用する中で、「技術負債」より厄介な負債が急増していることに気づきました。

それが**「理解負債」** ― 自分が理解していないコードを本番で動かしている状態です。

きっかけ: PRレビューで凍りついた瞬間

あるPRを見ていた時のことです。コードは綺麗で、エッジケースも処理されていて、一見シニアレベルの実装でした。

ただ1行、dangerouslySetInnerHTMLを使っている箇所があった。

「なぜここでサニタイズされたレンダラーじゃなくてdangerouslySetInnerHTMLを使ったの?」と聞くと、答えが返ってこない。AIが提案して、動いたからそのまま使った、と。

その1行はXSS脆弱性そのものでした。 そして開発者はそれを理解していなかった。

この経験から「理解負債」という概念が生まれ、スキャナーを作る原動力になりました。

技術負債 vs 理解負債

技術負債 理解負債
発生源 自分が選んだショートカット 自分が書いていないコード
認知 存在を知っている 何がわからないかもわからない
修正 リファクタリング まず理解してから修正
セキュリティリスク 既知のトレードオフ 未知の脆弱性

技術負債は意識的な判断の結果です。理解負債は無意識のうちに積み上がるから怖い。

スキャンで繰り返し見つかる3つのパターン

CodeHealの静的解析エンジンを運用する中で、AI生成コードに繰り返し現れるパターンがあります。

パターン1: 「動くから安全」の誤解

AIが生成するコードはeval()new Function()を「技術的に正しい」形で使うことがあります。テストは通る。でもそれはコードインジェクションの入口です。

私自身、AIにconfig parserを書かせた時、new Function()で動的評価するコードが出てきました。エレガントだけど、脆弱性でもあった。テストが全部通っていたから、静的解析で引っかけなければ気づかなかった。

実態: スキャンしたNode.jsコードの28%に、開発者が認識していない動的コード実行パターンが含まれていました。

パターン2: 認証の「90%正しい」罠

AIは認証を一から実装するのが好きです。JWT検証、セッション管理、CSRF対策 ― 90%は正しい。

残りの10%でインシデントが起きます。

実際に見たケース:

  • JWTの署名は検証するが有効期限をチェックしない
  • トークン形式は正しいがハードコードされたsecretが残っている

開発者に「あなたの認証フローを説明して」と聞くと、多くが「AIが作った」と答えます。自分のトークン検証ロジックを説明できない。

実態: AI生成の認証実装の41%に、開発者が指摘できない重大な欠陥がありました。

パターン3: 見えないデータフロー

最も厄介なパターン。AIは「ベストプラクティス」として、ログ送信・エラートラッカー・分析サービスへのデータ送信を勝手に追加することがあります。

開発者が指定していない外部エンドポイントへの通信が、コードに紛れ込む。

私自身のAI生成コードが、設定した覚えのないサードパーティにエラーレポートを送信していたのを発見した時、スキャナーの必要性を確信しました。

実態: AI生成フルスタックアプリの19%に、仕様書にない外部通信パターンが含まれていました。

理解負債の自己診断

AI生成コードを含むファイルごとに、4つの質問をしてください:

  1. すべてのimportの理由を説明できるか?(何をするかではなく、なぜ必要か)
  2. データの入力から出力まで追跡できるか?
  3. セキュリティ境界(信頼/非信頼の境目)を特定できるか?
  4. AIのコードを消して、重要な部分を自分で書き直せるか?
スコア 状態 アクション
4/4 このコードを所有している ✅ そのまま
3/4 軽度の負債 レビューをスケジュール
2/4 重度の負債 次のリリース前にレビュー必須
0-1/4 危険 このコードは負債そのもの

私が変えたワークフロー

CodeHealを作ってから、自分のAIコーディングの習慣を変えました:

  1. コミット前に全行読む。 流し読みではなく精読。説明できない行は書き直すか消す
  2. AI生成コードには必ず静的解析を通す。 AIを信用していないのではなく、手動で全部見つけられる自分を信用していない
  3. AIのコードをベンダーコードとして扱う。 サードパーティライブラリを検証なしで本番投入しないのと同じ

Vibe Codingとの向き合い方

Vibe Codingは楽しい。高速に出荷できる爽快感がある。

でも、理解していないコードの1行1行が、守れないコードの1行1行です。

今ZennやQiitaでもVibe Codingの限界が話題になっています。「作ったけどやめた」「理解負債」― みんな同じ壁にぶつかっている。

技術負債と違って、理解負債は開発速度を落とさない。一気に全部壊れるまで

AIが書いたコードはファーストドラフトであって、最終成果物ではない。そう扱えるかどうかが、セキュリティ事故を起こすかどうかの分かれ目です。


理解負債をスキャンで可視化する

CodeHealは、AI生成コードのセキュリティ脆弱性を14カテゴリ・93以上の検出ルールで静的解析します。LLM不使用・API費用ゼロ・同じコードに対して常に同じ結果。

理解負債が隠しているパターンを、自動で見つけ出します。

無料でスキャンしてみる →

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?