◉CLAUDE LABEN
●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.307 — スリープやキーチェーンロックのあとに MCP が再接続されない問題を修正しました(10/21)。2.1.306 では claude -p の誤表示も解消●SONNET 4.5 — Claude API での提供終了は 11/30、残り38日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.307 — スリープやキーチェーンロックのあとに MCP が再接続されない問題を修正しました(10/21)。2.1.306 では claude -p の誤表示も解消●SONNET 4.5 — Claude API での提供終了は 11/30、残り38日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Cowork
◈ Cowork/2026-09-08上級

毒入りサンプルを置くまで、無人の検査は一度も落ちていませんでした

無人スケジュールで回している検査が、ログ整形のパイプ一本で終了コードを失っていました。消える経路を手元で測って切り分け、検査自身を検査する小さなハーネスまで組みます。

cowork16無人運用10シェル3品質ゲート7自動化87

✦ プレミアム記事

三週間ぶんの実行記録を、日付順にまとめて読み返しておりました。どの日も緑でした。失敗の行が一つもありません。

喜ばしい並びのはずでした。ところが同じ検査を手元で素のまま呼んでみますと、違反が三件そのまま残っていたのです。手が止まりました。

検査そのものは正しく動いておりました。壊れていたのは、検査を呼び出している行の形のほうでした。ログを読みやすくしようとして足した | head -5 の一本が、失敗を持ち帰らなくしていたのです。

検査は、通ることではなく落ちることを先に確かめてから、無人に任せます。 その日以来、この一文を作業の前に置くようにしております。

緑だったのは、落ちられなくなっていたからでした

無人実行の記録は、たいてい「終了コードが 0 か否か」で色が決まります。ですから検査の中身がどれだけ厳密でも、呼び出し側が 0 を返してしまえば、記録の上では成功として積み上がっていきます。

厄介なのは、この壊れ方が出力を残すことです。ログには違反の行がきちんと書かれておりました。ただ、誰も落ちていないログを開いて読み返さないだけでした。無音で終わる不具合よりも、饒舌なまま気づかれない不具合のほうが、私には見つけにくかったのです。

私は個人開発で四つの技術サイトと二つの WordPress サイトを回しており、毎日の検査は Cowork のスケジュールに任せております。人が見ていない前提で組んだ仕組みだからこそ、「落ちる能力」そのものを疑う視点が抜けておりました。

終了コードが消える三つの経路

手元で一つずつ潰していきますと、消える場所は三つに絞れました。いずれも本番運用のスクリプトで自然に生まれる形で、書いている最中に手が止まる種類の落とし穴ではありません。

経路1 — パイプの右端が結果を上書きします

シェルはパイプラインの終了コードとして、いちばん右のコマンドの結果を返します。head も tee も、左側が何を返そうと自分は 0 で終わります。ログを整形する意図しかない一本が、判定そのものを差し替えてしまうのです。

経路2 — 関数内の local 宣言が代入結果を隠します

local out=$(cmd) と書きますと、$? に入るのは cmd の結果ではなく local 組み込みコマンドの結果になります。宣言は成功しますから、常に 0 です。関数へまとめた瞬間に生まれるので、動作を変えていないつもりの整理が原因になります。

経路3 — フォールバックの || が失敗を終わらせます

cmd || echo "failed" は「失敗したら知らせる」つもりの書き方ですが、echo が成功した時点で行全体は 0 になります。set -e を敷いていても、この行では止まりません。

どれも読みやすさや親切心から足したものでした。壊す意図のない一文字が、検査を無力にしていたのだと気づいたときは、しばらく言葉が出ませんでした。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦無人で走らせている検査が本当に落ちられる状態にあるかを、その日のうちに確かめられるようになる
✦パイプ・tee・local・フォールバックのどこで終了コードが消えるかを、自分のスクリプトの中から見つけ出せるようになる
✦違反を見逃したまま緑の記録が何週間も積み上がる事故を、40行ほどのハーネスを常設して未然に止められるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ Cowork2026-10-17
スケジュールタスクが SUCCEEDED のまま成果を出さなくなったら、最初の1分で外への通信を疑います
実行記録は緑なのに成果物が昨日のまま。外部への通信が CONNECT の 403 で止まっていないかを、短いプローブと鮮度チェックで最初の1分に見分ける手順をお伝えします。
◈ Cowork2026-10-08
毎回読ませる指示ファイルを半分にした夜、削る前に3つの引き出しへ分けました
指示ファイルが長くなるほど、書いたはずの決まりごとが守られなくなります。毎回読ませる分を半分にするため、残す・移す・捨てるの3つに分けた基準と、見出しごとの大きさを測る小さなスクリプトをまとめます。
◈ Cowork2026-09-18
Cowork と Claude Code のどちらに置くかを、承認の挟まり方で決めています
同じ Claude が動く Cowork と Claude Code を、機能の比較ではなく「途中で人の承認が挟まってよいか」で置き分けている基準と、無人の面に残す書き方を実例つきでお伝えします。