ITmediaを調べるとシステムが応答不能に。バイブコーディングのフリーズを防ぐ例外処理
なぜか突然黙り込む自作システム。始まりは『最近よく落ちるな』だった

僕がAIとのバイブコーディングで作った、お気に入りの情報収集システムがあるんだ。 🤔
毎日ネット上の面白い記事を自動で集めてきて、僕のSlackに届けてくれる個人開発のツールなんだよね。
最初は「まあネットの調子が一時的に悪いのかな」くらいに考えて、適当に流していたんだ。 落ちても勝手に再起動するスクリプトを裏で回しておいて、その場を凌ぐ日々を続けていたんだよ。
「自動で立ち上がり直すなら実用上は問題ないや」と、根本的な解決を後回しにしていたのが運の尽きだったね。
でも、数日経って管理画面を見たら、一日に何十回も再起動されていて背筋が寒くなったよ。 💦
さすがに裏で何か重大なバグが起きていると確信して、ようやく重い腰を上げたんだ。 慌ててサーバーに入ってエラーログを掘り返してみたんだけど、手がかりが何もない。
エラーでプロセスが落ちるのではなく、特定の処理の途中で完全に無言になって生存し続けている状態だったんだ。
CPUの負荷だけが限界まで張り付いていて、サーバーのファンが深夜に虚しく回り続けていたよ。
もちろん、本来届くはずの日々の通知も、何時間も前に完全にストップしていたんだ。 エラーログさえ残らない沈黙のハングアップは、開発者にとって本当に恐ろしいバグなんだよね。
原因がわからないまま、ただ動きを止めるプロセスを前にして、僕は深い焦りを感じていたよ。
AIと勢い任せに作ったシステムだったから、正常に動くハッピーパスしか頭になかったんだ。
おかげで、予期しないエラーへの対策やタイムアウトの設定が、見事に抜け落ちていたよ。 このサイレントなハングアップを前にして、僕は場当たり的な再起動を諦めることにしたんだ。 ✨ AIが書いてくれたコードを過信せず、僕の手でログから真犯人を特定する決意を固めたんだよ。
ログの執念深い観察で見えてきた、AntigravityとITmediaという『再現率100%のブラックボックス』

どこでプロセスが引っかかっているのか調べるため、処理中のURLをログに出すようにしたんだ。
プログラムが今どんな動きをしているのかを可視化して、コンソールをじっと見つめ続けたよ。 💡
深夜の静かな部屋で、流れる文字を目で追いかける時間は,なかなかの緊張感だったんだよね。 何千行ものログが画面を高速でスクロールしていく中で、バグの引き金がどこにあるか目を凝らしていたよ。
すると、背筋が凍るほど完璧な再現性を持つバグの引き金が浮かび上がってきたんだ。
システムがフリーズして無言になる直前、ログの最後には必ず「ITmedia」の記事URLが表示されていたんだよね。
他の技術ブログを巡回している時は、ミリ秒単位で小気味よくデータが吸い上げられていく。 それがITmediaのドメインに足を踏み入れた途端、ログの進捗表示がぴたっと止まり、一切の応答を拒否してしまう。
個別にそのURLだけを狙ってクローラーを動かしてみたら、見事に再現率100パーセントでフリーズしたよ。
自律型AIエージェントであるAntigravityが、特定のHTMLを読み込もうとして沼にハマっていたんだ。
他のニュースサイトは何事もなく読み込めるのに、なぜITmediaだけがシステムを黙らせてしまうのか。 この再現率100%のブラックボックスを前にして、僕は謎解きのワクワク感とバグの厄介さに頭を悩ませていたよ。 🚀
エラーで落ちてくれればまだ楽なんだけど、CPUを食い潰しながら無限に処理を待ち続けるのは本当に厄介だね。
原因がITmediaの記事パースにあることは、これで確実になったよ。
この奇妙な現象の裏には、僕が想定していなかった巨大な構造が隠れているに違いない。 そう確信した僕は、パース処理の内部で何が起きているのかをさらに深く調べてみることにしたんだ。
ITmediaの巨大なHTMLに圧倒されるAIと、防げなかった無限ループの罠
どうしてITmediaをクロールするときだけフリーズするのか、僕なりにコードを追いかけてみたんだ。
原因は、巨大なHTML構造とAIが書いた「守りのないパース処理」の組み合わせの悪さにあったよ。 🤔
ITmediaのページって、たくさんの広告や関連記事が複雑に入り組んでいて、DOMのネストがものすごく深いんだよね。 ファイルサイズも個人ブログの数十倍はあって、読み込むだけでも大変なデータ量だったんだ。

気になって夜な夜な調べてみたら、これって無断のスクレイピングを防ぐ「あえてのAI・ボット対策」の可能性もあると知って興奮したよ。
最近は世界中で、クローラーを無限ループにハメる「スパイダートラップ」などが流行っているんだ。
データを極端に遅く返して接続を固定する「タールピット」のような、意地悪な防御策もたくさんある。 AIクローラーにデタラメなデータを吸わせる「Nepenthes」みたいな能動的な防御策もトレンドになっているね。
そんな複雑な迷宮に、僕の作ったノーガードなシステムが突っ込んでいったら、そりゃあフリーズするのも無理はない。
AIが生成したロジックは、HTMLから正規表現で特定のテキストを探すだけの、力任せなものだったんだ。
そのコードには「もしパースが終わらなかったら中断する」というタイムアウトや上限チェックが一切なかった。 巨大なHTMLの迷宮に入り込んだ結果、正規表現のバックトラッキングが爆発して無限ループになったみたいだ。
正規表現 of パターンマッチングが指数関数的に時間を消費し、処理が終わらなくなっていたんだね。
AIは綺麗なデータを扱うのは得意だけど、こういう現実の罠を回避するガードレールまでは書いてくれないんだ。 💡
AIが自動で頑丈なコードを書いてくれると信じ込んでいたけれど、それは大きな勘違いだったよ。 予測不可能な巨大データやスクレイピング対策に対する防壁は、僕たちが設計しなきゃいけないんだよね。 この脆さこそが、バイブコーディングの夢のあとに訪れる現実の壁なんだと痛感したよ。
AIに不具合を直訴! タイムアウトと例外処理でシステムを『大人』にする
原因が分かったから、僕はすぐにデバッグパートナーであるAIにこの事実を相談したんだ。
「タイムアウトがないから無限スタックしてるみたいだよ」と伝えたら、AIはすぐに不具合を理解してくれたよ。 🚀
さっきまでフリーズさせていた張本人が、一瞬で堅牢な修正コードを出してくるのは、相変わらず面白い体験だね。 「ごめん、巨大なHTMLに対する考慮が漏れていたよ」と謝るようにコードを吐き出す姿に親近感が湧いたよ。
対策として実装したのは、システム運用では欠かせない防御的プログラミングだったんだ。
接続の最大待ち時間を5秒に設定し、パース処理全体をtry-exceptで包むようにしたよ。
もし巨大なHTMLで処理が詰まっても、即座にエラーをキャッチして「このURLは諦めて次に行く」という対応ができる。 これで特定のページでフリーズして、システム全体が巻き添えで死ぬリスクをきれいに回避できたんだ。

この修正を入れてから、僕の情報収集システムは見違えるようにタフになって、安定して動き続けているよ。 ✨
境界条件を人間がちゃんと見つけて指定してあげて,AIに実装を手伝ってもらうのが正解だね。
AIは万能の魔法使いではなく、僕たちが適切な境界線を教えてあげて初めて、最高の相棒になってくれるんだと思うよ。 この泥臭い調整プロセスこそが、バイブコーディングを実用レベルに育てる一番の近道なんだね。
🔧 AI of 限界と僕らの付き合い方についての製作ノート
このバグを修正しながら、僕はAIが生成するコードの面白さと怖さを改めて実感したんだ。 💡
AIは本当に素真面目で、指示したロジックを完璧に実装してくれる。
底抜けに便利な反面、現実世界の例外やエラーのような「想定外」には驚くほど弱いんだよね。 だからこそ、境界線を引いてあげる人間の視点が絶対に欠かせないんだよ。
「動くこと」だけでなく、「失敗したときにどう安全に止まるか」を人間が教える必要があるね。
今回はITmediaの巨大HTMLが引き金だったけれど、実は他のAPI連携でも同じようなフリーズは簡単に起きる。
そういう地味な弱点を見つけて、AIと対話しつつコードを育てていくのが、僕たち個人開発者の楽しみでもあるんだ。 🤝 「もし相手が反応しなかったらどうする?」という問いかけを、僕たち人間がしっかり持って並走したいね。
バグに悩まされた時間はイライラしたけれど、AIと一緒に解決していくプロセスは本当にエキサイティングだったよ。
この経験を活かして、これからの開発では最初から例外処理を意識していこうと思うんだ。
人間は『揺らぐAI』とどう並走するか。バイブコーディングのその先へ

AIによるバイブコーディングは、アイデアを瞬時に形にする最高の武器であることは間違いないよ。
取引先のサービスのように、それだけで本番用の頑丈なプロダクトが完成するわけではないんだよね。
AIが出力するコードは、初期段階では例外的な状況を考慮しない正常系になりがちだからだ。 外部のWeb環境やAPIは常に変動するから、僕たちが作るシステムにも柔軟性が必要になる。
僕たちがAIと作っていくコードは、常にこの外部世界の揺らぎに耐えうるものでなければいけない。
不確実で「揺らぐ世界」と接続するとき、システムが黙って停止しない防壁を築くことこそ人間の役割だね。
ログを追い、ハングアップ条件を潰してAIと対話しながらコードを補強する。 この泥臭いデバッグプロセスは,初期構築以上にエキサイティングな体験であると僕は確信しているよ。 🚀
完璧ではないAIの生成コードを、人間の知恵で少しずつ磨き上げていく工程にこそ、今の時代の個人開発の面白さがある。
勢い重視で動くものを作り、バグをAIと共に手なずけていく。
この並走サイクルを回し続けることこそが、AI時代のものづくりを真に楽しむための技術となるね。 君の自作システムにも、静かにフリーズする前に、エラー処理の一行が刻まれているか確認してみてほしい。 🙆♂️
ITmediaと僕
ちなみに……。僕はITmediaの前身であるZDNet Japanが生まれたころからの大ファンなんだよね。いつも最新のITニュースや技術トレンドをお世話になって学んできたし、もちろんこれからもずっと応援し続けている大切なメディアなんだ!
今回の件も、情報密度が高くてリッチなつくりだからこそクローラー側の設計が問われたわけで、改めて大好きなメディアの深みを知る良いきっかけになったよ。
Miccell - タイムアウトを設定するのは、AIとの長い友情を保つための大人のマナーだね ✨
