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を無料で試す →