ai-technology

AI生成コードで起きやすいバグと確認ポイント

AI生成コードで起きやすいバグと確認ポイント

はじめに

AI が生成したコードには典型的なバグパターンがあります。本記事では、よく起きるバグと確認方法を説明します。

よくあるバグパターン 5 つ

バグ1:型チェック漏れ

❌ AI が生成しやすいコード:
def process_data(items):  # 型がない
    return sum(item['price'] for item in items)

問題:
- items が None で呼ばれたら、実行時エラー
- item に 'price' キーがなかったら、実行時エラー

確認ポイント

□ 型注釈があるか
□ None チェックはあるか
□ mypy でエラーが出ないか

バグ2:エッジケース未対応

❌ AI が見落としやすいエッジケース:
def get_average(numbers):
    return sum(numbers) / len(numbers)

問題:
- numbers が空の場合、ZeroDivisionError
- numbers に None が含まれる場合のハンドリング

確認ポイント

□ 空の入力をテストしたか
□ None / 0 をテストしたか
□ 大規模データでテストしたか
□ 型が違う入力をテストしたか

バグ3:ループの初期化漏れ

❌ AI が生成しやすいコード:
def find_max(items):
    max_value = items[0]
    for item in items:
        if item > max_value:
            max_value = item
    return max_value

問題:
- items が空の場合、IndexError
- 最初の要素より小さい値が全て見落とされる

バグ4:リソース管理漏れ

❌ AI が見落としやすい例:
def read_file(filename):
    f = open(filename)
    data = f.read()
    return data

問題:
- ファイルが閉じられない
- メモリリークの原因

正しいパターン

def read_file(filename):
    with open(filename) as f:
        return f.read()

バグ5:副作用のある修正

❌ AI が修正時に混入させやすい:
def process(data):
    data.sort()  # 元のリストを変更
    return sum(data)

問題:
- 呼び出し元の data が変更される
- 予期しない動作

正しいパターン

def process(data):
    sorted_data = sorted(data)
    return sum(sorted_data)

バグを検出するためのテスト項目

レベル1:単体テスト

□ 正常系をテスト
□ 空の入力をテスト
□ None をテスト
□ 型が違う入力をテスト
□ 大規模データをテスト
□ 境界値をテスト

レベル2:統合テスト

□ 複数の関数を組み合わせてテスト
□ 実際のデータで動作確認
□ パフォーマンスをテスト
□ 並行実行をテスト

レベル3:手動テスト

□ 実際のユースケースで動作確認
□ エラーメッセージが適切か
□ ログが出力されているか
□ 副作用がないか

実装例:バグ検出

例1:型チェック

AI の出力:
def divide(a, b):
    return a / b

✅ 改善後:
def divide(a: float, b: float) -> float:
    if b == 0:
        raise ValueError("divisor cannot be zero")
    return a / b

テスト:
def test_divide():
    assert divide(10, 2) == 5
    assert divide(10, 4) == 2.5
    with pytest.raises(ValueError):
        divide(10, 0)

よくある確認漏れ

1. エッジケース
   空、None、型違い、大規模データ

2. エラーハンドリング
   例外処理、デフォルト値、ユーザーメッセージ

3. パフォーマンス
   O(n^2) アルゴリズム、メモリリーク

4. 副作用
   元のデータ変更、グローバル変数変更

5. ドキュメント
   docstring、型注釈、使用例

まとめ

AI 生成コードのバグパターンと確認方法:

よくあるバグ

  1. 型チェック漏れ
  2. エッジケース未対応
  3. ループの初期化漏れ
  4. リソース管理漏れ
  5. 副作用のある修正

確認方法

Claude Codeでテストを増やしながら開発する流れと合わせることで、バグの少ない実装が実現します。