「成功」と出ていたのに、3日間なにも実行されていませんでした

「成功」と出ていたのに、3日間なにも実行されていませんでした

記事
IT・テクノロジー
Claude Codeを、Windowsのタスクスケジューラから毎日決まった時刻に動かしています。台本を書いて、音声を合成して、動画にして、YouTubeに上げるところまでを人の手を介さずにやる、という使い方です。

これが3日間、動いているように見えて何もしていませんでした。タスクスケジューラの実行結果は成功。ログファイルもちゃんと毎回できている。それでも成果物が1つも増えていませんでした。

種明かしをすると、原因はスクリプトの文字コードでした。タスクスケジューラから呼ぶ .ps1 ファイルを、UTF-8のBOM無しで保存していたんです。Windows PowerShell 5.1 は、BOMが無い .ps1 をシステムの既定の文字コード、日本語環境ではCP932として読みます。UTF-8で書いた日本語がそこで別の文字に化けます。

自分の場合、スクリプトの中に「/経営会議」というスラッシュコマンド名を日本語で書いていました。それが化けた状態のままclaudeに渡り、そんなコマンドは無いので即座に終了する。終了コードは0なので、タスクスケジューラから見ると成功です。ログには開始の行と終了の行が同じ秒で並んでいるだけでした。

気づいたきっかけもそこで、ログの開始時刻と終了時刻が1秒も違わなかったことです。中身のある処理が走っていれば数分かかるはずでした。

直したのは3つです。まず .ps1 をBOM付きUTF-8で保存し直しました。これで化けなくなります。

次に、claudeに渡す直前で文字列を検査するようにしました。UTF-8の日本語をCP932として読むと、半角カタカナの範囲の文字が必ず混ざります。正しい日本語のコマンド名にその範囲の文字が出てくることはないので、1文字でも見つかったら壊れていると判断して、claudeを呼ばずにエラーで止めます。黙って何も実行しない、という状態を作らないためです。

3つめは、claudeの出力が空だったら失敗扱いにすることです。何も出力せずに終わるのは、コマンドが認識されていないときの典型的な症状でした。ここでエラーにしておくと、タスクスケジューラの結果も0以外になるので、次からは失敗として目に入ります。

学んだのは、成功と書いてあるログを信用しない、ということでした。この3日間、記録上はすべて成功でした。無人で動かす仕組みは、動くところまでではなく、失敗したときに失敗だと分かるところまで作って、はじめて完成なんだと思います。

こういう、Windowsで実際にやってみて詰まったところを含めて、Claude Codeの設定一式をまとめたものをコンテンツとして出しています。CLAUDE.mdのテンプレート3種、サブエージェント6役ぶん、スラッシュコマンド2種を、そのまま写せる形で載せた23ページのPDFです。


自分の環境に合わせて作ってほしい、という場合は、設定一式をこちらで用意して納品するサービスも出しています。


どちらもまだ販売実績は0件です。その分、価格は抑えてあります。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す