はじめに
「AIが書いたコードだから絶対正しいはず!」
え、まだAIのコードをレビューなしで本番に入れてるんですか?AIは自信満々に間違いを書くことがあります
この記事で解決すること
動画「【AI】ChatGPTのコードをそのまま本番投入」の補足記事です。
動画では時間の都合で触れられなかった詳細を解説します。
問題:なぜこれが危険なのか
え、まだAIのコードをレビューなしで本番に入れてるんですか?AIは自信満々に間違いを書くことがあります
解決策:明日から使えるベストプラクティス
AIコードは必ず動作確認とセキュリティチェックをしてから使う
❌ 悪い例:AIが生成したコードをそのまま本番へ
一見問題なさそうですが、SQLインジェクションの脆弱性があります。
// AIが生成したコード(レビューなし)
app.get("/user", async (req, res) => {
const id = req.query.id;
// SQLインジェクションの危険
const sql = `SELECT * FROM users WHERE id = ${id}`;
const result = await db.query(sql);
res.json(result.rows);
});
攻撃者が以下のようなURLへアクセスすると...
https://example.com/user?id=1 OR 1=1
実行されるSQL
SELECT * FROM users WHERE id = 1 OR 1=1;
結果
- 全ユーザー情報が取得される
- 個人情報漏洩
- AIは「動くコード」を生成していても、「安全なコード」とは限らない
✅ ベストプラクティス① 動作確認(ユニットテスト)
まずは期待通り動くかをテストします。
// user.test.js
import request from "supertest";
import app from "./app";
test("ユーザー取得API", async () => {
const res = await request(app)
.get("/user?id=1");
expect(res.statusCode).toBe(200);
expect(res.body.id).toBe(1);
});
npm test
最低限、
- 正常系
- 異常系
- 境界値
を確認します。
✅ ベストプラクティス② セキュリティレビュー
SQLは必ずプレースホルダーを使用します。
app.get("/user", async (req, res) => {
const id = req.query.id;
const result = await db.query(
"SELECT * FROM users WHERE id = $1",
[id]
);
res.json(result.rows);
});
これなら入力がSQLとして実行されません。
✅ ベストプラクティス③ AIコードレビュー用チェックリスト
レビュー前に最低限確認します。
☑ 入力値の検証があるか
☑ SQLインジェクション対策があるか
☑ XSS対策があるか
☑ 認証・認可の漏れはないか
☑ エラーハンドリングがあるか
☑ ログにパスワードを書いていないか
☑ ハードコードされた秘密鍵がないか
☑ テストが通るか
✅ ベストプラクティス④ AIによるコード解析も活用する
AIに次のようなレビューを依頼すると、見落としを減らせます。
以下のコードをシニアエンジニアとしてレビューしてください。
観点
- セキュリティ
- パフォーマンス
- 可読性
- 保守性
- バグの可能性
- 改善案
問題があれば修正版も提示してください。
✅ ベストプラクティス⑤ CIで自動チェック
GitHub ActionsでAIコードも含めて自動テストと静的解析を実行します。
name: Code Review
on:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm test
- run: npm run lint
これにより、レビュー前に基本的な品質チェックを自動化できます。
🎯 明日から使えるベストプラクティス
AIは優秀なコーディング支援ツールですが、「正しいコード」を保証するものではありません。
本番へ反映する前に、次の流れを習慣化しましょう。
- AIが生成したコードを人がレビューする
- ユニットテスト・統合テストで動作確認する
- SQLインジェクションやXSSなどのセキュリティを確認する
- Linter・静的解析・CIを通して品質をチェックする
- 問題がないことを確認してから本番へデプロイする
このプロセスを徹底することで、AIの生産性を活かしつつ、安全で信頼性の高いソフトウェア開発を実現できます。
まとめ
AI丸投げを卒業して、AIを『優秀なアシスタント』として正しく使いましょう!
#まだやってるんですか #コードの女神はみた #プログラミングスキル
動画で見る
YouTubeショート動画でも同じテーマを解説しています👇
チャンネル登録・高評価もよろしくお願いします 🔔
この記事は「コードの女神は見た!」チャンネルの連動記事です。