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

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

エージェントがシークレットを漏らす出口を、コミット差分・実行ログ・PR 本文の3つに分けて塞ぐ多層防御の実装メモです。pre-commit と CI での関門づくり、allowlist と entropy による誤検知の抑え方、漏れた後の復旧手順まで記しました。

Antigravity386AIエージェント36セキュリティ14シークレット管理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-04-27
AgentKit 2.0 で作ったAIエージェントを売る5つの収益化パス — 個人開発者が選ぶべき販売チャネルの判断軸
Antigravity で作ったAIエージェントを個人開発者がどう売るか。マーケットプレイス、自社サイト、SaaS 組み込み、受託からの商品化、サブスクの5チャネルを、手取り・顧客との距離・立ち上がりの速さで比べ、Stripe の課金コードと利用上限の設計まで書き残します。
◈ Agents & Manager2026-04-14
Antigravity × AgentKit 2.0 × Stripe でつくるAIエージェント SaaS — 個人開発者が本番運用まで到達する実装ガイド
AgentKit 2.0 と Stripe を組み合わせ、サブスクリプション収益を得られる AI エージェント SaaS を Antigravity で構築する手順をまとめました。アーキテクチャ設計から課金・Webhook の冪等性、同時実行スロットが漏れる Redis 実装の穴まで、個人開発で実際につまずいた箇所を中心に整理しています。
◈ Agents & Manager2026-10-16
エージェントに .zip を渡す前に、.git を除いて 29 MB を 15 MB にし、秘密情報の警告 28 件を見分けました
Antigravity アプリ v2.23.0 で .zip を添付できるようになりました。自分のリポジトリを実際に固めて .git の重さと秘密情報検査の誤検知を数え、除外・検査・マニフェストを一度に行う Python スクリプトの全文を残します。