{
  "schemaVersion": "1.0",
  "language": "ja",
  "canonicalUrl": "https://catalysphere.co.jp/articles/ai-code-security-review/",
  "machineReadableUrl": "https://catalysphere.co.jp/articles/ai-code-security-review/index.json",
  "publisher": {
    "name": "Catalysphere",
    "url": "https://catalysphere.co.jp/",
    "description": "AIとビッグデータを研究し、実務へつなぐリサーチ＆コンサルティングスタジオ。"
  },
  "article": {
    "slug": "ai-code-security-review",
    "title": "AIが書いたコードは、速さと安全を分けて審査する",
    "titlePhrases": [
      "AIが書いたコードは、",
      "速さと安全を分けて審査する"
    ],
    "summary": "生成コードの生産性を安全性へ読み替えず、脆弱性、利用者の安全認識、静的・動的検査、独立レビューを高影響コードの採用門にします。",
    "takeaways": [
      "コード生成が速くても、脆弱性が少ないとは限らず、課題や提案選択で結果は変わります。",
      "利用者が安全だと感じることと、実際の脆弱性を検査で減らせたことは別の指標です。",
      "認証、暗号、入力処理などは、生成元の記録、専用試験、独立レビューを採用条件にします。"
    ],
    "publishedAt": "2026-07-16",
    "updatedAt": "2026-07-24",
    "readingMinutes": 12,
    "topics": [
      "ソフトウェア開発",
      "AIセキュリティ",
      "品質保証"
    ],
    "domains": [
      "generative-ai",
      "governance-risk"
    ],
    "evidenceKind": "research-review",
    "status": "published",
    "image": {
      "prompt": "Abstract scientific editorial illustration for the research question “AIが書いたコードは、速さと安全を分けて審査する”, interpreted symbolically rather than typographically: a branching signal field with explicit verification gates, separating an unstable dashed route from a resilient and recoverable gold route; deep Catalysphere navy and indigo field, muted scientific blue, restrained antique-gold structure, translucent geometry, fine particles, subtle paper grain, generous negative space, one clear centered metaphor that survives a narrow mobile cover crop, calm premium research-journal art direction, no readable text, no logo, no literal chart, no photorealistic people.",
      "negativePrompt": "text, letters, numerals, watermark, logo, dashboard UI, humanoid robot, server rack, binary rain, stock-photo office, literal quantitative chart, red alarm graphics, neon cyberpunk, purple gradient, clutter",
      "alt": "分岐する信号場を検証点が選別し、不安定な経路と復旧可能な金色の経路を分ける抽象図",
      "aspectRatio": "16:9",
      "assetPath": "article-art/ai-code-security-review.png",
      "status": "approved"
    },
    "lead": "コード補完は、空白を埋め、定型処理を作り、実装の出発点を速くします。ところが、もっともらしく動くコードは安全なコードと同義ではありません。AI支援を評価するなら、完了時間と同じ厳密さで、脆弱性の混入、利用者の過信、レビューでの発見可能性を測る必要があります。",
    "sections": [
      {
        "heading": "生産性から安全性を推定しない",
        "paragraphs": [
          "Pearceらは、GitHub Copilotが生成した多様なセキュリティ関連シナリオのコードを分析し、相当割合に脆弱性が含まれることを報告しました。[1] 研究は特定時点のモデルと課題を扱うため、現在の全支援ツールへ同じ比率を外挿できません。",
          "重要なのは、AIが常に危険だという結論ではなく、機能するコードを提示する能力が安全性を保証しない点です。コンパイル成功、単体試験通過、レビュー承認は、それぞれ異なる欠陥を見ます。一つを他の代理にしません。",
          "開発評価では、時間、機能品質、保守性、セキュリティを別々に記録します。短縮時間があっても、脆弱性修正と追加確認で相殺される場合があります。安全性下限を破る区分は、生産性が高くても拡大しません。",
          "対象をコード行数で区切らず、認証、権限、暗号、入力検証、秘密情報、外部通信という影響面で分類します。短い一行でも権限境界を壊すことがあるためです。"
        ],
        "bullets": [
          "機能：要求どおり動くか",
          "安全：既知の脆弱性と悪用経路を抑えたか",
          "保守：依存関係と意図を追跡できるか",
          "総費用：生成後の検査・修正・再審査を含むか"
        ]
      },
      {
        "heading": "利用者の安全認識も測る",
        "paragraphs": [
          "Perryらの実験では、AI支援を使った参加者のコードが一部課題でより安全でない結果となりながら、参加者は自分のコードを安全だと考えやすい傾向が報告されました。[2] 実際の品質と主観的確信のずれは、レビュー省略を招き得ます。",
          "この結果は、すべての開発者やツールが過信することを意味しません。参加者、言語、課題、支援モデルが限定され、経験による差もあります。[2] したがって、自社では脆弱性数だけでなく、生成部分の識別と確認行動を測ります。",
          "レビュー画面でAI生成箇所を隠すか示すかには利点と欠点があります。表示は注意を促す一方、AI以外の箇所を安全と誤認させる可能性があります。全コードを同じ基準で検査しつつ、生成元は追跡と改善に使います。",
          "自己申告の自信度は、教育の入口にはなりますが承認根拠にしません。高い自信と検査不合格が重なる領域を特定し、具体的な反例と修正理由をフィードバックします。"
        ]
      },
      {
        "heading": "反対結果から適用境界を学ぶ",
        "paragraphs": [
          "Sandovalらの学生を対象にしたC言語課題では、AI支援群が対照群より明確に大きなセキュリティ悪化を示さない結果も報告されています。[3] AI支援の安全影響が常に一方向という単純な物語を、この証拠は支持しません。",
          "研究間の違いには、参加者、課題、言語、AIへの質問方法、評価規則があります。[1] [2] [3] 相反する結果を平均して安心または危険と決めず、どの条件で差が生じたかを自社の利用場面へ写します。",
          "特に、AIが完全な関数を作る場合と、開発者が提案を選びながら小さく補完する場合では責任経路が違います。採用された提案だけでなく、却下・修正した提案も標本化し、選択行動を含めて評価します。",
          "経験者が使うから安全とも限りません。熟練者は誤りを見抜きやすい一方、速度を優先して確認を省く可能性もあります。経験層別に、発見率、修正時間、過信、重大欠陥を見ます。"
        ],
        "bullets": [
          "課題：入力処理、認証、暗号、メモリ安全性を分ける",
          "利用形態：補完、関数生成、対話修正を分ける",
          "経験：初学者と熟練者の発見・修正を比較する",
          "選択：採用、修正、却下された提案を追跡する"
        ]
      },
      {
        "heading": "検査を一つの道具へ寄せない",
        "paragraphs": [
          "静的解析は既知パターンを広く探せますが、業務ロジックや実行時の権限関係をすべて理解しません。動的試験は実行経路を確認できますが、通らない経路を見逃します。依存関係検査と秘密情報検査も別の欠陥を扱います。",
          "AI生成コードにだけ特別な検査をかけ、手書き部分を除外しません。生成元にかかわらず同じ下限を適用し、AI由来タグは追加の重点化に使います。部分的な再生成でタグが失われないよう、変更履歴へ結びます。",
          "セキュリティ試験の失敗を、モデルへの再質問だけで直させないようにします。修正が別の脆弱性を生む可能性があるため、原因、対策、再試験を人が確認します。自動修正は差分と根拠を残します。",
          "検査で見つからない未知脆弱性が残ることを前提に、最小権限、秘密分離、入力制限、監視を実行環境へ置きます。コード審査だけで防御を完結させません。"
        ]
      },
      {
        "heading": "高影響コードへ強い採用門を置く",
        "paragraphs": [
          "認証、支払い、個人データ、インフラ変更へ触れるコードは、一般的な定型処理より失敗影響が大きい領域です。AI利用を禁止するか自由化するかではなく、影響に応じて生成、試験、レビュー、リリース権限を段階化します。",
          "高影響区分では、生成に使った入力、参照資料、モデル版、採用差分、検査結果、独立レビュー者を保存します。機密情報をプロンプトへ送らない統制も同時に確認します。安全な出力でも入力漏えいがあれば採用できません。",
          "独立レビューは名義だけでなく、生成者と別の人が要件と脅威を確認し、却下権を持つことです。レビュー時間が足りない場合、納期を理由に承認へ倒さず、対象範囲を縮小します。",
          "例外承認には期限と補償統制を付けます。期限切れの例外を恒久ルールへ変えず、追加検査、権限制限、監視、置換計画を追跡します。"
        ]
      },
      {
        "heading": "失敗をモデルと工程へ戻す",
        "paragraphs": [
          "本番で見つかった脆弱性は、モデルの失敗だけに分類しません。要求の欠落、危険なサンプル、レビューの見逃し、検査設定、権限過大を分けます。原因ごとに所有者が異なります。",
          "回帰集合には、実際の欠陥構造を秘密情報なしで残します。正しいコードを生成できるかだけでなく、危険な要求を拒否または確認できるか、修正が別機能を壊さないかを試します。",
          "運用指標はAI採用率ではなく、重大欠陥の流出、レビュー前発見率、修正再発率、確認時間、例外滞留です。採用率を目標にすると、危険な提案の却下が不利な行動になります。",
          "AIコード支援の価値は、速く書くことだけではありません。検査可能な小さな差分を作り、危険な箇所を説明し、人が安全に却下できるなら価値があります。その条件を満たす工程ごと承認します。"
        ]
      },
      {
        "heading": "ツール更新と依存関係を再審査する",
        "paragraphs": [
          "コード支援モデルが更新されれば、同じ指示でも別のライブラリ、API、例外処理を提案し得ます。モデル名だけでなく提供版と設定を記録し、更新後は高影響の回帰集合を再実行します。",
          "提案された依存パッケージは、存在、保守状態、ライセンス、既知脆弱性を確認します。もっともらしい架空パッケージや名前の似た悪意パッケージを、生成コードの一部として自動導入しません。",
          "AIが古いAPIを提案した場合、機能試験に通っても将来の更新で壊れる可能性があります。公式文書の対象版と照合し、非推奨機能、保守期限、置換計画をレビューへ含めます。",
          "外部ツールへソースを送る際は、秘密、個人情報、顧客コード、契約上の持出し制限を確認します。出力コードの安全だけでなく、生成過程で入力を漏らさないことを同じ採用門にします。",
          "供給元が更新内容や保持条件を開示できない場合、利用範囲を低影響コードへ限定します。便利さを理由に監査不能を受け入れず、代替ツールと手作業の復旧経路を維持します。",
          "リリース票は、ツール版・依存関係・対象リポジトリを識別欄に、重大脆弱性と秘密情報露出は許容ゼロ、一般欠陥と復旧時間は上限、品質調整後完了量は下限として記録します。重大事象を一件でも検出するか他の限界を外れた高影響コードは、生成と自動承認を止めて標準レビューへ戻します。独立スキャンと手作業への復旧演習に合格し、影響変更を追跡できたことをAppSec責任者が承認してから再開します。"
        ]
      }
    ],
    "note": "三研究はモデル、プログラミング言語、課題、参加者、脆弱性評価が異なり、報告結果も一方向ではありません。[1] [2] [3] 特定研究の脆弱性割合を現在の製品へ直接外挿せず、自社のコード種別と開発工程で再評価してください。脆弱性が検出されなかったことは安全の証明ではなく、実行環境の最小権限と継続監視を別に維持する必要があります。依存関係とモデル更新後にも同じ審査を繰り返します。",
    "sources": [
      {
        "id": 1,
        "authors": "Hammond Pearce, Baleegh Ahmad, Benjamin Tan, Brendan Dolan-Gavitt, Ramesh Karri",
        "year": 2025,
        "title": "Asleep at the Keyboard? Assessing the Security of GitHub Copilot's Code Contributions",
        "venue": "Communications of the ACM, 68(2), 96–105",
        "url": "https://doi.org/10.1145/3610721",
        "finding": "複数のセキュリティ関連シナリオで生成コードを分析し、相当部分に脆弱性が含まれることを報告した。",
        "limitation": "特定時点のCopilot、言語、構成課題への評価で、現行製品や実際のレビュー工程の結果を示さない。"
      },
      {
        "id": 2,
        "authors": "Neil Perry, Megha Srivastava, Deepak Kumar, Dan Boneh",
        "year": 2023,
        "title": "Do Users Write More Insecure Code with AI Assistants?",
        "venue": "Proceedings of the 2023 ACM SIGSAC Conference on Computer and Communications Security",
        "url": "https://doi.org/10.1145/3576915.3623157",
        "finding": "利用者実験で一部課題の安全性悪化と、AI支援利用者が自分のコードを安全と考えやすい傾向を報告した。",
        "limitation": "参加者、課題、支援モデルが限定され、すべての開発者・言語・利用方法へ一般化できない。"
      },
      {
        "id": 3,
        "authors": "Gustavo Sandoval, Hammond Pearce, Teo Nys, Ramesh Karri, Siddharth Garg, Brendan Dolan-Gavitt",
        "year": 2023,
        "title": "Lost at C: A User Study on the Security Implications of Large Language Model Code Assistants",
        "venue": "32nd USENIX Security Symposium",
        "url": "https://www.usenix.org/conference/usenixsecurity23/presentation/sandoval",
        "finding": "学生によるC言語課題で、AI支援群が対照群より明確に大きなセキュリティ悪化を示さない結果を報告した。",
        "limitation": "小規模な学生標本と単一課題で、専門開発や高影響システムの安全性を保証しない。"
      }
    ],
    "visual": {
      "eyebrow": "CODE GENERATION / SECURITY",
      "title": "生成できることと、安全であることを分ける。",
      "caption": "各研究の観測条件は異なります。横並びの優劣ではなく、評価設計と運用判断の出発点として参照してください。",
      "metrics": [
        {
          "value": "CODE RISK",
          "label": "複数シナリオで確認された脆弱な生成コード",
          "source": "Pearce et al., 2023",
          "referenceId": 1
        },
        {
          "value": "OVER TRUST",
          "label": "安全性への自己評価が高まる傾向",
          "source": "Perry et al., 2023",
          "referenceId": 2
        },
        {
          "value": "MIXED EVIDENCE",
          "label": "課題と対象で変わる安全性の差",
          "source": "Sandoval et al., 2023",
          "referenceId": 3
        }
      ]
    },
    "url": "https://catalysphere.co.jp/articles/ai-code-security-review/",
    "machineReadableUrl": "https://catalysphere.co.jp/articles/ai-code-security-review/index.json",
    "topicFacets": [
      {
        "id": "ai-systems",
        "name": "AIシステム",
        "url": "https://catalysphere.co.jp/topics/ai-systems/"
      },
      {
        "id": "safety-resilience",
        "name": "安全性・レジリエンス",
        "url": "https://catalysphere.co.jp/topics/safety-resilience/"
      },
      {
        "id": "evaluation-measurement",
        "name": "評価・測定",
        "url": "https://catalysphere.co.jp/topics/evaluation-measurement/"
      }
    ]
  }
}
