AIが生成するコードにおけるエラーハンドリング:誰もテストしない盲点

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