ANTIGRAVITY LABEN
記事一覧/Antigravity 基本
Antigravity 基本/2026-06-16上級

複数プロジェクトのガードレールを1箇所に集める — Antigravity SDK を薄くラップする設計

プロジェクトごとに同じ安全策をコピーしていると、片方だけ直して片方が古いまま、という事故が起きます。Antigravity SDK の薄いラッパーを1本作り、コスト上限・許可ツール・出力検証を一元化する設計と実装を、複数アプリを並行運用する立場から共有します。

antigravity434SDK4ガードレール設計12運用8TypeScript11再利用

プレミアム記事

きっかけは、あるプロジェクトのエージェントが、本来触らせないはずのディレクトリにファイルを書き込んだことでした。原因を追うと、別のプロジェクトでは設定していた許可ツールの制限が、そのプロジェクトには入っていませんでした。同じ安全策を各プロジェクトにコピーして回るうちに、1箇所だけ古いまま取り残されていたのです。

個人開発で複数のアプリと複数のサイトを並行で動かしていると、Antigravity SDK を呼ぶコードがあちこちに散らばります。App Store と Google Play のリリース自動化、AdMob のレポート集計、記事の生成。どれもエージェントに任せていますが、そして散らばったコードは、必ず少しずつ食い違っていきます。片方を直して片方を忘れる。新しいモデルに移すとき、3箇所は直したが4箇所目を見落とす。こうした食い違いは、注意深さでは防げませんでした。

そこで、SDK を直接呼ぶのをやめ、薄いラッパーを1本だけ作って、すべてのプロジェクトをそこに通すようにしました。ここでは、そのラッパーにコスト上限・許可ツール・出力検証を集めた設計を共有します。

なぜ「薄い」ラッパーなのか

最初に注意したのは、ラッパーを厚くしすぎないことでした。SDK の機能を全部包み直すような分厚い抽象を作ると、SDK が更新されるたびにラッパーも追従が必要になり、かえって保守が増えます。

私が目指したのは、SDK の呼び出しはほぼそのまま通し、横断的に効かせたい安全策だけを差し込む薄い層です。具体的には、すべての呼び出しが必ず通る一点を作り、そこでコスト・ツール・出力をチェックする。SDK のАPIそのものは隠さず、危険なデフォルトだけを禁止する。この線引きが、長く使えるラッパーの条件でした。

ラッパーに集めたい横断的な安全策は、整理すると次の3つでした。

  1. コスト上限です。上限なしの実行を構造的に禁止し、見積もりと実コストの二重で止めます。
  2. 許可ツールです。既定では読み取り系だけを許し、書き込みは明示許可がない限り通しません。
  3. 出力検証です。スキーマに通らない出力は採用せず、本番運用の下流に流しません。

この3つは、どのプロジェクトでも同じ形で効かせたい注意点です。だからこそ、各所にコピーするのではなく1箇所に集める価値がありました。

危険なデフォルトを型で禁止する

ラッパーの価値の半分は、実は型設計にあります。SDK を直接使うと、安全策の引数は「任意」です。任意ということは、忘れられるということです。ラッパーでは、忘れてはいけない引数を必須にしました。

import { createAgent, type AgentRunResult } from "@antigravity/sdk";
 
// 各呼び出しが必ず渡さねばならない安全策 — すべて必須にする
interface SafeRunOptions {
  task: string;
  // コスト上限を任意にしない。上限なしの実行を型レベルで禁止する
  maxCostUsd: number;
  // 許可ツールは明示必須。空配列なら「何も許可しない」を意味する
  allowedTools: string[];
  // 出力スキーマ検証は必須。検証なしの採用を許さない
  validate: (output: unknown) => boolean;
  // モデルは別名でなく固定バージョンで受ける
  model: `gemini-3.5-flash-${string}` | `gemini-3.5-pro-${string}`;
}
 
export async function safeRun(opts: SafeRunOptions): Promise<AgentRunResult> {
  // ここがすべての呼び出しの一点。以降の章でガードを足していく
  return runWithGuards(opts);
}

maxCostUsd を任意にしないのが効きました。SDK では上限を渡さなければ青天井で走ります。ラッパーの型でこれを必須にすると、上限を書き忘れたコードはそもそもコンパイルが通りません。安全策を「書いてあるか目で確認する」運用から、「書かなければビルドできない」仕組みに変えられます。

model をテンプレートリテラル型で固定バージョンに縛ったのも同じ発想です。gemini-3.5-flash という別名だけを渡すコードは型エラーになり、必ずバージョン付きで書くことになります。

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

この記事の続きを読む

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

この記事で得られること
SDK を直接呼ばず薄いラッパー経由に統一することで、コスト上限・許可ツール・出力検証を1箇所に集める設計の全体像を取得できます
ラッパーに必須引数を強制し、危険なデフォルトを禁止する型設計と、本番で効いた fail-closed の実装コード(TypeScript)を学べます
5つのプロジェクトに散っていた安全策の重複を1本のラッパーに集約し、ポリシー更新の反映漏れをゼロにした運用の判断基準が分かります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Antigravity 基本2026-05-31
独立した複数リポジトリでエージェント運用の一貫性を保つ — マルチリポ・ガバナンス設計の実装メモ
monorepo ではなく、独立した複数リポジトリにまたがって Antigravity エージェントの振る舞いを揃える設計手法を、4サイト並行運用の実体験から整理しました。AGENTS.md の単一ソース配布、ドリフト検出、品質ゲートの横展開までを実装コード付きで解説します。
Antigravity 基本2026-07-11
付与した権限は、本当に全部使われていますか — Antigravity 統一パーミッションを実使用ログから絞り込む
統一パーミッションで一度「全許可」に倒すと、使われない権限が静かに溜まります。付与した権限と行動ログを突き合わせ、未使用の許可を回収して最小権限へ絞り込む「付与→観測→回収」ループを、動くTypeScript実装と個人運用の実測値でまとめます。
Antigravity 基本2026-07-07
承認ダイアログに指が慣れる前に — Antigravity 統一パーミッションで許可設定を1枚に束ねる
散在した承認ダイアログとMCPごとの許可リスト、繰り返される再認証。Antigravity 2.2.1 の統一パーミッションとOAuthキーリング保存を軸に、許可設定を1枚のポリシーへ集約し「承認疲れ」を設計から断つ運用を、動くコードと実測値でまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →