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

Antigravity のエージェント出力からシークレットを漏らさない多層防御 — ログ・差分・PR 本文を守る実装メモ

バックグラウンドエージェントの出力にシークレットが混入する3つの経路と、コミット差分・実行ログ・PR本文を守る多層防御の実装を、6アプリ運用の実体験と具体数値とともにまとめました。

Antigravity338AIエージェント36セキュリティ12シークレット管理3CI/CD17

プレミアム記事

バックグラウンドエージェントに 6 本のアプリのアップデート作業を任せていたある夜、生成された Pull Request の説明文に Firebase のサーバーキーらしき長い文字列が紛れ込んでいるのを見つけました。エージェントはクラッシュの再現手順を丁寧に書こうとして、デバッグ用に環境変数の中身をそのまま貼り付けていたのです。幸い公開前のプライベートリポジトリでしたが、もしこれが自動マージの設定だったらと考えると、背筋が冷えました。

私は廣川政樹と申します。2014 年から個人でアプリを開発し、壁紙・癒し・引き寄せ系のアプリを中心に累計 5,000 万ダウンロードほどを重ねてきました。最近は Antigravity のエージェントに iOS / Android の更新作業を任せる比率が増えていますが、エージェントは「人間なら直感的に避ける」シークレットの取り扱いを、文脈次第であっさり踏み越えます。ここでは、エージェントの出力からシークレットが漏れる経路を 3 つに分け、それぞれをどう塞ぐかを、実際に運用して計測した数値とともに共有します。

エージェントがシークレットを漏らす3つの出口

シークレット管理というと「どこに保管するか」に意識が向きがちですが、エージェント時代に本当に怖いのは保管場所ではなく出口です。.env を Git 管理から外し、Secret Manager に入れていても、エージェントが実行中にその値を読み取り、別の場所へ書き出してしまえば意味がありません。

私が観測した漏洩の出口は、次の 3 つに整理できました。

  1. コミット差分への混入。エージェントがデバッグ用の一時ファイルや設定スナップショットをそのままコミットに含めてしまうケースです。
  2. 実行ログと監査証跡への混入。エージェントが環境変数をダンプしたり、API レスポンスを丸ごとログに流したりするケースです。後から監査ログを残す設計にしているほど、そこに平文の鍵が永続化される危険が高まります。
  3. PR 本文やチャット応答への混入。冒頭の事故がこれです。エージェントが「説明のため」に値を引用してしまう、最も気づきにくい経路です。

この 3 つは性質が違うため、ひとつの対策ですべては塞げません。差分はコミット前に止める、ログは流しながら伏せる、PR とチャットは公開直前に最終チェックする、という具合に層を分けて考える必要があります。

出口1: コミット差分 — pre-commit で止める

最初の防衛線はコミットです。エージェントが git commit を実行する前に、ステージされた差分をスキャンして鍵らしき文字列を弾きます。私は gitleaks をベースに、自分のアプリ事業特有のパターンを足したフックを使っています。

うまくいかない書き方から見ていきましょう。次のように「コミットメッセージだけ」を見るフックは、肝心の差分の中身を素通りさせます。

# アンチパターン: メッセージしか見ておらず差分本体を検査していない
#!/usr/bin/env bash
msg=$(cat "$1")
if echo "$msg" | grep -qi "secret"; then
  echo "コミットメッセージに secret が含まれています"
  exit 1
fi
exit 0

実際に守りたいのはステージされた差分です。次のように、git diff --cached の中身を gitleaks に渡して検査します。

#!/usr/bin/env bash
# .git/hooks/pre-commit — ステージ済み差分のみを対象に検査する
set -euo pipefail
 
# gitleaks があれば差分モードで実行(インストール済み環境のみ)
if command -v gitleaks >/dev/null 2>&1; then
  if ! gitleaks protect --staged --redact --config .gitleaks.toml; then
    echo "❌ シークレットらしき文字列がステージ差分に検出されました"
    echo "   git restore --staged <file> で取り消してから再コミットしてください"
    exit 1
  fi
fi
 
# 自前パターンによる二次チェック(gitleaks 未導入環境のフォールバック)
diff=$(git diff --cached -U0 | grep '^+' || true)
patterns=(
  'AKIA[0-9A-Z]{16}'                 # AWS アクセスキー ID
  'AIza[0-9A-Za-z_-]{35}'            # Google API キー
  'gh[pousr]_[0-9A-Za-z]{36}'        # GitHub トークン
  'sk_live_[0-9A-Za-z]{24,}'         # Stripe 本番シークレット
)
for p in "${patterns[@]}"; do
  if echo "$diff" | grep -Eq "$p"; then
    echo "❌ 鍵パターン /$p/ がステージ差分に一致しました"
    exit 1
  fi
done
exit 0

ここでの肝は --staged(gitleaks では protect --staged)です。リポジトリ全体の履歴を毎回スキャンすると個人開発の小さなマシンでも数十秒かかりますが、ステージ差分だけなら 6 アプリのどのリポジトリでも 1 秒未満で終わります。エージェントの作業ループに組み込むには、この速さが現実的な分かれ目になります。

.gitleaks.toml には、アプリ事業で実際に使う鍵の種類を allowlist / ルールとして明示しておきます。AdMob のアプリ ID のように「鍵に見えるが公開して問題ない値」を除外しておかないと、後述する誤検知に悩まされます。

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

この記事の続きを読む

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

この記事で得られること
コミット差分・実行ログ・PR本文という3つの漏洩経路を分けて防ぐ多層防御の設計図
pre-commit フックと CI ガードの実装コード(gitleaks 連携・正規表現・エントロピー判定)
6アプリ運用で計測した誤検知率と、allowlist で false positive を 12%から 0.4%へ下げた調整手順
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Agents & Manager2026-07-13
エージェントに API キーを安全に渡す — 実行時の環境変数注入とログ漏洩の遮断
Antigravity のエージェントに秘密情報を渡すとき、実行時の環境変数注入と出力のマスキングで、リポジトリとログの両方から漏洩を遮断する実装をまとめました。
Agents & Manager2026-06-24
外部ページに紛れ込んだ指示で無人エージェントが動いてしまう前に — 入力の汚染を追跡して権限を落とす設計
無人実行のエージェントが取得した外部ページやPDFに指示が紛れていても乗っ取られないよう、入力の汚染を追跡して副作用ツールの権限を落とす設計を、動くPythonコードと運用の実測値つきで解説します。
Agents & Manager2026-06-30
Android CLI が3倍速・トークン7割減になったとき、増やすべきは並列数ではなく1件あたりの検証だった
Android CLI のエージェントが3倍速・トークン約7割減になった、というニュースを見て最初に考えたのは「では何本同時に走らせようか」でした。けれど速くなって本当に変わるのは生産量ではなく、詰まる場所です。レビューと検証ゲートに移ったボトルネックを Little's Law で見積もり、WIP キャップで並列数を抑え、浮いた予算を1件あたりの検証に回す設計を、動く Python 実装と実測値でまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →