AI生成コードにおけるエラーハンドリング:誰もテストしないギャップ

AIに機能を作らせると、機能は作られます。その機能が失敗するあらゆる方法を処理するよう求めると……沈黙が返ってきます。
エラーハンドリングは、AIコードで最も一貫して不足しがちな側面です。ハッピーパスは完成しています。サッドパスは欠落しているか、表面的なものです。
これは特定のツールの見落としではありません。すべてのAIコーディングツールに共通するパターンです。Cursor、Copilot、Claude Code——どれも楽観的に機能を生成します。ログインは成功します。フォームは送信されます。APIはデータを返します。しかし、ネットワークがダウンしたときはどうなりますか?APIが500を返したときは?ユーザーが悪意のある入力でフォームを送信したときは?フロー途中でセッションが切れたときは?
CodeRabbitの分析がこれを裏付けています:AI生成コードにはロジックと正確性のエラーが1.75倍多く、その多くはエラーハンドリングのギャップです。
エラーハンドリングの分類
ネットワークエラー:API呼び出しが失敗する。タイムアウトが発生する。接続が切断される。AI生成コードは多くの場合、リトライロジック、タイムアウト処理、オフライン状態を実装していません。
バリデーションエラー:ユーザー入力が予期しないものになる。AI生成フォームはクライアント側でバリデーションを行ってもサーバー側では行わないことが多く、フォーマットは検証してもビジネスロジックは検証しないことがあります。
ステートエラー:アプリケーションが予期しない状態に達する。削除されたレコードが参照される。セッションが切れる。並行ユーザーが共有データを変更する。AI生成コードはハッピーパスの状態遷移を前提としています。
サードパーティエラー:外部サービスが失敗する。決済プロセッサがエラーを返す。OAuthプロバイダーがダウンする。AI生成の統合は多くの場合、外部サービスが常に利用可能であることを前提としています。
リソースエラー:データベース接続が枯渇する。メモリ制限に達する。ファイルストレージが満杯になる。AI生成コードにはリソースを考慮したエラーハンドリングがほとんど含まれていません。
手動テストがエラーハンドリングを見逃す理由
開発者が自分のコードをテストする際は、自然とハッピーパスをたどります。Xという機能を作ったので、Xをテストします。Xが失敗した場合のテストには意図的に物事を壊す必要があり、心理的により困難で手間がかかります。
TestSpriteのテストエンジンは、エラー状態のテストを自動的に生成します。ログインが成功するかどうかをテストするだけでなく、ログインが失敗した場合、セッションが切れた場合、APIが遅い場合、入力が悪意のあるものである場合に何が起こるかをテストします。これらのエラー状態テストは、すべてのPRでハッピーパステストと並行して実行されます。
本番インシデントを引き起こすバグは、ハッピーパスには存在しない。誰もテストしていないエラーハンドリングの中にある。
TestSpriteを無料で試す →