9月5日、Yadullah Abidiが「Claude Code found 5 bugs in my project that I never would have caught」と題した記事を公開した。この記事では、自作のホームラボ環境でClaude Code(AnthropicのAIコーディングアシスタント)が開発者自身では発見できなかった5つのバグを特定した体験について詳しく紹介されている。
ESP32コントローラー、Home Assistantの音声サテライト、複数のDockerコンテナ、Next.jsアプリ——著者のYadullah Abidiは自宅のホームラボを長年運用してきた。「自分のシステムは把握している」と思っていたが、Claude Codeにコードを渡したところ、数カ月追い続けていたバグが次々と掘り起こされた。しかも根本原因はどれも「言われてみれば当たり前」という小さなものばかり。それぞれの発見に数時間〜数日を費やしていた著者にとって、その指摘は「ほとんど侮辱的」と感じるほどだったという。
1日20回のWi-Fi切断——原因はWi-Fiではなかった
最も印象的なのがこのバグだ。著者が10ドルで自作したESP32 C3 Superminiベースのエアコン制御ユニットが、1日20回以上Wi-Fiから切断される問題を抱えていた。
電源電圧、USBケーブル、ゲストネットワークのクライアント分離設定——あらゆる方向から調査したが、Home Assistantの履歴APIが返すのは「切断した」という事実だけで、理由は一切わからなかった。
真犯人は**ESPhomeの自動ローミング機能**だった。接続中のAPよりも良いAPを探して定期的に再スキャンする機能が、家に1台しかAPがないにもかかわらず動き続けていた。切断→再接続のたびに古い「Auth Expired」バグと衝突し、再接続ストームが数分単位で発生していたのだ。
修正はYAML 2行——ESPhomeのWi-Fi設定でRRMとBTMを無効化するだけ。シリアルキャプチャでやっとわかった問題を、Claude Codeはコードを読んで指摘した。
壊れたオートメーション、原因は4つ重なっていた
Home Assistantの気候制御オートメーションが「動かない」問題には、無関係な4つの原因が積み重なっていた。
- ESPHome内部の命名規則
test_sensorドメインで参照を書いていたが、実際のエンティティはsensorドメインに存在し、ルックアップが毎回サイレントに失敗していた - エンティティIDにデバイス名を二重にプレフィックスしてしまい、存在しない文字列になっていた
numeric_stateトリガーは閾値の通過時にしか発火しない仕様で、すでに閾値を超えた状態で部屋を切り替えても何も起きなかった- Jinjaの複数行if-blockが末尾に改行文字を漏らし、エンティティIDの文字列比較が常に不一致になっていた
さらに、UIに手入力で登録した古いオートメーションがリポジトリの修正後も動き続けており、「直したはずなのに動かない」という状態が続いていた。問題が4層に重なっていたため、1つ直しても症状が変わらず、原因の特定自体が困難な状況だった。
音声アシスタントが耳を失い、独り言を始めた
ESP32-S3で動かすHome Assistant音声サテライトには3つの障害が同時に存在していた。
- ウェイクワードを1回聞くと完全に「耳が聞こえなくなる」——明示的なマイクバインディングと起動順序の修正で解決
- セッション終了処理が自分の強制停止コマンドを「ユーザーの発話終了」と誤判定し、約5.5秒周期で無限ループに入る——
suppress_follow_upフラグで解決 - 完全に音が出なくなる問題——全YAMLを捨て、Arduinoのベアメタルトーンテストでアンプのピンをテスターで計測したところ、ジャンパー線の接触不良が原因だった。さらに、ウェイクワードモデルファイルが破損していたことも発覚した
npmがSIGTERMを握りつぶしてデータベースを壊していた
Self-hostしたNext.jsアプリで、PGlite(ブラウザ・Node.js上で動くWASMベースの組み込みPostgreSQL)のデータが壊れる問題が発生していた。原因はnpmがSIGTERMを子プロセスに転送しない仕様にあった。コンテナ停止時にNext.jsがシグナルを受け取れず、PGliteが正常なシャットダウン処理を実行できないままプロセスが終了していた。
Claude Codeはなぜ見つけられたのか
著者がすでに数カ月調査していたにもかかわらず、Claude Codeが短時間でこれらを発見できた理由は明確だ。人間は自分が書いたコードに対して前提を持ちすぎる。「Wi-Fiが不安定なはずがない」「エンティティIDは正しいはずだ」という思い込みが、最も単純な原因への到達を妨げる。
Claude Codeはコードをフラットに読む。ESPhomeのローミング設定も、Jinjaの末尾改行も、npmのシグナル伝播の仕様も、コードに書いてある事実として読み取る。著者は「根本原因は小さすぎてほとんど侮辱的だった」と表現しており、逆に言えばそれほど「自明なはずの問題」が人間の目からは見えにくくなっていたことを示している。自作システムの規模が大きくなるほど、こうした思い込みによる盲点は積み重なりやすい。AIによるフラットなコードレビューが補完できる領域として、興味深い事例といえる。
詳細はClaude Code found 5 bugs in my project that I never would have caughtを参照していただきたい。