← 事故一覧へ

majormonitoring-gapunverifiedcollected

定時実行のClaude Codeが2.5日何もしなかったのに、GitHub Actionsはずっと緑だった(未検証の報告)

4時間ごとにClaude Codeでブログ記事を書き直すGitHub Actionsのジョブが、2.5日のあいだ8回続けて何も生み出さなかった。8回とも結果は緑だった。

発生日
深刻度
5/10
影響範囲
uptime
タグ
#claude-code#github-actions#usage-limit#exit-code#silent-failure#watchdog

原因

週の利用上限に達し、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 で送るので、上限の問題が、上限の 問題を知らせる警報まで止めることはもうない。

同じ教訓は以前のエントリにも 出てくる。緑のチェックは、プロセスがきれいに終わったことしか意味せず、 仕事がなされたことまでは意味しない。そして、見張る相手と同じ理由で 止まる見張りは、見張りにならない。

出典