◉ANTIGRAVITY LABEN
記事一覧/Agents & Manager
◈ Agents & Manager/2026-06-20上級

無人実行のエージェントをタイムアウトで止めたとき、書きかけのファイルが残る問題

スケジュール実行のエージェントがタイムアウトで殺されると、書きかけのファイルが静かに残ります。原子的な書き込み・固定名temp残骸の排除・書き込み後の内容検証で、無人パイプラインを壊さない設計をまとめました。

Antigravity411エージェント77無人実行8信頼性5ファイル書き込み

✦ プレミアム記事

ある朝、スケジュールで回しているエージェントの出力を確認したら、生成物の一部が途中で切れていました。ログ上は「失敗」と記録されていたのに、切れたファイルはそのままディレクトリに残っていて、後続のビルド工程がそれを正常な入力として拾ってしまっていたのです。原因はすぐに分かりました。実行がタイムアウトに達してプロセスが SIGTERM で殺された瞬間、エージェントは目的のファイルへの書き込みの途中だったのです。

私自身、複数のコンテンツ生成パイプラインを夜間のスケジュールに載せて、寝ている間にエージェントへ作業を渡しています。手元で対話的に動かしているときは、途中で止まっても自分の目で気づけます。けれど無人実行では「中途半端な状態が静かに残り、それを誰も見ないまま次の工程が進む」という、対話実行には存在しなかった失敗モードが現れます。Antigravity 2.0 の CLI を cron 的な無人実行に組み込むほど、この問題は避けて通れなくなります。

ここでは、その「書きかけのファイル」を根絶するための原子的書き込みと、それに付随する二つの落とし穴(固定名 temp の残骸混入・exit code では守れない検証)への対処を、実際に私が落ち着いた形でまとめます。

タイムアウトで殺されたエージェントが残すもの

無人実行のエージェントを時間制限つきで動かすと、制限に達した時点で実行基盤がプロセスへシグナルを送って止めます。問題は、その瞬間にエージェントが何をしていたかを制御できないことです。

典型的に残るのは次の3種類です。

残るもの起きること後続への影響
半分書けた出力ファイル書き込みの途中で SIGTERM を受け、先頭だけが書かれる後続が「正常な入力」として拾い、壊れた成果物が伝播する
固定名の一時ファイル前回の失敗で消されずに残った temp が、今回そのまま読まれる今回の生成物に 前回の内容が混入する(しかも無音)
ロックファイル正常終了時に消す前提のロックが残る次回起動が「実行中」と誤判定してスキップされる

いちばん厄介なのは2番目です。1番目(半分書けたファイル)は中身を見れば異常に気づけますが、固定名 temp の残骸は「もっともらしい正しさ」を装って混入するため、出力件数も整合性チェックも通ってしまい、内容を一行ずつ照らし合わせるまで気づけません。私はこの混入で一度、別の記事の段落が紛れ込んだ生成物を危うく公開しかけたことがあります。

なぜ exit code だけでは守れないのか

無人パイプラインの守りを exit code に寄せるのは自然な発想です。けれど、上の3つはどれも exit code では捉えきれません。

  • 半分書けたファイル: プロセスは「失敗(非ゼロ)」で終わるのに、ファイルはすでに部分的に存在する。exit code を見て「失敗だから後続を止める」だけでは、残ったファイル自体は掃除されない。
  • 固定名 temp の混入: 今回の生成は**成功(ゼロ)**で終わる。前回の残骸を読んでしまっただけなので、exit code は何も警告しない。
  • 空ファイル: 書き込み先は開けたが中身を書く前に死ぬと、サイズ0のファイルが成功扱いで残ることがある。

つまり守りには二つの軸が要ります。ひとつは「書き込みを途中状態で外に見せない」原子性。もうひとつは「書けたものが本当に意図した内容か」を確かめる、exit code とは独立した内容アサーションです。

✦

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

この記事の続きを読む

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

この記事で得られること
✦タイムアウトで殺されたエージェントが残す『半分書けたファイル』を、temp + rename の原子的書き込みで根絶する具体パターン
✦固定名の一時ファイルが次回実行へ静かに混入する事故を、ユニーク名と起動時クリーンアップで防ぐ手順
✦exit code では検知できない『成功したのに中身が空/前回の残骸』を、書き込み後の内容アサーションで弾く検証ゲート
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◈ Agents & Manager2026-10-25
空き容量 11MB で無人ジョブが止まりました。du が数えたのは 59MB だけで、残りの約 9GB は見えない場所にありました
エージェントを無人で走らせる前に、書き込み先の空きを測って止める bash スクリプト 2 本の全文です。du と df の数字が噛み合わない理由と、自分では片付けられない空き不足の見分け方も書きました。
◈ Agents & Manager2026-10-22
引き継ぎ文書の古い参照は 17 件に見えて実際は 2 ファイルでした。本当に危なかったのは、別のサイトの手順書が混ざっていたことでした
エージェントに読ませるリポジトリ直下の .md を点検する Python スクリプトの全文です。素朴な版は壊れた参照を 17 件と数え、直すと 7 件、実体は 2 ファイル。別の問題が見つかるまでの過程を残します。
◈ Agents & Manager2026-10-16
エージェントに .zip を渡す前に、.git を除いて 29 MB を 15 MB にし、秘密情報の警告 28 件を見分けました
Antigravity アプリ v2.23.0 で .zip を添付できるようになりました。自分のリポジトリを実際に固めて .git の重さと秘密情報検査の誤検知を数え、除外・検査・マニフェストを一度に行う Python スクリプトの全文を残します。