ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-05-28上級

Antigravity Background Agent のフォレンジック設計 — 6 ヶ月後でも判断を再現できる Cloudflare R2 監査ログ運用

Antigravity Background Agent の本番運用が長期化したときに必要になる、6 ヶ月後でも判断理由を再現できる監査ログの設計を、Cloudflare R2 への書き込み層・PII マスキング・Polars クエリまで実装パターンとしてまとめました。

antigravity435background-agent8audit-trailforensicscloudflare-r2observability17

プレミアム記事

Antigravity Background Agent を本番事業に組み込んで 4 ヶ月を超えたあたりから、これまでにはなかった種類の問い合わせが自分の中から増えました。「先月のこの日、エージェントが Remote Config の値を変えた判断の根拠は何だったか」というような、当時の文脈を後追いで再現するタイプの問い合わせです。

廣川政樹として 2014 年からアプリ事業を 1 人で続けていて、累計 5,000 万 DL に達する壁紙アプリの運用や AdMob 経由の収益最適化を、複数のエージェントが連鎖して回しています。エージェント A が Remote Config を書き換え、エージェント B がその値を読んで広告フィルを再配分し、エージェント C が翌朝のレポートをまとめる、という流れです。1 つでも判断の根拠が消えると、月次のレポートが組み立てられなくなりました。

国際芸術賞 17 冠の作家活動とは別軸で、個人開発の裏側を支えるインフラ整備を続けてきました。意思決定ログ自体は派手ではない領域ですが、長期で運用するなら最初に整えたほうが良いというのが、4 ヶ月運用を超えてからの実感です。

6 ヶ月後を見据えるとログの粒度が変わる

短期のデバッグだけが目的なら、Cloud Logging の標準テキスト出力で足ります。私自身、最初の数週間はそうしていました。問題が起きたのは、3 ヶ月以上前のエージェントの判断を再現しようとしたときでした。

テキストログには「Remote Config の adSlot_A を 0.65 に更新しました」という結果しか残っていません。なぜ 0.65 だったか、どの観測値を見たか、どのプロンプトを使ったか、どのモデルを呼んだか、という文脈が完全に欠落していました。3 ヶ月前のエージェントの記憶はもう蒸発しています。これを後追いで埋めるには、当時の判断材料そのものを構造化して保管しておく必要があります。

私が落ち着いた指針は次の 3 つです。

  1. 結果ではなく 判断材料 を残す(観測値・前提条件・スコア)
  2. プロンプトとモデルバージョンを 不変な ID で紐付ける
  3. PII を最初に剥がしてから書く(後付けの匿名化はほぼ機能しません)

構造化スキーマの 4 層モデル

ログのスキーマを次の 4 層に分けています。1 リクエストあたり 12 KB ほどに収まるサイズ感です。

type DecisionLogV2 = {
  // 第 1 層: identity(誰がいつ何を呼んだか)
  ts: string;            // ISO8601、ミリ秒精度
  trace_id: string;      // ULID(時系列ソートが効く)
  agent_id: string;      // "remote-config-tuner@v17"
  parent_trace_id?: string;
 
  // 第 2 層: inputs(何を観測したか)
  inputs: {
    metric_window: { from: string; to: string };
    observed: Record<string, number | string>;
    feature_flags: Record<string, boolean>;
  };
 
  // 第 3 層: reasoning(どう考えたか)
  reasoning: {
    prompt_hash: string;        // プロンプトの SHA-256
    model: string;              // "gemini-3-pro-2026-04"
    candidates: Array<{ label: string; score: number; rationale: string }>;
    chosen: string;
  };
 
  // 第 4 層: action(何を変えたか)
  action: {
    target: string;             // "remote_config.adSlot_A"
    before: unknown;
    after: unknown;
    rollback_token: string;     // 巻き戻し用
  };
};

agent_id にバージョンを必ず埋めるのが、3 ヶ月後の自分への一番のプレゼントになります。「あのときのエージェントは v15 だった」と分かれば、当時のプロンプトテンプレートも Git タグから引き出せます。

prompt_hash は SHA-256 を入れておきます。プロンプトの全文を 1 リクエストごとに保存すると R2 の保管コストが跳ね上がるため、ハッシュだけ残しておいて、別の不変テーブルに「ハッシュ → 全文」のマッピングを置く構成です。これで重複保管を 28% ほど削減できました。

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

この記事の続きを読む

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

この記事で得られること
1 リクエストあたり 12 KB に収まる JSON ログスキーマと、Cloudflare Workers から R2 に毎分シンクする書き込み層の構成
AdMob と App Store 連携を扱う運用で 6 ヶ月後に「なぜこのエージェントは A ではなく B を選んだのか」を再現する Polars クエリ 4 種類
API キー・端末識別子・購入トークンなど 12 種類を自動マスキングして、App Store / Google Play / EU GDPR の保管要件を満たす除外パターン
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Agents & Manager2026-06-21
Background Agent に夜間作業を任せて、朝に後悔しないために — 無人実行のガードレール設計
Antigravity の Background Agent に夜間リファクタを任せると、朝には便利さと同じだけの不安が届きます。被害範囲・完了条件・静かな劣化の検出という3点から、無人実行を安心して回すためのガードレール設計を運用視点でまとめました。
Agents & Manager2026-06-15
Antigravity のマルチエージェントを本番で壊さない封じ込め設計 — 連鎖障害を止める3つの境界の実装メモ
Antigravity のマルチエージェント構成は単体では綺麗に動くのに、本番では小さな失敗が全体に波及します。連鎖障害を止めるための制御の階層化・信頼境界・観測と冪等性という3つの境界を、TOML 設定と相関IDラッパーの実装まで含めて整理しました。
Agents & Manager2026-05-29
Antigravity 長時間実行エージェントの監視設計 — watchdog と段階的リカバリ
AdMob 収益最適化を 8 週間バックグラウンドエージェントに任せて見えた、長時間タスクが静かに停止する 3 つの故障モード。watchdog タイマーと段階的リカバリの実装メモを残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →