ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-07-02上級

夜中に失敗した無人ランを翌朝の再発防止に変える — ポストモーテムの還流路を設計する

深夜の無人ランの失敗が数日後に形を変えて戻ってくる連鎖を断ち切るための、ポストモーテム還流路の設計です。失敗の証拠を run record として残し、5分類のタクソノミで還流先を決め、朝5分のレビューで回す集約スクリプトまで実装していきます。

antigravity439agents91postmortem自動化運用無人実行4

プレミアム記事

深夜2時にスケジュールしたエージェントのランが失敗し、朝に通知だけが残っている。その場でログを眺めて「今回はタイムアウトか」と手直しして再実行し、数日後にまた似た失敗が別のタスクで起きる。私自身、複数の無人ランを毎晩回すようになってから、この「直したはずの失敗が形を変えて戻ってくる」状態にしばらく悩まされました。

原因ははっきりしています。失敗への即応はしていても、失敗から学んだことを設定やプロンプトに書き戻す経路、つまり還流路がなかったのです。

本稿は、その還流路を仕組みとして固定するための設計メモです。障害対応そのものの手順は Antigravity Agent 本番障害対応 Runbook 設計 — 検知から復旧・再発防止までの実践フレームワーク が扱っているため、ここでは「復旧が済んだ後、同じ失敗を二度と起こさないための事後検証」だけに絞ります。

即応と事後検証を分ける理由

失敗直後の自分は、とにかくランを通したい状態にあります。再実行して通れば満足してしまい、根本原因の記録は後回しになります。

そこで役割を時間で分けます。夜間の失敗に対して夜のうちにやるのは自動リトライと通知だけ。原因の分類と是正は、翌朝の決まった5分に寄せる。私はこの分離を決めてから、対応の質が安定したと感じています。

即応を薄くする代わりに、失敗の証拠を機械が拾える形で必ず残すことが前提になります。

失敗の証拠を run record として残す

各ランの終了時に、成否を問わず1つの JSON を書き出します。私が使っているスキーマは次の通りです。

{
  "task": "site-a-premium-article",
  "startedAt": "2026-07-02T02:00:11+09:00",
  "endedAt": "2026-07-02T02:14:52+09:00",
  "exitCode": 1,
  "phase": "quality-gate",
  "lastOutputTail": "templating_gate: duplicated paragraph detected ...",
  "configHash": "9f2c31a",
  "modelUsed": "gemini-3.5-flash",
  "retryCount": 1
}

ポイントは phase です。ラン全体を「準備 / 生成 / 品質ゲート / push / ログ記録」のような段階に切り、失敗した段階を記録します。後述する分類の大半は、この phase を見るだけで機械的に絞り込めます。

configHash はプロンプトと設定ファイルをまとめてハッシュ化したものです。「設定を変えた直後から失敗が増えた」を後から検証できるようにするためで、実際にこれで原因を特定できたことが二度あります。

書き出しはラッパースクリプトの trap で行います。

#!/usr/bin/env bash
# run-with-record.sh <task-name> <command...>
TASK="$1"; shift
REC_DIR="$HOME/.agent-runs/$(date +%Y-%m-%d)"
mkdir -p "$REC_DIR"
START="$(date -Iseconds)"
LOG="$(mktemp)"
 
finish() {
  local code=$?
  jq -n \
    --arg task "$TASK" --arg started "$START" \
    --arg ended "$(date -Iseconds)" \
    --arg tail "$(tail -c 800 "$LOG")" \
    --arg phase "${AGENT_PHASE:-unknown}" \
    --argjson code $code \
    '{task:$task, startedAt:$started, endedAt:$ended,
      exitCode:$code, phase:$phase, lastOutputTail:$tail}' \
    > "$REC_DIR/${TASK}-$(date +%H%M%S).json"
}
trap finish EXIT
 
"$@" 2>&1 | tee "$LOG"
exit "${PIPESTATUS[0]}"

実行するタスク側は、段階が変わるたびに export AGENT_PHASE=generation のように環境変数を更新するだけです。既存のタスクにほとんど手を入れずに導入できます。

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

この記事の続きを読む

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

この記事で得られること
失敗ランを5分類し、それぞれの是正先を1つに決める分類タクソノミの実例
run record の JSON スキーマと、前日の失敗を朝5分で読める形に集約するスクリプト
同一原因の再発率を6週間で約40%から12%まで下げた還流運用の実測記録
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Agents & Manager2026-07-15
ls には見えるのに、エージェントが開けない — 日本語ファイル名が macOS と Linux で別物になるとき
エージェントが「そのファイルは存在しません」と言い、ターミナルの ls には確かに写っている。三日かけて同期を疑った末に辿り着いたのは、濁点が一文字ではなかったという事実でした。検出スクリプトと三層ゲートまで残します。
Agents & Manager2026-07-08
エージェントに任せた仕事の「やり直し率」を測る — 委譲境界を勘ではなく数字で引く
エージェントへの委譲境界を勘ではなく数字で引くために、タスク種別ごとの「やり直し率」を git 履歴から算出する方法を紹介します。信頼区間を添える理由や、委ねる・要レビュー・自分でやるを分ける決定ルール、実際に境界を引き直した記録まで扱います。
Agents & Manager2026-07-05
エージェント開発スタックの『既知の正常』を1枚のロックファイルで守る — 可動部が同時に動く時代の変更予算設計
IDEビルド・CLI・モデル・依存が同時に動くと、回帰の原因が特定できなくなります。既知の正常を1枚のロックファイルに固定し、一度に動かす軸を絞る変更予算の設計を、実装コードと運用ログで整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →