まず結論
AI生成コードは、動きそうに見えることと、安全に動くことが別です。
AIは便利ですが、次のようなコードを出すことがあります。
- 存在しないAPIを使う
- 古い書き方を混ぜる
- エラー処理がない
- セキュリティ前提が弱い
- テストされていない
- プロジェクトの既存方針と合わない
そのまま貼る前に、確認する観点を持つことが大切です。
存在しないAPI
AIは、ありそうなAPI名を作ることがあります。
例:
database.connectSecurely();
それらしく見えても、実際のライブラリに存在しない可能性があります。
確認すること:
- 公式ドキュメントにあるか
- 型補完で存在するか
- 実行するとエラーにならないか
- バージョンが合っているか
古い書き方
AIは古い記事や過去のコードパターンを混ぜることがあります。
よくある例:
- 古いフレームワークAPI
- 非推奨の設定
- CommonJSとES Modulesの混在
- 古い認証方式
- 古いセキュリティ推奨
導入前に、プロジェクトのバージョンと公式ドキュメントを確認します。
セキュリティ
AI生成コードで特に注意する場所:
- ユーザー入力
- 認証・認可
- Cookie
- localStorage
- SQL
- ファイルアップロード
- 外部APIキー
危ない例:
const query = `SELECT * FROM users WHERE name = '${name}'`;
文字列連結でSQLを作ると、SQLインジェクションの危険があります。プレースホルダーやORMの安全なAPIを使います。
エラー処理
AIは成功例だけを書きがちです。
確認すること:
- APIが失敗した時
- 値がnullの時
- 配列が空の時
- 権限がない時
- ネットワークが切れた時
- ファイルが存在しない時
成功パターンだけでなく、失敗パターンを考えます。
既存コードとの整合性
生成コード単体が正しくても、プロジェクトに合わないことがあります。
見ること:
- 既存の命名規則
- エラーハンドリング方針
- UIコンポーネントの使い方
- ディレクトリ構成
- 型定義
- テスト方針
新しい書き方を突然混ぜると、保守しにくくなります。
テストする
AI生成コードは、実行して確認します。
最低限:
npm run build
プロジェクトによっては、lint、typecheck、testも実行します。
画面の動作確認だけでなく、異常系も試します。
実践メモ: AIに「このコードの危険な前提を列挙して」と聞くと、生成後のチェックに使いやすいです。
まとめ
AI生成コードは、存在しないAPI、古い書き方、セキュリティ、エラー処理、既存方針とのズレを確認します。
AIは速く書くための道具ですが、責任を持って動かすのは開発者です。生成、確認、修正、テストまでをセットで扱います。