
Claude Codeを使って自作の個人用ツールを開発していると、機能を書き終えた時点では「動いている」ように見えても、実は中身に問題を抱えたまま気づかずに使い続けてしまう、ということが起こり得ます。今回、暗号資産(仮想通貨)の値動きを見るための個人用ダッシュボードツールに新しい機能を追加した際、まさにそうした「静かな失敗」に遭遇しました。この記事では、その原因の見つけ方と、普段の開発フローに持ち帰った習慣を共有します。
追加した機能と、一見問題なさそうに見えた挙動
追加したのは、複数の暗号資産取引所のAPIからデータを取得し、先物取引に関する指標(建玉の量・資金調達率・ロングとショートの比率)を推移グラフとして表示する機能です。実装後に画面を確認したところ、グラフは普通に表示されており、エラーらしきものも出ていませんでした。見た目だけで判断すれば、そのまま完成として扱ってしまってもおかしくない状態でした。

「もう一段レビュー」で見つかった2つの問題
この開発では、機能を実装した後、実装に使ったClaude Codeとは別のAI(Codex)にもコードをレビューしてもらう工程を設けています。今回のレビューで、2つの問題が指摘されました。
1つ目:APIのURLの綴り間違い
ある取引所のAPIを呼び出すURLのパスが、正しいものと1文字違っていました。これは呼び出し先そのものが存在しないため、レスポンスが空になるという分かりやすい形の不具合でした。
2つ目:HTTPステータスだけでは判定できない失敗
より厄介だったのがこちらです。その取引所のAPIは、リクエストが実際には失敗していても、HTTPのステータスコードとしては「200(成功)」を返す仕様になっていました。本当に成功したかどうかは、レスポンスの中身に含まれる専用のエラーコード(いわゆる`retCode`のようなフィールド)を確認して初めて判断できる作りです。
ところが元のコードは「HTTPステータスが200なら成功」という前提でしか書かれていなかったため、実際には失敗しているリクエストを「データが単に空だっただけ」として扱ってしまい、その空の結果をそのままキャッシュに保存してしまう状態になっていました。私自身も画面が表示されたことで安心し、レスポンスの中身まで確認できていませんでした。
なぜこの問題に気づきにくかったのか
このバグが厄介なのは、処理自体は最後まで正常に完了し、画面にもグラフが表示されることです。表示されているデータが正しいものなのか、たまたま取得に失敗して空になったものなのかは、見た目だけでは区別がつきません。「エラーが出ていないか」「画面が表示されるか」という普段の確認方法だけでは、この種の「成功したフリをしている失敗」は見抜けないと痛感しました。
どう直したか
対処自体は難しいものではなく、次の2点です。
1. 呼び出しているURLが正しいかどうかを、実際にターミナルからそのAPIを直接叩いて(curlコマンドなどで)確認する
2. レスポンスのHTTPステータスコードだけでなく、レスポンスの中身に含まれるエラーコードも確認したうえで「成功」と判定するようにコードを修正する
どちらの作業も、AIに「直しておいて」とまとめて任せるのではなく、実際のAPIレスポンスを自分の目で一度確認してから修正を反映する、という一手間を挟んで対応しました。
よくある質問(FAQ)
Q. AIにコードを書かせると、こうした不具合はよく起きるものですか?
A. 頻度としては多くありませんが、今回のように「エラーは出ないが中身が間違っている」というケースは、テストや動作確認だけでは見つけにくいという印象があります。だからこそ、外部APIを呼ぶ処理は特に、実際のレスポンスを目で確認する工程を意識的に挟むようにしています。
Q. なぜ実装したAIとは別のAIにレビューさせているのですか?
A. 同じAIで書いたコードを同じAIにチェックさせると、同じ思い込みのまま見落としてしまう可能性があるためです。別のAI(今回はCodex)に見てもらうことで、実装時の前提そのものを疑い直す機会を作っています。
まとめ
AIと書いたコードは、エラーを出さずに「動いているように見える」状態のまま、実は中身が間違っていることがあります。特に外部APIを呼ぶ処理では、HTTPステータスだけで成功・失敗を判断すると、今回のような静かな失敗を見逃しやすくなります。仕上げた機能を、実装に使ったClaude Codeとは別のAIにもレビューしてもらう工程を挟むことで、こうした思い込みの穴を拾いやすくなると感じています。

