AIの出力を検証する
AIは強力なツールですが、間違えることもあります。AIの出力を鵜呑みにせず、適切に検証することで、高品質なコードを維持できます。
AIが間違えやすいパターン
1. 存在しないAPIやライブラリの使用
AIは学習データに基づいて予測するため、実際には存在しない関数やメソッドを提案することがあります。
# 実際には存在しないメソッドを提案することがある response = requests.get(url).json_auto_parse() # ← 存在しない
確認方法: 公式ドキュメントで関数名を検索、または実際に実行して確認
2. バージョン違いによる非互換コード
古いバージョンの書き方や、まだリリースされていない新機能を使うことがあります。
# Next.js 12 の書き方を Next.js 14 で提案することも
export async function getServerSideProps() { } # App Router では非推奨
確認方法: 使用中のバージョンを明示的に伝える、公式のマイグレーションガイドを確認
3. セキュリティ上の問題
SQLインジェクション、XSS、機密情報のハードコードなど、セキュリティ的に問題のあるコードを生成することがあります。
# 危険なパターン
query = f"SELECT * FROM users WHERE id = {user_input}" # SQLインジェクション
API_KEY = "sk-xxxxxxxxxxxx" # ハードコードされた機密情報
確認方法: OWASP Top 10を意識、環境変数の使用、パラメータ化クエリの使用
4. エッジケースの見落とし
null/undefined、空配列、境界値などの処理が抜けていることがあります。
# 配列が空の場合を考慮していない const average = items.reduce((a, b) => a + b) / items.length # items が空だとエラー
確認方法: 「空の場合は?」「nullの場合は?」と追加で質問
5. パフォーマンスの問題
N+1クエリ、不要な再レンダリング、メモリリークなど、動作はするが効率が悪いコードを生成することがあります。
# N+1 クエリ問題
for user in users:
posts = db.query(Post).filter(Post.user_id == user.id).all() # ループ内でクエリ
確認方法: 「パフォーマンスの観点で問題はありますか?」と質問
検証のチェックリスト
基本チェック
- コードが実際に動作するか(実行してエラーがないか)
- インポートしているライブラリは存在するか
- 使用している関数・メソッドは実在するか
- 既存コードとの整合性は取れているか
セキュリティチェック
- ユーザー入力を直接SQLに埋め込んでいないか
- 機密情報(APIキー等)がハードコードされていないか
- 認証・認可のチェックは適切か
- XSS対策(エスケープ処理)はされているか
品質チェック
- エラーハンドリングは適切か
- null/undefined の処理は考慮されているか
- 既存のコーディング規約に従っているか
- 不要なコードや冗長な処理はないか
AIに自己検証を依頼する
AIが生成したコードに対して、AI自身にレビューを依頼することで、問題を発見できることがあります。
セルフレビューを依頼
今書いてくれたコードについて、以下の観点でレビューしてください: 1. セキュリティ上の問題はありますか? 2. エラーハンドリングは十分ですか? 3. エッジケース(null、空配列など)は考慮されていますか? 4. パフォーマンス上の問題はありますか? 5. 改善できる点はありますか?
特定の観点でチェックを依頼
このコードにSQLインジェクションの脆弱性はありますか? 問題がある場合は、安全なコードに修正してください。
注意:AIの自己レビューは万能ではありません。最終的な判断は人間が行い、特に重要なセキュリティ面は専門家のレビューも検討してください。
テストで検証する
AIが生成したコードにテストを書いてもらい、動作を検証します。
テストコードの生成を依頼
今作成した関数のテストを書いてください。 以下のケースを含めてください: 1. 正常系:期待通りの入力で期待通りの出力が得られる 2. 異常系:不正な入力でエラーが発生する 3. 境界値:0、空文字列、空配列などの境界ケース 4. エッジケース:null、undefined、特殊文字など
テストの実行例
# バックエンド(Python / pytest) pytest tests/ -v # フロントエンド(Jest) npm test # E2Eテスト(Playwright) npx playwright test
実践的な検証フロー
1
コード生成
AIにコードを生成してもらう
2
目視確認
明らかなおかしい点がないか、ざっと確認
3
実行テスト
実際に動かしてエラーが出ないか確認
4
セルフレビュー依頼
「このコードに問題はありますか?」とAIに聞く
5
テストコード生成・実行
自動テストで動作を検証
6
問題があれば修正依頼
発見した問題を伝えて修正してもらう
まとめ
- ✓ AIは間違える - 存在しないAPI、バージョン違い、セキュリティ問題など
- ✓ チェックリストを使う - 基本、セキュリティ、品質の観点で確認
- ✓ AIに自己レビューさせる - 「問題はありますか?」と聞く
- ✓ テストで検証 - 自動テストで動作を確認
- ✓ 最終判断は人間 - 特にセキュリティは慎重に