一人前エンジニア道場

AI活用開発演習 / 約20分

AI出力のリスク管理

なぜこれを学ぶか

AIはコードを生成しますが、「正確さ」「最新性」「セキュリティ」を保証しません。このレッスンではAI出力の3大リスク(ハルシネーション・古い情報・セキュリティ脆弱性)を学び、AIが書いたコードを本番に出す前のチェックポイントを身につけます。

ハルシネーション(幻覚)とは: AIが「もっともらしいが間違い」の情報を自信満々に生成する現象。存在しないAPIメソッド名・誤った仕様・架空のライブラリなどが代表例。「エラーになった」「ドキュメントに載っていない」ときはハルシネーションを疑う。

古い情報の問題: 言語モデルの学習データには「カットオフ日」があります。Node.jsのLTSバージョン・ライブラリのAPIの破壊的変更・廃止された書き方などは、AIが古いバージョン基準で答えることがあります。バージョン依存の情報は必ず公式ドキュメントで確認する。

AIが生成するセキュリティリスク(代表例): ❶SQLインジェクション — "SELECT * FROM users WHERE id = " + userId のように直接文字列結合するパターン。❷ハードコードされた秘密情報 — APIキー・パスワードをコードに直書き。❸入力値無検証 — フォームやリクエストボディの値を検証せず直接使う。❹エラーの露出 — スタックトレースやDB情報をそのままレスポンスに返す。

AI出力のチェックポイント10項目: ①APIメソッドは実在するか(公式ドキュメントで確認)②ライブラリバージョンが合っているか ③SQLはプレースホルダーを使っているか ④APIキー・パスワードが直書きされていないか ⑤ユーザー入力を検証しているか ⑥エラーメッセージが外部に漏れないか ⑦エッジケース(null/空/境界値)を試したか ⑧非同期処理でawaitが漏れていないか ⑨TypeScriptならany型の多用がないか ⑩既存コードの命名規則・スタイルに合っているか

「AIはコパイロット(副操縦士)」の心構え: 飛行機のコパイロットは操縦を補助しますが、最終判断は機長がします。AIもコードを提案しますが、それが正しいかの最終判断はあなたです。AIを使う時間分、検証スキルへの投資が重要になります。

重要ポイント

  • ハルシネーション: AIは「もっともらしい間違い」を生成する。エラーになったら真っ先に疑う
  • 学習データには賞味期限がある。バージョン依存情報は公式ドキュメントで確認
  • SQLインジェクション・ハードコードされた秘密情報・入力無検証に特に注意
  • AIはコパイロット。コードの最終責任者はあなた自身

理解度チェック

選ぶと即座に解説が表示されます。

生成AIに「Node.js で MySQL にクエリを投げる関数を書いて」と頼んだら以下のコードが返ってきた。最も重大な問題は?

ヒントを見る

userId がブラウザのフォームから来る場合、ユーザーが任意の文字列を入れられます。

コードレビュー演習

AIが生成した「ユーザー情報取得API」のコードです。 セキュリティの観点で問題を見つけ、最も重大なリスクを選んでください。

/* === AIが生成したコード(疑似出力)=== */

// Node.js + mysql2 によるユーザー情報取得
async function getUserById(userId) {
  // ① SQLを文字列結合で生成
  const sql = "SELECT * FROM users WHERE id = " + userId

  try {
    const [rows] = await conn.query(sql)
    if (rows.length === 0) {
      return { error: 'User not found' }
    }
    return rows[0]
  } catch (err) {
    // ② エラー情報をそのまま返している
    return {
      error: err.message,
      stack: err.stack,
      query: sql,
    }
  }
}

// APIキーの設定
const DB_PASSWORD = 'mySecretPass123'  // ③ パスワードが直書き
const conn = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: DB_PASSWORD,
  database: 'myapp'
})

このコードに3つのセキュリティ問題が含まれています。「最も即座に悪用される危険性が高い」問題はどれ?

ヒントを見る

攻撃者が外部から「入力を操作」できる問題に注目してください。

スキルセルフチェック

このレッスンの内容をどの程度理解できましたか?