majormonitoring-gapunverifiedcollected
定時実行のClaude Codeが2.5日何もしなかったのに、GitHub Actionsはずっと緑だった(未検証の報告)
4時間ごとにClaude Codeでブログ記事を書き直すGitHub Actionsのジョブが、2.5日のあいだ8回続けて何も生み出さなかった。8回とも結果は緑だった。
原因
週の利用上限に達し、Claudeは上限を知らせる1行だけを返していた。コマンドの末尾が || true、pipefail も無効で、パイプライン全体の結果は tee のものになり、通知は赤のときしか出なかった。止まった実行を知らせるはずの見張り役も、同じ上限を使うClaudeで動いていたため、仕事と見張りが一緒に止まった。
結果
2026年9月18日から21日まで、記事は1本も書き直されなかった。筆者は、上限による停止が8件並んだ状態ファイルを偶然開いて気づいた。同じ日、Claudeを使うほかのジョブ2本も上限に当たっていた。何も変化しないので、ダッシュボードは落ち着いて見えていた。
対策
筆者は成功・失敗の判定をシェルからPythonへ移し、実際のエラーメッセージで試せるようにした。認証のエラーは赤にし、利用上限は緑のまま警告を出す。出力は決まった形と最低限の大きさで確かめ、実行ごとに成果を数え、「0件だった」と「確かめられなかった」を分けて報告する。通知は素の curl で送り、上限の問題に巻き込まれないようにした。
何が起きたか
あるフリーランスのエンジニアが、Claude Codeを定時で動かしていた。
自前のランナーの上でGitHub Actionsが4時間ごとに claude -p を呼び、
検索順位を上げるためにブログ記事を書き直す仕組みである。2026年9月18日
から21日まで、このジョブは8回動き、何も変えなかった。8回とも緑だった。
現場の混乱
誰にも知らせは来なかった。筆者は、止まった実行を記録するはずのJSON ファイルを開いたときに、上限による停止が8件続けて並んでいるのを偶然 見つけた。同じ日、Claudeを使うほかの2本(週次の会議のまとめと、 レビューのジョブ)も上限に当たっていた。外から見るとすべて安定して いたが、振り返ればそれ自体が症状だった。何も動いていないから、 何も変わらなかったのである。
原因
週の利用上限が尽きて、Claudeはどの呼び出しにも、そのことを告げる1行
だけを返していた。それを緑に変えたのは、3つの習慣だった。コマンドの
末尾の || true が終了コードを捨てていた。シェルで pipefail を
設定していなかったので、パイプラインの結果は成功する tee のもの
になった。そして通知は、赤になったときにしか出なかった。
まさにこれを捕まえるための見張り役もあった。状態ファイルを読んで問題を 報告する仕組みである。ところがこれもClaudeを使い、同じ週の上限を 分け合っていたので、見張る相手と同じ瞬間に黙ってしまった。
対策
筆者は成功・失敗の判定をシェルから取り出し、実際のエラーメッセージで
試せるPythonに移した。認証のエラーは実行を失敗にし、利用上限は緑の
まま警告を出す。出力は決まった形に合い、最低限の大きさがあることを
確かめ、実行ごとに実際の成果を数え、「0件だった」と「確かめられなかった」
を別々に報告する。通知は素の curl で送るので、上限の問題が、上限の
問題を知らせる警報まで止めることはもうない。
同じ教訓は以前のエントリにも 出てくる。緑のチェックは、プロセスがきれいに終わったことしか意味せず、 仕事がなされたことまでは意味しない。そして、見張る相手と同じ理由で 止まる見張りは、見張りにならない。