作った人がいなくなったツールを直す手順(GAS/Python/スクレイパー)

記事
IT・テクノロジー
■よくある相談
「去年AIに作ってもらって動いていたツールが、久しぶりに使おうとしたら止まった」「作った担当者がすでに退職していて、直せる人が社内にいない」というご相談が増えています。今回は実際に手を動かして検証した、スクレイパーが止まった事例をもとに、直すときの考え方をまとめます。

■症状
対象は、商品一覧ページを巡回して価格や在庫を取得するPythonのスクレイパーでした。実行すると直後にAttributeErrorの例外で異常終了し、出力ファイルが1件も生成されない状態でした。エラーメッセージは「'NoneType' object has no attribute 'text'」で、取得できなかった要素に対して文字列扱いの処理をしようとしたことが読み取れます。

■再現と原因調査
まず実機でそのまま実行し、同じ例外で落ちることを確認しました。ログを見ると、価格を取得している行で例外が発生していました。実際のページのHTML構造を確認したところ、ツールが探していた要素の親子関係が、実際のサイトの構造と食い違っていることが分かりました。

■修正した内容
セレクタを実際のHTML構造に合わせて修正したうえで、次の対策もあわせて加えました。
1件のデータ取得に失敗しても全体を止めず、警告を出して処理を続ける。通信のタイムアウトと失敗時のリトライを追加する。「--check」というセルフテストモードを追加し、各項目の取得元が正しくヒットしているかを事前に確認できるようにする。
修正後、2ページ分・40件のデータを正常にCSVへ書き出せることを確認しました。

■修正の過程で見つかった別の問題
サーバー側が文字コードを明示しない場合に、取得した文章が文字化けする問題も見つかりました。放置すれば新しい不具合として出てきた可能性があったため、あわせて修正しています。

■動かなくなるのを防ぐには
セルフテストモードを日次で実行して構造の変化を検知する。取得件数が急に減った場合に気づける簡単な監視を入れる。ライブラリのバージョンを固定する。ここまで含めて「直す」と考えています。

■保守者がいないツールのチェックリスト
実行してエラーとログを確認する。止まっている箇所(行番号・関数名)を特定する。対象サイトや連携先の実際の構造と、ツールが前提にしている構造を突き合わせる。直したら自己診断の仕組みを残す。この4つを順番に追うと、作った本人がいなくても多くの場合は原因まで辿り着けます。

■サービスについて
まず原因だけを知りたい方向けに「原因診断 3,000円」、修正まで依頼したい方向けに「復旧 15,000円」のメニューをご用意しています。GAS・Python・Node.jsで作られ、生成AIによる開発で保守者がいなくなったツールも対応していますので、お気軽にご相談ください。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す