深夜に流した全数テストの出力が、朝には0行で残っていた。
私はコードが書けないので、夜の作業はAI社員(Claude Codeという、パソコン作業を任せられるAIの道具)に日本語の依頼書(やってほしい作業を書いた1枚の指示書)を1本ずつ渡して任せています。終わるとスマホの通知アプリ(Discord)に結果が流れてくるので、朝起きてから確認するのが毎日の習慣です。
朝、テストの結果が0行で返ってきた
2026年9月19日、ある夜の作業で、全部のテストをまとめて流す `run_all.py` というプログラムを、画面の裏で動かす形(バックグラウンド)で実行させました。AI社員が画面を占有せずに他の作業へ進めるので、重いテストはいつもこの形で流していました。裏で流せば、他の依頼書も同時に進められるので、都合がいいとしか思っていませんでした。
翌朝、出力ファイルを開くと中身が0行でした。セッションが終わると、裏で動いていたテストもそのまま一緒に止まっていたのです。このときは「次はもっと丁寧に見よう」としか考えず、同じ流し方を続けました。
6日後の9月25日、別の作業で前の夜に裏で流した `run_all.py` の続きを引き継いだところ、183本あるはずのテストが40本までしか進んでいませんでした。0行ではなく途中までは残っていたので、最初は「40本で全部終わった」と思い込みそうになりました。行数を数えてから気づきました。2度目で初めて、裏で流した処理が「いつの間にか途中で止まる」ものだと分かったのです。
行数と最終行を見れば、途中で打ち切られたと分かる
この2回の事故で学んだのは、裏で流したコマンドの出力が0行、または予定の本数より少ない行数で止まっているときは、それを結果と見てはいけないということです。途中で打ち切られた記録として扱うほうが安全でした。
さらに9月28日、今度は画面の前で動かす形(前景)でGUIの一括テストを実行させたのに、何も言わずに出力が空のまま返ってきました。裏で流したときと違う種類の事故に見えましたが、調べると理由は同じ根にありました。Claude Codeには、前景のコマンドを自動で止める既定の持ち時間が設定されていて、その値が120秒(120000ミリ秒)だったのです。公式ドキュメントのBASH_DEFAULT_TIMEOUT_MSという項目に、この数字がそのまま書かれていました。
同じドキュメントには、モデル側が自分で設定できる持ち時間の上限も載っていました。BASH_MAX_TIMEOUT_MSという項目で、値は600000ミリ秒、つまり10分です。裏で流す形についても、無人のセッションでは「最後の結果が出たすぐあとに、裏のコマンドも終了する」と明記されていました。セッションが終われば、裏のテストも結果を残さず終わる仕組みだったわけです。9月19日と25日の2回の事故は、別々の原因ではなく、同じ仕組みの同じ側面から起きていたと、ここで初めてつながりました。
前景でタイムアウトを600000ミリ秒に伸ばすと直った
9月25日から28日にかけて、長いテストと重いGUIテストの流し方を変えました。裏で流すのをやめて、前景で1本のコマンドとしてまとめて流し、持ち時間を600000ミリ秒まで明示して指定する形にしたのです。
読者の方がご自身のClaude Codeで同じことをするなら、長い処理を流す前に、まず既定の持ち時間が120秒であることを前提に置いてください。そのうえで、処理が120秒を超えそうなら、前景で1本のコマンドとして流し、持ち時間を600000ミリ秒まで自分で指定します。それでも終わらない重さの作業なら、600000ミリ秒という上限自体を疑い、1回のコマンドで収まる単位まで処理を割って流すのが安全です。
直した後は156本・失敗0本のまま再発していない
10月5日、同じ一括テストを、前景・長い持ち時間の流し方に変えたあとで実行しました。結果は156本すべてが流れきり、失敗は0本でした。途中で止められることも、出力が空になることもありませんでした。
9月28日の事故のあと、私の作業記録には同じ種類の事故——裏で流した結果が消える、既定の持ち時間で途中で止められる——の新しい行が増えていません。裏の仕組みを知る前は、同じ失敗を3回繰り返していました。今は、長い処理を流す前に「前景か、裏か」「持ち時間は何秒か」を先に決めてから流すようにしています。朝起きて出力ファイルを開くとき、以前は行数を数えずに「ファイルがあるから成功」と読んでいました。今は0行かどうかと、最後の行が予定どおりの数まで届いているかの2つを、必ず確認してから次の作業に進みます。
夜中にAI社員へ依頼書を1本ずつ渡す仕組みは有料キットに入っていますが、今回の「裏で流した結果が消える」事故そのものへの備えは入っていません(持ち時間を延ばしたあとの後始末は未収録です)。→ https://note.com/kite_note/n/nf450a7aa82b7
AI社員を寝ている間に回す話を書いています。フォローしておくと次の事故と直し方が届きます。
출처: note 원문
번역: Gemma 3(.44) 초벌 + 교정 검수
원문 보기 | 출처: note.com