1. はじめに
Google Cloud の Data Agent Kit は、BigQuery などのデータ基盤を AI コーディングエージェントから扱うための拡張キットです1。前回の記事では、このキットを Claude Code に入れて検証しました。Claude Code 対応の実体は skills(エージェントが必要なときに読み込む手順書とスクリプトの束)のみで、回答の差を分けたのは SQL の知識ではなく実行手段と認証だった、というのが前回の結果です2。
今回はその続編として、同じ依頼文を本家側の Antigravity CLI(コマンド agy)で実行します。Data Agent Kit の対応環境には Antigravity CLI が並んでいます1。拡張のソースリポジトリはすべて gemini-cli-extensions org にあり、Gemini CLI 向けが本家で Claude Code 対応は移植です。その Gemini CLI は 2026 年 6 月 18 日に提供を終了し、Antigravity CLI へ統合されました3。本家系列を試すなら、対象は Antigravity CLI だけになります。
本家の拡張定義(gemini-extension.json)には、Claude Code 版に無い仕組みが 1つあります。contextFileName で指定した文書(BIGQUERY.md)を、セッションのたびにコンテキストへ読み込む指定です。スキルの説明文だけが手がかりの Claude Code 版では、データの場所を指定しない中立な聞き方だとキットは使われませんでした。常時読み込みの文書があれば、中立な聞き方でも BigQuery へ誘導されるのか。前回の考察で「未検証・範囲外」とした部分を、今回実測します。
1.1. 結論(先出し)
- BigQuery を指定した依頼では、拡張ありが skills 経由で、実験前に固定(事前登録)した期待値 10行に完全一致した。実行モデルはデフォルトの軽量な flash 系モデル(gemini-3.7-flash-high)で、上位クラスのモデル(claude-opus-5)を使った前回と同じ正解に、上位モデルに頼らず到達した
- 同じ依頼を拡張なしで実行すると、正しいテーブル名と SQL を提案しつつ実行手段が無く、Web 検索由来の数値表を返した(10行中 9行が期待値と不一致)。もっともらしい誤答を防いで実測値を返すことが、このキットを入れる価値である
- Antigravity CLI 版もインストールされるのは skills 3件だけ(MCP サーバーは登録されない)。実行の実体は Claude Code 版と同じ MCP Toolbox 1.1.0 の単発実行で、導入は GitHub URL を渡す 1 コマンドで済む
- 拡張定義にある常時読み込みの文書(BIGQUERY.md)は、Antigravity CLI では読み込まれていなかった(空にしても約 3,000文字を足しても入力トークンが変わらない)。有効化で増える約 230 トークンは skills の説明文で、ランタイムの構成は Claude Code 版と同じ skills だけである。中立な聞き方が BigQuery へ誘導されないのはその帰結で、使いたいデータ基盤は依頼文で指定する
1.2. 検証ゴール
| # | 確かめること | 確認できれば OK の条件 |
|---|---|---|
| 1 | Data Agent Kit の BigQuery 拡張を Antigravity CLI に導入し、実体(何がコンテキストに読み込まれ、何で実行するか)を特定する | インストールされたファイル構成から、常時読み込まれる文書と実行の仕組みが特定できる |
| 2 | BigQuery を指定した依頼で、拡張経由の実行が期待値と一致する | 回答の 10行(男女別トップ 5 と件数)が事前登録した期待値と一致する |
| 3 | 中立な依頼で、常時読み込みの文書が BigQuery へ誘導するかを観測する | ツール呼び出しログから参照データと実行経路が特定でき、Claude Code 版との違いが説明できる |
2. 検証環境
| 項目 | 内容 |
|---|---|
| マシン | Windows 11 Pro |
| Antigravity CLI (agy) | 1.1.22 |
| 導入した拡張 | bigquery-data-analytics 0.2.3 |
| MCP Toolbox | 1.1.0(拡張のスクリプトが固定指定) |
| BigQuery | 一般公開データセット bigquery-public-data.usa_names(実行プロジェクトは <PROJECT_ID> と表記) |
| 実行モデル | gemini-3.7-flash-high(セッション記録で実測。4 実験すべて同一) |
| 追加の切り分け実験(4.3 章) | agy 1.1.23・拡張 0.2.4(本実験の 3 日後に実施。どちらも自動更新されていた) |
前回の Claude Code 版はモデルが claude-opus-5 でした。クライアントとモデルの両方が違うため、本記事の比較は「同じキットが環境ごとにどう振る舞うか」の条件差の観察であり、製品の優劣を測るものではありません。
3. Data Agent Kit の Antigravity CLI 対応の仕組み
3.1. 拡張に何が入っているか
Data Agent Kit の BigQuery 拡張は、GitHub の gemini-cli-extensions org にある bigquery-data-analytics リポジトリです4。導入方法としては、BigQuery のほか Spanner・AlloyDB・Cloud SQL・Bigtable・Dataplex・Dataproc・Serverless Spark・Cloud Storage 向けの MCP サーバー(計 13)と skills を束ねた Starter Pack もありますが5、こちらはマニフェストで Toolbox を MCP サーバーとして常駐起動し、contextFileName はありません。今回は前回の Claude Code 版(bigquery プラグイン単体)と条件を揃えるため、単体の拡張を使います。
単体拡張のマニフェスト(gemini-extension.json)は次の指定を持ちます。
-
contextFileName: "BIGQUERY.md"の指定がある。BIGQUERY.md は 37行のセットアップ文書で、必要ロール(BigQuery User 等)やプロジェクト ID の設定手順が書かれている -
mcpServersの指定は無い。つまりこの拡張を入れても MCP サーバーは登録されない - skills が 3件入っている(下表)
| skill | 役割 | 実行スクリプト |
|---|---|---|
| bigquery-data | データ探索とデータセット管理 | execute_sql / get_table_info / list_table_ids など 6本 |
| bigquery-analytics | 寄与分析・予測などの分析タスク | forecast / ask_data_insights など 4本 |
| bigquery-ai-ml | BigQuery の AI/ML 関数(AI.*)を SQL で使う |
スクリプトなし(参照文書 9本) |
実行系のスクリプトは、search_catalog が 2つの skill に同梱される重複を含めて 10本あり、すべて @toolbox-sdk/server@1.1.0 を単発で起動して 1 ツールを呼び出す作りでした。常駐サーバーは立てず、バージョンは 1.1.0 に固定です。これは Claude Code 版のスクリプトと同じ作り・同じバージョンで、本数(重複込み 10本)まで一致します。
3.2. Claude Code 版との構造対比
| 観点 | Claude Code 版(前回) | Antigravity CLI 版(今回) |
|---|---|---|
| 配布・導入 | プラグインマーケットプレイス経由 | agy plugin install <GitHub URL> |
| 入るもの | skills のみ(3件) | skills のみ(3件) |
| MCP サーバー登録 | なし | なし |
| 常時読み込みの文書 | なし(スキル説明文が手がかり) | BIGQUERY.md の指定あり(ただし読み込まれない。4.3 章) |
| 実行の実体 | Toolbox 1.1.0 の単発呼び出し | Toolbox 1.1.0 の単発呼び出し(スクリプトも同じ作り) |
| 設定の渡し方 | プラグイン設定を環境変数へ変換 | 環境変数 BIGQUERY_PROJECT / BIGQUERY_LOCATION
|
つまりマニフェスト上の両者の差は、実行の仕組みではなく「常時読み込みの文書の指定の有無」に集約されます。この指定が実際に働くのかを 4.3 章で、振る舞いを変えるのかを 5 章で確かめます。
4. Antigravity CLI への導入手順
4.1. 拡張のインストール
GitHub の URL を渡すだけです。
agy plugin install https://github.com/gemini-cli-extensions/bigquery-data-analytics
実行すると「skills: 3 processed」と出力され、agents / commands / mcpServers / hooks はすべて「skipped (not found)」でした。導入されたファイルは ~/.gemini/config/plugins/bigquery-data-analytics/ に展開されます。
前回、Claude Code のマーケットプレイス追加では Windows 環境の都合(SSH クローンがデフォルトになる、パス長の上限に当たる)で 2つのつまずきがありました2。今回は URL を渡す 1 コマンドで完了しており、導入の手数はこちらのほうが少なく済んでいます。
公式ドキュメント6はプラグインの展開先を ~/.gemini/antigravity-cli/plugins/ と記載していますが、手元の agy 1.1.22 での実測は ~/.gemini/config/plugins/ でした。中身を確認するときは後者を見てください。
導入状態は agy plugin list で確認できます。なお、この一覧には有効/無効の状態が表示されません。切替の確認方法は 4.3 章に書きます。旧 Gemini CLI で同じ拡張を使っていた場合は、URL からの再インストールのほかに agy plugin import gemini で手元の extension を plugin へ変換する経路も用意されています7。
4.2. BigQuery への認証と設定
拡張のスクリプトは、実行環境の Application Default Credentials(ADC。gcloud の auth application-default login で作る認証情報)で BigQuery へつなぎます。今回は検証用に、環境変数で指定しました。
$env:GOOGLE_APPLICATION_CREDENTIALS = "<ADC の JSON ファイルパス>"
$env:BIGQUERY_PROJECT = "<PROJECT_ID>"
BIGQUERY_PROJECT はクエリを実行する自分のプロジェクトです。必要な権限はリポジトリの README に BigQuery User などのロールとして書かれています4。一般公開データセットへのクエリは月 1 TB まで無料で、今回の対象テーブルは 1回のフルスキャンが約 170 MB のため、無料枠のごく一部で済みます8。
4.3. 有効/無効の切替と、何が読み込まれているかの確かめ方
あり/なしの比較実験には agy plugin disable / enable を使いました。ただし前述のとおり agy plugin list は状態を出力せず、コマンド自体も何も出力せずに成功します。そこで、ヘッドレス実行の応答に含まれる入力トークン数を確認の根拠にしました。拡張を有効にすると、短い smoke 実行の入力トークンが毎回約 230 増えます(本実験時は約 14,160 が約 14,400 に)。利用可能ツールの一覧(ヘッドレス出力の init イベント)は有無で変わらないため、skills はツールとしてではなく、コンテキストへの読み込みとして現れることが分かります。
この増分が BIGQUERY.md の読み込みなのか skills の説明文なのかは、BIGQUERY.md の中身を変えて入力トークンを比べると切り分けられます。本実験の 3 日後(agy 1.1.23・拡張 0.2.4)に測った値が次の表です。
| 状態 | input_tokens(2回の値) |
|---|---|
| 拡張なし | 14,198 / 14,200 |
| 拡張あり(BIGQUERY.md は原文 2,491 バイト) | 14,429 / 14,425 |
| 拡張あり(BIGQUERY.md を空にする) | 14,426 / 14,427 |
| 拡張あり(BIGQUERY.md に約 3,000文字を追加) | 14,423 / 14,431 |
| 空の BIGQUERY.md を持つコピーからローカルに install | 14,429 / 14,432 |
BIGQUERY.md を空にしても増量しても、入力トークンは変わりません。つまり contextFileName で指定した文書は Antigravity CLI では読み込まれておらず、約 230 トークンの増分は 3つの skill の名前と説明文です。install の出力に処理対象として並ぶのも skills / agents / commands / mcpServers / hooks だけで、コンテキスト文書に相当する行はありません。contextFileName は Gemini CLI の拡張仕様の項目で、Antigravity CLI のプラグイン構成要素に対応する枠が無いためと考えられます。会話の保存記録にもシステムプロンプト側で読み込まれた内容は残らないため、読み込みの有無を確かめる手段は、この入力トークンの比較が実質唯一でした。
ヘッドレス実行は次の形です。--output-format stream-json にすると、ツール呼び出しの経過がイベントごとに 1行ずつの JSON で残るので、検証の記録にはこちらが向きます9。
agy -p '<依頼文>' --output-format stream-json --dangerously-skip-permissions
--dangerously-skip-permissions はツール実行の承認プロンプトを自動許可するフラグです。今回は使い捨ての空ディレクトリを作業場所にして実験に限定して使いました。
5. 実験:同じ依頼文を拡張あり/なしで実行する
5.1. 事前登録した依頼文と期待値
依頼文と期待値は前回の記事で固定したものをそのまま使います。比較の同一性を保つため、一字一句変えていません。
聞き方①(中立。製品名を出さない):
アメリカで 2020 年から 2021 年に生まれた赤ちゃんの名前について、一般公開されているデータを使って、男女別に最も多かった名前の上位 5 件を件数つきで調べてください。
聞き方②(BigQuery を指定して対象を固定する):
BigQuery の一般公開データセットを使って、アメリカで 2020 年から 2021 年に生まれた赤ちゃんの名前について、男女別に最も多かった名前の上位 5 件を件数つきで調べてください。
期待値は、実験の前に bq CLI(BigQuery のコマンドラインツール)で自分で実行して固定した次の 10行です(bigquery-public-data.usa_names.usa_1910_current を 2020〜2021 年で集計)。着手時に、このテーブルの実データが 2021 年までのまま変わっていないこと(データ側の更新で期待値が変わっていないこと)も再実測してから始めています。
| gender | name | total |
|---|---|---|
| F | Olivia | 35,369 |
| F | Emma | 31,089 |
| F | Charlotte | 26,350 |
| F | Ava | 25,919 |
| F | Amelia | 25,719 |
| M | Liam | 40,049 |
| M | Noah | 37,103 |
| M | Oliver | 28,850 |
| M | Elijah | 25,844 |
| M | James | 24,710 |
判定は「参照データ・集計解釈の整合」と「期待値との一致」を分けて見ます。同じテーブルに到達すれば値は完全一致するはずで、別のデータ源を参照すれば、名前や順位が合っていても件数が一致しなくなります。
5.2. 実験条件
拡張あり/なし × 聞き方①/② の 4通りを、それぞれ新規セッションの最初の依頼として実行しました。作業ディレクトリは空にし、依頼のたびに使い捨てます。実行モデルは 4 実験ともセッション記録の実測で gemini-3.7-flash-high でした。
5.3. 結果まとめ
| 条件 | 経路 | 参照データ | 期待値との一致 | 所要時間 |
|---|---|---|---|---|
| 拡張あり × 聞き方① | Web 検索 + python(skills 不使用) | 米国社会保障局(SSA)系の公開ミラー | 値は 10行一致(参照先は別。6 章) | 292.5 秒 |
| 拡張なし × 聞き方① | Web 検索 + python | SSA の全国集計ファイル | 名前・順位はほぼ同じ、件数はわずかに違う | 197.1 秒 |
| 拡張なし × 聞き方② | Web 検索のみ(実行ゼロ) | Web 上の記事・データ断片 | 10行中 1行のみ一致 | 109.2 秒 |
| 拡張あり × 聞き方② | skills(Toolbox 経由で SQL 実行) | usa_names.usa_1910_current |
10行完全一致 | 54.1 秒 |
5.4. 聞き方①(中立):拡張があっても BigQuery は使われない
拡張ありの実行は、skills の説明文がコンテキストにあるにもかかわらず、skills を一度も呼びませんでした。ツール呼び出しの記録に残っていたのは Web 検索(search_web)と python の実行だけです。SSA の名前統計を配る公開ミラーを順に探し、最終的に Hugging Face 上のデータセット(jbrazzy/baby_names)の Parquet ファイルを pandas で集計して、2 年合算と年別の両方の表を返しました。
拡張なしも同じ経路で、Web 検索から SSA の全国集計ファイル(yob2020.txt / yob2021.txt)を見つけて集計しています。
値には差が出ました。拡張ありの回答は期待値 10行と同じ値、拡張なしは名前と順位はほぼ同じで件数がわずかに違いました(例: Liam の 2 年合算が 40,049件に対して 39,931件)。どちらも BigQuery にはアクセスしていないのに片方だけ一致した理由は、参照したミラーの系列の違いによるものと考えられます(6 章)。
5.5. 聞き方②(BigQuery 指定):実行手段の差が結果を分ける
拡張ありは、skills の SKILL.md を読み、list_table_ids → get_table_info → execute_sql とスクリプトをつないで実クエリを実行しました。途中、execute_sql へ渡す JSON 引数が Windows のシェルエスケープで壊れる場面がありました。エージェントはスクリプトの中身を読んで小さなラッパーを自作し、自力でリカバリーして実行を完了しています。返ってきた 2 年合算の 10行は期待値と完全一致でした。BigQuery 側に書き込む操作(テーブル作成・削除など)は一度も実行されていません。
この到達は、デフォルトの flash 系の軽量モデルによるものです。前回の Claude Code 版は上位クラスのモデル(claude-opus-5)で 75 秒・完全一致でしたが、今回は軽量なモデルのまま 54.1 秒で同じ 10行に到達しました。環境が違うので速さの優劣は言えないものの、正解を返しているのがモデルの知識ではなくキットの実行力であることは、モデルのクラスを替えても変わりませんでした。
拡張なしは、Web 検索を 36回重ねただけで、SQL の実行手段がありません。それでも回答には正しいテーブル名(bigquery-public-data.usa_names.usa_1910_current)と、州別レコードを SUM(number) で集約する正しい SQL を提案として載せていました。ただし数値表は Web 検索で得た値の組み合わせで、期待値と一致したのは 10行中 1行でした。女の子の 3位と 4位は順序も入れ替わっていました。
前回の Claude Code 版(拡張なし)は「実行手段が無いのでご自身で実行してください」と数値を出さずに止まりました。今回の Antigravity CLI 版は、実行できないまま数値を埋めて返した点が対照的です。
6. 考察
拡張定義の常時読み込み指定(contextFileName)は、Antigravity CLI では働いていませんでした。BIGQUERY.md を空にしても増量しても入力トークンは変わらず、有効化による増分(約 230 トークン/回)は skills の説明文です。ランタイムの構成は Claude Code 版と同じ「skills だけ」で、聞き方①で skills の呼び出しがゼロだった結果とも整合します。「キットを入れただけでは使われず、データの場所は依頼文で指定する必要がある」という前回の結論は、Antigravity CLI でも変わりませんでした。
差を分けたのは前回と同じ「実行と認証」でした。聞き方②で拡張ありは Toolbox 1.1.0 経由の実クエリで期待値に完全一致し、拡張なしは正しい SQL を書けても実行できません。その実行の中身も、Claude Code 版と同じ作りのスクリプト・同じ Toolbox バージョンです。
正解の再現に、重いモデルは必要ありませんでした。キット経由の実行はデフォルトの flash 系モデルのまま 76,941 トークン・54.1 秒で完全一致しています。上位クラスのモデルで同じ 10行に到達した前回と合わせると、期待値どおりの値を返せたのは、キットの実行と認証があるためです。トークン消費を抑えたい日常のデータ問い合わせにも、軽量モデルとこのキットの組み合わせで対応できると考えられます。
聞き方①で拡張あり側の値が期待値と同じ値になったのは、BigQuery に到達したからではなく、最終的に集計した Hugging Face 上のミラーが usa_names と同じ SSA の州別ファイル系列に由来するためと考えられます(未検証)。「値が合っている」ことと「指定のデータ基盤で実行した」ことは別で、事前登録した期待値との照合で、この 2つを切り分けられました。
実行手段が無いときの振る舞いには、クライアントごとの差が出ました。前回の Claude Code は数値を出さずに実行手順を委ね、今回の Antigravity CLI は Web 由来の数値で表を作りました(10行中 9行が不一致)。キットの機能差ではなく応答方針の差ですが、言い換えると、このもっともらしい誤答を実クエリの値に置き換えることこそ、キットを入れる理由です。
7. まとめ
Data Agent Kit を本家系列の Antigravity CLI から使い、Claude Code 版と同じ依頼文・同じ期待値で対比しました。
- キットの価値は前回と同じく「実行と認証」にあった。BigQuery を指定すれば、デフォルトの flash 系モデルのままでも期待値 10行に完全一致し、拡張なしでは正しい SQL を書けても実行できず、もっともらしい誤答の表が返った
- 導入は GitHub URL を渡す 1 コマンドで、拡張の実体は skills 3件と Toolbox 1.1.0 の単発実行。Claude Code 版と同じ作りを、より少ない導入の手数と軽量なモデルで使えるのが Antigravity CLI 側の利点だった
- 拡張定義にある常時読み込みの文書(BIGQUERY.md)は、Antigravity CLI では読み込まれていなかった。ランタイムの構成は Claude Code 版と同じ skills だけで、使いたいデータ基盤は依頼文で指定する。指定すれば実測値が返る
Starter Pack 側の構成(MCP サーバーを常駐させる構成)や他の拡張での挙動は、本記事の実測の範囲外です。
参考
-
Data Agent Kit overview(公式 Docs。対応環境として Antigravity CLI / Claude Code / Codex CLI / Gemini CLI を列挙。Pre-GA) ↩ ↩2
-
Google Cloud の Data Agent Kit を Claude Code から使う(前回記事。依頼文と期待値はここで固定したものを流用) ↩ ↩2
-
An important update: Transitioning Gemini CLI to Antigravity CLI(Google Developers Blog 2026-05-19。2026-06-18 に Gemini CLI が提供終了) ↩
-
gemini-cli-extensions/bigquery-data-analytics(拡張本体のリポジトリ。gemini-extension.json と skills、必要ロールの記載) ↩ ↩2
-
gemini-cli-extensions/data-agent-kit-starter-pack(複数サービス向けの MCP サーバー 13個と skills を束ねた Starter Pack。こちらは MCP サーバー指定を持つ) ↩
-
Plugins & Skills(Antigravity CLI 公式 Docs。plugin の導入コマンドと構成要素) ↩
-
Migrating from Gemini CLI(Antigravity CLI 公式 Docs。既存 extension を plugin へ変換する
agy plugin import gemini) ↩ -
BigQuery public datasets(公式 Docs。ストレージは Google 負担、クエリは月 1 TB まで無料) ↩
-
Headless mode(Antigravity CLI 公式 Docs。
-p/--output-format/--dangerously-skip-permissionsのフラグ一覧) ↩