自動タスクが1週間「成功」と報告しながら何もしていなかった|ダッシュボードから止められるようにした記録

自動タスクが1週間「成功」と報告しながら何もしていなかった 開発ログ

わたしの活動は、ほとんどをAIに任せています。記事の状態確認、SNSの反応の取得、アクセス解析の集計。どれもPCの定期タスクが裏で動かして、自分用のダッシュボードに数字を流し込んでいます。

そのダッシュボードの話はMISSION 008で書きました。今回はその続きです。裏で動いているはずのものが、実は1週間なにもしていなかった話から始まります。

1週間、全部「成功」だった

気づいたきっかけは小さなことでした。毎日更新されるはずのログファイルの日付が、9月22日で止まっていました。

タスクスケジューラを開くと、どのタスクも「前回の実行結果: 0(成功)」です。エラーは1件もありません。

それでも出力ファイルは更新されていない。調べると、9月18日から9月25日まで、定期タスクは起動はしていたものの、肝心の処理を1回も実行していませんでした。

原因は、日本語のコメント1行

9月18日に、定期タスクが動くたびに黒いウィンドウが一瞬出る問題を直していました。タスクから直接プログラムを起動するのをやめて、画面を出さずに起動するための小さなVBScriptを1本挟む形にしました。

このVBScriptに、日本語でコメントを書いていました。ファイルはUTF-8で保存していました。

ところが、VBScriptはファイルをShift-JISとして読みます。UTF-8の日本語をShift-JISとして読むと、文字の区切りがずれて、コメントの末尾にあった改行が1つの文字として飲み込まれることがあります。その結果、コメントの次の行、つまり「プログラムを起動する」という1行そのものが、コメントの続きとして扱われていました。

起動すべき行がコメントになっているので、VBScriptは何もせずに正常終了します。タスクスケジューラから見れば、スクリプトは問題なく終わったので「成功」です。

もう1つ、cmd /c に渡したコマンドの前後の引用符が外される挙動にも引っかかっていました。パスに空白などが入ると、コマンドが途中で切れます。こちらは、コマンド全体をもう一組の引用符で囲むことで直りました。

直したこと

問題 対処
日本語コメントで起動行が消える VBScriptをASCII文字だけで書き直した。コメントも英語にした
引用符が外れてコマンドが切れる コマンド全体をもう一組の引用符で囲んだ
失敗しても「成功」と報告される 起動したプログラムの終了コードを、そのままタスクの結果として返すようにした

直したあとの確認は、タスクの実行結果ではなく出力ファイルの更新時刻で行いました。今回の件で、実行結果の「0」は「何かをした」という意味ではないと分かったからです。

AIに作業を任せていると、「成功しました」という報告を信じたくなります。今回はAIの報告ではなく、Windowsの報告でしたが、構造は同じでした。成功の報告と、実際に何かが変わったかどうかは、別々に確かめる必要がありました。

裏で何が動いているか、見えていなかった

もう1つ気づいたのは、そもそも裏で何が動いているのかを、わたし自身が把握していなかったことです。

タスクは複数のAIのセッションが、必要になるたびに登録してきたものでした。何がいつ登録されたのか、今も必要なのかは、タスクスケジューラを開いて1つずつ見ないと分かりません。そしてタスクスケジューラは、開くのが面倒な画面です。

そこで、ダッシュボードに「自動タスク」の欄を足しました。

  • 登録されているタスクの一覧(名前・間隔・前回の実行時刻と結果)
  • オン・オフの切り替え
  • 今すぐ実行
  • 実行間隔・実行時刻の変更
  • 削除
  • 決められたひな形からの追加

ダッシュボードはクラウド上にあるので、タスクスケジューラを開かなくても、ブラウザから一覧を見て操作を出せるようにしました。ただし、実際に画面のボタンを押して最後まで反映されるかの確認は、この記事の時点ではまだ終わっていません。確認できているのは、PC側が5分おきに待ち行列を取りに行き、最新の一覧を送り返すところまでです。

クラウドの画面から、どうやってPCのタスクを動かすか

ダッシュボードはクラウド上のWebアプリで、タスクはわたしのPCの中にあります。クラウドからPCを直接操作する通り道は作っていません。代わりに、次の形にしました。

1. ダッシュボードでボタンを押すと、操作内容がクラウド側の「待ち行列」に積まれる
2. PCでは5分おきに小さな同期処理が動いていて、待ち行列を取りに行く
3. PC側で内容をもう一度検査してから、タスクスケジューラに反映する
4. 反映した結果と最新の一覧を、ダッシュボードへ送り返す

PC側から取りに行く形なので、外からPCへ入ってくる通り道は開けていません。そのかわり、反映までに最大5分かかります。PCがスリープしている間は反映されません。ダッシュボードには「PC側が最後に確認した時刻」を出していて、15分以上古いと赤く表示します。

安全のために決めたこと

画面からタスクを操作できるということは、画面を開けた人が何でも実行できてしまう危険もあります。そこで、できることを最初から絞りました。

  • 操作できるのは管理者として登録したアカウントだけ。閲覧だけの人はボタンを押せない
  • 好きなコマンドは登録できない。追加できるのは、あらかじめ用意したひな形だけ
  • 検査はクラウド側とPC側の両方で行う。名前の形式、間隔や時刻の書式などを両方で確かめる
  • 自分の管理下にあるタスク以外は削除できない
  • PCのファイルの場所(パス)はクラウドへ送らない。送るのはスクリプト名と引数だけ

最後の1つは、身元を守るためです。PCのパスにはユーザー名が入ります。ダッシュボードに表示するだけでも、どこかに残る可能性があるので、最初から外に出さない作りにしました。

ついでに整理したこと

一覧にしてみると、整理したいものが見えてきました。

  • 確認処理を1本にまとめた: noteの状態確認、SNSの公開ページの確認、Threadsの確認が、それぞれ2時間おきに別々に動いていました。これを朝と夕方の1日2回、1本の巡回にまとめました
  • アクセス解析の取得をクラウドへ移した: Googleアナリティクスの数字は、PCではなくクラウド側で1時間おきに取得するようにしました。PCが寝ていても数字が止まりません
  • AIの使用量を表示した: どれだけAIの枠を使っているかを、5分おきにダッシュボードへ出すようにしました

詰まったところ・失敗

WordPressの数字だけはクラウドに移せなかった
アクセス解析と同じようにWordPressの記事情報もクラウドから取ろうとしたところ、サーバー側の不正アクセス対策に、クラウドからの取得が弾かれました。この対策は緩めたくなかったので、WordPressだけはPCから取得する形に残しています。

公開設定を書き換えて、自動更新を壊した
ダッシュボードの公開範囲の設定を書き換えたところ、PCからの自動更新がすべて拒否されるようになりました。すぐに1つ前の版に戻し、原因を調べて、設定は元のまま、送信のしかたの側で直しました。

時刻の変更で、1日2回が1回になる
ダッシュボードから実行時刻を変更すると、1日に複数回動くタスクでも、時刻が1つに置き換わります。朝夕2回の巡回を画面から変えると、1回に減ってしまいます。今は注意点として記録しているだけで、根本的には直していません。

結果の数字

  • 空振りしていた期間: 9月18日〜9月25日(約1週間)。この間のタスクの実行結果はすべて「成功」
  • 修正に要した変更: VBScript 1本の書き直し(ASCII化・引用符・終了コード)
  • ダッシュボードの操作対象にしたタスク: 執筆時点で登録済みのタスクすべてと、追加用のひな形
  • 画面の操作がPCに届くまで: 最大5分
  • 確認処理の起動回数: 1日36回(3種類×2時間おき)→ 1日2回

次にやること

裏で動くものは、これからも増えます。毎日決まった時間に記事の下書きを作るような処理も、すでに動き始めています。

増やすたびに、ダッシュボードの一覧に出ること、出力ファイルの更新時刻で動作を確かめること。この2つを、新しいタスクを登録するときの決まりにしました。

関連する記録

AIエージェントに実務を任せる構成と失敗の記録は「AIエージェント運用ガイド」に目的別にまとめています。

コメント

タイトルとURLをコピーしました