Hands-on Workshop

Antigravity ハンズオン

Cloud Workstations + Antigravity CLI で、実装から Cloud Run デプロイまで

⏲ 90分
☁ Cloud Workstations + Antigravity CLI
🎯 中級
はじめに:本ガイドの「要確認」表記について 要確認
Antigravity 2.0 と Gemini Enterprise Agent Platform(Vertex AI の進化版。GEAP は本ガイドの略記で、Google 公式の略語ではありません)は比較的新しい製品で、CLI の導入コマンド・認証フラグ・.agents/ のパス・モデル名などの具体値は変わる可能性があります。本ガイドでは確実な土台(Cloud Workstations のブラウザ IDE / ウェブプレビュー、エージェントの「計画→承認→実行→検証」、AGENTS.md、curl 検証、Cloud Run デプロイ)をベースに記述し、ツール固有の具体値には 要確認 を付けています。実施前に公式ドキュメント(antigravity.google / cloud.google.com)で最新手順をご確認ください。 なお、agy CLI のコマンド詳細は CLI リファレンス(日本語要約) にまとめています。

Workshop Agenda

Chapter 0

環境準備 & 認証

Cloud Workstation を起動し、Antigravity CLI を GEAP 認証してアプリを動かす 15分

この版はローカルに何もインストールしません
すべての作業はブラウザ内の Cloud Workstation(Code OSS ベースの IDE)で完結します。手元の OS や VSCode の状態に左右されず、全員が同一環境で進められます。
最初に確認しておくと便利
TUI 起動後は ? でいつでもコマンド一覧を表示できます。まず /config(=/settings)で verbosity を low にするとノイズが減ります。よく使うコマンドは附録 Bにまとめています。

事前準備チェックリスト

  • Google Cloud アカウント(GEAP が管理者により有効化済み)
  • 自分用の Cloud Workstation が割り当て済み(または作成権限がある)— 附録 A 参照
  • Chrome ブラウザ
  • (Ch.5 用)Cloud Run / Cloud Build / Artifact Registry へのデプロイ権限 — 附録 A 参照

Step 1: Cloud Workstation をブラウザ IDE で開く

Google Cloud コンソールで Cloud Workstations を開き、自分のワークステーションの 「起動」→「起動(Launch)」をクリックします。
ブラウザに Code OSS の IDE が開きます(URL は https://80-<workstation>.<cluster>.cloudworkstations.dev の形式)。左にエクスプローラー、下に統合ターミナルがある、VSCode に近い画面です。
メニューの Terminal → New Terminal で統合ターミナルを開きます(以降のコマンドはここで実行します)。

Step 2: Antigravity CLI のセットアップと GEAP 認証 要確認

Antigravity CLI(agy)が未インストールの場合はインストールします(理想は管理者がカスタムイメージにプリイン済み — 附録 A)。公式インストーラ(antigravity.google 配信)が agy バイナリを ~/.local/bin に配置します(永続ディスク上なので次回以降も残ります)。agy は実行中にバックグラウンドで自動更新されます。
# 公式インストーラ(macOS / Linux)
curl -fsSL https://antigravity.google/cli/install.sh | bash
agy --version
Antigravity CLI を組織の Google Cloud(Gemini Enterprise Agent Platform)で認証します。ワークステーションはヘッドレスなので、CLI が SSH / リモートセッションを自動検出し、表示された URL を別タブのブラウザで開いてワンタイムコードを貼り付ける流れになります(専用フラグは不要)。プロジェクトはログイン時に指定します。
# ログイン(初回はウィザードで「Google Cloud プロジェクトを使う」を選択)
# プロジェクトをフラグで指定する形式:
agy auth login --project YOUR_GEAP_PROJECT_ID
# ロケーションはログイン時に選択(global / eu / us のいずれか)
# プロジェクト / ロケーションの変更は /logout 後に再ログインして選び直す
コマンド・フラグは agy auth login --help で確認 要確認
認証コマンドは agy auth login です(旧表記の agy login / agy config set project|location は公式ソースで確認できませんでした)。ロケーションは us-central1 のような細粒度リージョンではなく global / eu / us の 3 エンドポイントです。公式ドキュメント(antigravity.google)は JS レンダリングのため自動取得が難しく、正確なフラグは実機の agy auth login --help と /help で確認してください。
ローカル PC との違い
デスクトップ版 Antigravity は自動でブラウザを開きますが、Cloud Workstation のターミナルはヘッドレスです。「URL 表示 → 別タブで開く → コードを貼り戻す」のヘッドレス OAuth フローになります。

Step 3: gcloud 認証(Cloud Run デプロイ用)

Ch.5 のデプロイで使う gcloud を認証します。gcloud はワークステーションに同梱されていますが、ユーザーとしてのログインは別途必要です。
gcloud auth login --no-launch-browser
# 表示された URL をブラウザで開き、コードを貼り付け
gcloud config set project YOUR_PROJECT_ID
認証は 2 系統あります
Antigravity CLI の認証(GEAP)= エージェント/モデルの実行用。gcloud の認証= Cloud Run へのデプロイ用。役割が違うので両方行います。

Step 4: リポジトリを clone して starter を開く

git clone https://github.com/nozoyoshida/gca-handson.git
開くフォルダに注意
File → Open Folder で gca-handson/antigravity/starter/ を開いてください。AGENTS.md はワークスペースのルートから読み込まれるため、サブフォルダ(antigravity/starter/)を開く必要があります。
# 統合ターミナルで(starter/ にいる状態)
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.py

Step 5: ウェブプレビューで動作確認

アプリ起動後、ターミナルに出る http://localhost:5000 のリンクをクリックします。Code OSS が認証済みのプレビュー URL(https://5000-<ws>.<cluster>.cloudworkstations.dev)に自動変換して開きます。
チケット一覧 GUI が表示され、/tickets が JSON を返すことを確認してください。
プレビューが開かないとき
ポートは 80 と 1024–65535 がプレビュー可能です(5000 / 8080 は OK)。それでも繋がらない場合は、アプリが 127.0.0.1 ではなく 0.0.0.0 で待ち受けているか確認してください(flask run --host 0.0.0.0 -p 5000 で起動し直すと確実です)。

題材アプリ: お問い合わせ管理 API

Flask + SQLite で構築したシンプルなチケット管理 REST API です。

MethodPath説明
GET/ticketsチケット一覧取得(status, priority でフィルタ可)
GET/tickets/<id>チケット詳細取得
POST/ticketsチケット作成
PUT/tickets/<id>チケット更新
PATCH/tickets/<id>/statusステータス変更
GET/tickets/search?q=チケット検索
antigravity/starter/ ├── app.py # Flask アプリケーション本体 ├── AGENTS.md # Ch.2 で編集(空ファイル / Antigravity の Rules) ├── templates/ # Jinja2 テンプレート(GUI) │ ├── base.html │ ├── index.html │ └── ticket_detail.html ├── requirements.txt # 依存パッケージ └── .gitignore
Chapter 1

Antigravity CLI の基本

「計画 → 承認 → 実行 → 検証」のエージェントループを体験する 10分

この Chapter では変更を保持しないでください
Ch.1 は操作に慣れることが目的です。エージェントが作ったコードは承認しても後で git restore . で元に戻すか、計画段階で却下してください。Ch.2 以降で app.py を本格的に変更します。
プロンプト内ショートカット & セッション操作
入力中に使えます: @ パス補完 / ! ターミナル直実行 / esc esc 入力クリア / Esc 中断。セッションは /rewind(/undo) で巻き戻し・/fork で分岐・/resume で再開できます。
1-1. TUI を起動して全体像を掴む 3分
antigravity/starter/ のターミナルで CLI の対話 UI(TUI)を起動します。
# 対話 TUI(ターミナル UI)を起動
agy
入力欄・使用中モデル・トークン使用量などが表示されます。まずは読み取り専用の質問をしてみましょう:
CLI に入力するプロンプト
@app.py このプロジェクトの構成と、提供している API エンドポイントを説明してください。
Insight
Antigravity はエージェントファーストです。補完を待つのではなく、「やりたいこと」を伝えると、エージェントがコードベースを読み、計画を立て、実行し、検証します。
1-2. 計画 → 承認 → 実行 → 検証 4分
小さなタスクでエージェントループを体験します(後で戻すので保持しません):
CLI に入力するプロンプト
ヘルスチェック用に GET /health エンドポイントを追加してください。{"status": "ok"} を返すだけの簡単なものでよいです。
エージェントが計画を提示します。ファイル操作やコマンド実行の前に許可(allow / deny / ask)を求められるので、内容を見て承認します。
実行後、エージェントが curl などで動作を確認します。確認できたら、変更を破棄して元に戻します:
git restore .
# 追加された未追跡ファイルがあれば: git clean -fd
権限モード(allow / deny / ask)
読み取り系は allow、破壊的な操作は ask にするのが基本です。すべてを自動承認する --dangerously-skip-permissions(いわゆる YOLO モード)は、ハンズオンでは使わないでください。
1-3. CLI での「検証」と成果物 3分

デスクトップ IDE 版はブラウザ拡張で画面操作を録画して検証しますが、CLI(ヘッドレス)では次の方法で検証します:

  • アプリ起動 + curl で API の挙動を確認(エージェントが自動で行うこともあります)
  • ウェブプレビューで GUI を目視確認(Ch.0 Step 5 の方法)
Insight
CLI の「成果物(Artifacts)」は、リポジトリ内のファイル(計画メモ・コード差分)とターミナル出力です。git diff で変更を確認し、計画と突き合わせる習慣をつけましょう。
Chapter 2

Context Engineering

AGENTS.md(Rules)と Skill で、AI の出力品質を一貫してコントロールする 16分

Context Engineering とは
AI に渡すコンテキスト(指示・背景・規約)を設計・最適化すること。Antigravity では AGENTS.md(Rules) がプロジェクトの規約を伝える中心的な仕組みで、エージェントが毎タスクで自動的に読み込みます。
2-1. Before: AGENTS.md なしでコード生成 4分
まだ AGENTS.md は空のままです。CLI に以下を依頼します:
CLI に入力するプロンプト
@app.py チケットにカテゴリ分類機能を追加してください。カテゴリはマスターテーブルで管理し、チケット作成時にカテゴリを指定できるようにしてください。また、カテゴリ別のチケット集計APIも作成してください。
提示された計画と差分を観察します。以下の観点で見てください:
  • 変数名の命名規則は統一されているか?
  • エラーハンドリングはあるか?形式は?
  • SQL クエリにパラメータ化クエリが使われているか?
  • docstring やコメントはあるか?
変更は保持しないでください
この演習は観察が目的です。実行してしまった場合は git restore .(未追跡ファイルは git clean -fd)で元に戻してください。Exercise 2-3 の Before/After 比較のため、app.py を綺麗な状態に保ちます。
観察のヒント: 既存コード (app.py) にはどんな課題がある?

現在のコードはたまたま snake_case で書かれていますがルールとして明文化されていません。エラーハンドリングは関数ごとにバラバラで、create_ticket() や search_tickets() には一切ありません。SQL は安全なパラメータ化クエリと危険な f-string が混在(get_tickets() のフィルタ、search_tickets())。docstring は全関数で 0 個です。

Insight
これらは開発者が意識しないと AI も同じパターンで生成します。AGENTS.md で規約を明示すると、AI の出力を一貫してコントロールできます。
2-2. AGENTS.md を作成する 4分
ワークスペースルートの AGENTS.md(空ファイルが用意されています)に、antigravity/templates/AGENTS.md の内容をコピーします:
# お問い合わせ管理 API — エージェント向けルール(AGENTS.md)

## プロジェクト概要
Flask と SQLite を使用したチケット管理 REST API です。

## コーディング規約

### 命名規則
- 変数名・関数名: snake_case
- 定数: UPPER_SNAKE_CASE

### ドキュメント
- 全ての関数に Google Style の docstring を記述すること
- API エンドポイントの docstring には HTTP メソッドとパスを含めること

### エラーハンドリング
- エラー時は {"error": "説明"} の形式で適切な HTTP ステータスコードを返す
- 400: バリデーションエラー、404: リソース未検出、500: サーバーエラー

### データベース
- SQL クエリには必ずパラメータ化クエリ(? プレースホルダー)を使用
- f-string や % 演算子で SQL を組み立てることは禁止

### バリデーション
- 全てのユーザー入力に対してバリデーションを実施すること
- 文字列フィールドには最大長制限を設けること

### セキュリティ
- 秘密鍵やパスワードをハードコードしてはならない
- 本番環境では debug モードを無効にすること
保存します。エージェントは次のタスクから自動的にこのファイルを読み込みます。
AGENTS.md の階層 要確認
Antigravity は v1.20.3 以降、ネイティブの GEMINI.md に加えて AGENTS.md(クロスツール標準)も読み込みます。スコープはグローバル(~/.gemini/)→ プロジェクトルートの AGENTS.md → サブディレクトリ の順です。会社全体の規約をグローバルに、プロジェクト固有のルールをルートに置くことで、チーム全体で一貫した出力が得られます。注意: サブディレクトリの AGENTS.md は既定で無効で、Settings → Agent →「Load nested AGENTS.md files」で有効化します(有効時もルートを上書きせず補完)。競合時の優先順位は System Rules → GEMINI.md → AGENTS.md → ワークスペースの rules フォルダ、とされます(この優先順位は公式 JS ドキュメントで未確認のため要確認)。
2-3. After: AGENTS.md ありでコード生成 3分
新しい CLI セッションで(履歴の影響を避けるため)、Exercise 2-1 と全く同じプロンプトを入力します。
Before / After を比較します:
Before(AGENTS.md なし)
  • 命名規則がバラバラ
  • エラーハンドリングが不十分
  • docstring がないことがある
  • SQL にパラメータ化クエリが使われない場合がある
  • バリデーションなし
After(AGENTS.md あり)
  • 一貫した snake_case
  • {"error": "..."} 形式のレスポンス
  • Google Style docstring 付き
  • パラメータ化クエリ使用
  • 入力バリデーション付き
確認したら git restore .(+ git clean -fd)で破棄します(Ch.3 をきれいな状態から始めるため)。
Insight
同じプロンプトでも、AGENTS.md があるだけで出力品質が劇的に変わります。AGENTS.md は、プロジェクトに追加できる最もレバレッジの高いファイルです。
2-4. Skill でコードレビューを自動化する 3分
antigravity/templates/code-review.skill.md の内容を .agents/skills/code-review.md に置きます(先頭に frontmatter: name: code-review / description: ... を付ける)。登録すると /code-review として呼び出せます。
CLI でスラッシュコマンドとして呼び出し、現在の差分をレビューさせます:
CLI に入力
/code-review
GCA の styleguide.md に相当
Gemini Code Assist では .gemini/styleguide.md を使った GitHub PR 自動レビューでしたが、Antigravity では Skill(再利用可能な / コマンド)として、チームのレビュー基準をその場で実行できます。
2-5. 解説:コンテキストの 3 つの仕組み 2分
仕組み用途読み込みタイミング
AGENTS.md(Rules)プロジェクトの常時ルール(規約・背景)全タスクで自動
.agents/skills/(Skill)再利用する手順。frontmatter の name が / コマンド名になる(例 /code-review)起動時に登録 → / で実行
@ ファイル参照特定ファイルをそのプロンプトの文脈に追加プロンプトで明示指定時
持ち帰りアクション
明日から自分のプロジェクトに AGENTS.md を追加してみてください。10分の投資で、チーム全体の AI 出力品質が向上します。
Chapter 3

Agentic Coding

複数ファイルにまたがる機能を、計画レビュー付きで一気に実装する 16分

エージェントの出力は毎回異なります
生成 AI の出力は毎回変わるため、講師や隣の参加者と結果が違っても正常です。大事なのは計画の内容をレビューする体験です。想定と大きく異なる場合は completed/app.py を参照してください。
大きめの実装を進めるコツ
規模の大きいタスクは /agents・/tasks で進捗を監視できます。ベストプラクティスは「検証ループ」: テストや curl をエージェント自身に実行させ、結果を見て反復させましょう。
3-1. 対応履歴機能を実装する 8分
CLI に以下のプロンプトを入力します:
CLI に入力するプロンプト
お問い合わせ管理APIに対応履歴機能を追加してください。

要件:
1. responses テーブルを作成(id, ticket_id (外部キー → tickets.id), responder TEXT, message TEXT, is_internal BOOLEAN デフォルト 0, created_at)
2. init_db() 内に CREATE TABLE IF NOT EXISTS で responses テーブル作成を追加(既存テーブルに影響を与えない)
3. GET /tickets/<id>/responses - 対応履歴を時系列で取得
4. POST /tickets/<id>/responses - 対応履歴を追加(responder, message 必須、is_internal 任意)
5. チケットが存在しない場合は 404
6. ticket_detail.html に対応履歴の一覧を表示(内部メモには「内部メモ」バッジ)
エージェントが実行計画を提示します。承認する前に、以下を確認してください:
計画レビューのポイント
  • responses テーブルに is_internal カラムが含まれているか
  • ticket_id に外部キー制約が設定されているか
  • GET と POST の両方のエンドポイントが計画に含まれているか
  • ticket_detail.html の更新が含まれているか
問題なければ承認し、エージェントに複数ファイルの変更を実行させます。この変更は保持します(デプロイ対象になります)。
Insight
単一のプロンプトから、DB テーブル設計・API・GUI まで一貫して生成されます。計画のレビューが「あなたの価値を発揮する場所」です。アーキテクチャの問題はコードが書かれる前(計画段階)に指摘しましょう。
3-2. AGENTS.md との相乗効果を確認 4分
生成されたコードが AGENTS.md の規約に従っているか確認します:
AGENTS.md の規約が適用されているか
  • snake_case の命名規則に従っているか
  • Google Style の docstring が付いているか
  • パラメータ化クエリを使用しているか(f-string ではなく)
  • エラーレスポンスが {"error": "..."} 形式か
  • 入力バリデーションが含まれているか
Agentic Coding + AGENTS.md = 一貫性
AGENTS.md があることで、複数の機能を追加しても規約に沿った一貫したコードが生成されます。
3-3. 動作確認 4分
アプリを再起動します:
python app.py
新しいエンドポイントを curl でテストします:
# 対応履歴を追加
curl -X POST http://localhost:5000/tickets/1/responses \
  -H "Content-Type: application/json" \
  -d '{"responder": "鈴木", "message": "パスワードリセットのリンクを送信しました", "is_internal": false}'

# 内部メモを追加
curl -X POST http://localhost:5000/tickets/1/responses \
  -H "Content-Type: application/json" \
  -d '{"responder": "山田", "message": "原因調査中。認証基盤側の障害の可能性あり", "is_internal": true}'
ウェブプレビューで /tickets/1/view を開き、対応履歴セクションを確認します:
  • 鈴木さんの対応記録が表示されているか
  • 山田さんの内部メモに「内部メモ」バッジが付いているか
  • 時系列順に並んでいるか
Insight
バックエンド(API)+ フロントエンド(GUI テンプレート)にまたがる変更を、1 つのプロンプトで完結できます。
Chapter 4

セキュア開発

脆弱性を検出し、修正し、ルールとして定着させる 13分

このアプリには意図的な脆弱性が含まれています
starter/app.py には教育目的の脆弱性が埋め込まれています。本番コードでは絶対に使用しないでください。
Ch.3 で一部修正済みの場合があります
Ch.2 で追加した AGENTS.md にセキュリティ規約が含まれるため、Ch.3 のエージェントが一部の脆弱性を自動的に避けている可能性があります。残っている脆弱性に集中してください — これは Context Engineering が効いている証拠です。
脆弱性場所内容
SQLisearch_tickets()f-string で SQL を組み立て
SQLiget_tickets() フィルタstatus を直接 SQL に埋め込み
Validationupdate_status()任意の文字列をステータスとして受け付ける
Configapp.run()debug=True でデバッガー露出
Secretsapp.secret_key秘密鍵がハードコード
4-1. 脆弱性を検出する 4分
CLI に入力するプロンプト
@app.py このコードをセキュリティの観点で包括的にレビューしてください。OWASP Top 10 を基準に、SQLインジェクション、入力バリデーション、認証・認可、設定の問題に注目し、各脆弱性のリスクレベルと具体的な修正方法を提案してください。
検出結果を確認し、上記 5 つの脆弱性が検出されるか見てみましょう。
Insight
AI は SQLi のような技術的脆弱性だけでなく、設定ミス(debug=True)やハードコード秘密鍵も検出します。AI はセキュリティ専門家を代替しませんが、最初のパスのコストを劇的に下げます。
4-2. 脆弱性を修正する 4分
CLI に入力するプロンプト
このコードベースのセキュリティ脆弱性を全て修正してください。

1. 全ての SQL インジェクションをパラメータ化クエリで修正
2. title フィールドに入力バリデーション追加(1-200文字、HTML タグ除去)
3. ステータス更新時に許可された値のみ受け付けるバリデーション追加
4. secret_key を環境変数から読み込むように変更
5. debug モードを環境変数で制御するように変更
計画をレビューして承認します。修正後、特に search_tickets() が以下のように変わっているか確認します:
Before(脆弱)
sql = f"SELECT * FROM tickets
WHERE title LIKE '%{q}%'"
db.execute(sql)
After(安全)
sql = "SELECT * FROM tickets
WHERE title LIKE ?"
db.execute(sql, (f'%{q}%',))
この修正は保持します(安全な状態でデプロイするため)。
4-3. セキュリティルールを AGENTS.md に定着させる 3分
antigravity/templates/AGENTS_security.md の「セキュリティ(最優先)」セクションを、AGENTS.md の先頭付近に追記します:
## セキュリティ(最優先)

### SQL インジェクション防止
- f-string、% 演算子、.format() を SQL 文で絶対に使用しないこと
- 必ずパラメータ化クエリ(? プレースホルダー)を使用すること

### 入力バリデーション
- 全てのユーザー入力に対してバリデーションを実施すること
- 文字列フィールドには最大長制限を設けること
- HTML タグやスクリプトタグを除去またはエスケープすること
- ステータス等の列挙値は許可リストで検証すること

### 設定
- 秘密鍵は環境変数から読み込むこと
- 本番環境で debug=True を使用しないこと
- エラーメッセージに内部情報(スタックトレース等)を含めないこと
Insight
セキュリティ知識をコード(AGENTS.md / Skill)として定着させることが重要です。一度書けば、以降のすべてのエージェントタスクと /code-review で自動的にチェックされます。
4-4. 補足: Antigravity / Google Cloud のセキュリティ 2分
機能説明
権限モデル(allow/deny/ask)コマンド・ファイル・URL を action(target) 単位で制御(詳細は下の設定例)。
URL 許可リストエージェントがブラウザ操作する際の接続先を制限し、プロンプトインジェクションを防ぐ。要確認
GEAP ガバナンスAgent Identity / Registry / Gateway によりエージェントを集中管理・監査。
Model ArmorLLM の入出力をリアルタイムにスクリーニング(プロンプトインジェクション検出・PII マスキング等)。
エージェントの実行自体を安全に縛る
settings.json(~/.gemini/antigravity-cli/settings.json)の permissions(allow/deny/ask、優先順位 Deny > Ask > Allow)と enableTerminalSandbox(nsjail / sandbox-exec / AppContainer)で、エージェントの実行自体を制限できます(例 deny: command(rm -rf), command(sudo))。

Model Armor

LLM の入出力を守るセキュリティレイヤー
Model Armor は、プロンプト(入力)とレスポンス(出力)をリアルタイムでスクリーニングする Google Cloud のサービスです。
flowchart LR
    A["User Input"] --> B
    subgraph B["Model Armor - 入力"]
      direction TB
      B1["Prompt Injection 検出"]
      B2["PII マスキング"]
      B3["不正 URL ブロック"]
    end
    B --> C["Antigravity
(GEAP)"] C --> D subgraph D["Model Armor - 出力"] direction TB D1["有害コンテンツ検出"] D2["機密データ除去"] end D --> E["Response"] style A fill:#e8f0fe,stroke:#4285f4,color:#202124 style C fill:#e6f4ea,stroke:#34a853,color:#202124 style E fill:#e8f0fe,stroke:#4285f4,color:#202124 style B fill:#fce8e6,stroke:#ea4335,color:#202124 style D fill:#fce8e6,stroke:#ea4335,color:#202124
Chapter 5

Cloud Run へデプロイ

完成したアプリを本番化し、ワークステーションからサーバーレスで公開する 16分

この Chapter のゴール
Ch.3 で機能を追加し、Ch.4 でセキュアにしたアプリを、Cloud Run にデプロイして公開 URL で動かします。Cloud Workstation には gcloud が同梱され、Ch.0 で認証済みなので、そのままデプロイできます。
前提
Ch.0 Step 3 で gcloud auth login 済み・プロジェクト設定済みであること、ユーザーに Cloud Run デプロイ権限(roles/run.admin 等)が付与されていること(附録 A)。
非対話実行で自動化に組み込む
agy -p "..." --cwd $(pwd) でエージェントを非対話実行でき、git hook や CI などに組み込めます。
5-1. エージェントでアプリを本番対応にする 5分
Flask の開発サーバーは本番に不向きです。CLI に以下を依頼します:
CLI に入力するプロンプト
このアプリを Cloud Run にデプロイできるよう本番対応にしてください。

1. requirements.txt に gunicorn を追加
2. アプリは 0.0.0.0 と環境変数 PORT(既定 8080)でリッスンするようにする
3. gunicorn 経由(__main__ を通らない)でも DB が初期化されるよう、init_db() をモジュール読み込み時に呼ぶ(CREATE TABLE IF NOT EXISTS で冪等に)
4. Dockerfile を作成(gunicorn で app:app を起動し、PORT にバインド)
5. .gcloudignore を作成(.venv, *.db, __pycache__ などを除外)
計画をレビューして承認します。特に init_db() がモジュール読み込み時に呼ばれる点を確認してください。
Insight: よくある落とし穴
元の app.py は init_db() を if __name__ == '__main__' 内でのみ呼びます。Cloud Run では gunicorn がアプリを import して起動するため __main__ は実行されず、DB 未初期化で 500 エラーになりがちです。完成形は completed/ を参照してください。
5-2. API を有効化する 2分
デプロイに必要な API を有効化します(認証は Ch.0 で完了済み):
gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
5-3. Cloud Run にデプロイする 6分
ソースから直接デプロイします(Cloud Build がコンテナをビルド):
gcloud run deploy inquiry-system \
  --source . \
  --region asia-northeast1 \
  --allow-unauthenticated
エージェントに任せることもできます
CLI に「このアプリを Cloud Run の asia-northeast1 リージョンに、未認証アクセスを許可してデプロイして」と依頼すると、エージェントが公式の Cloud Run MCP サーバー(OSS: @google-cloud/cloud-run-mcp、またはマネージドのリモート MCP サーバー)の deploy-local-folder などのツールを呼び出してデプロイし、URL を読み戻します(実行時に許可を求められます)。このデプロイは Cloud Build API・Google Cloud クライアントライブラリ経由で行われ、gcloud run deploy をシェル実行するわけではありません(同等の手動コマンドは上の gcloud run deploy --source .)。要確認 公式 codelab では同フローを「Gemini CLI」で説明しているため、agy 固有の呼称・操作は実機でご確認ください。
完了後、出力の最後に Service URL: https://inquiry-system-xxxxx.run.app が表示されます。
5-4. 動作確認 3分
払い出された URL をブラウザで直接開きます(Cloud Run は公開なので、ウェブプレビューは不要です)。チケット一覧 GUI と /tickets の JSON を確認します。
SQLite はデモ用途のみ(重要)
Cloud Run のファイルシステムは揮発性で、インスタンスはゼロにスケールします。SQLite ファイルはコールドスタートやインスタンス再作成で消えます。今回はデプロイ手順の体験が目的なので SQLite のままで構いませんが、本番では Cloud SQL や Firestore などのマネージドデータベースを使用してください。
Insight
アイデア → 実装(Ch.3)→ セキュア化(Ch.4)→ デプロイ(Ch.5)まで、同じエージェントと共に一気通貫で行いました。Cloud Workstations + Antigravity CLI なら、クラウド上の同一環境で「実装から出荷まで」が完結します。
Wrap-up

まとめ & 次のステップ

4分

本日のポイント

Chapter学んだこと持ち帰りアクション
Ch.1 CLI の基本計画→承認→実行→検証のループ日々のタスクをエージェントに任せてみる
Ch.2 Context EngineeringAGENTS.md で AI の出力品質を制御明日、自分のプロジェクトに AGENTS.md を追加
Ch.3 Agentic Coding複数ファイルの機能を計画レビュー付きで実装フィーチャーブランチで試し、計画をレビューする
Ch.4 セキュア開発脆弱性検出 → 修正 → ルール化AGENTS.md / Skill にセキュリティルールを追加
Ch.5 Cloud Run デプロイ本番化 → デプロイ → 公開 URL で確認小さなサービスを gcloud run deploy --source . で公開

AI 時代の開発者に求められること

76%→83%
コンテキスト改善による
レビュー精度の向上
Context Engineering が AI 活用の成否を決める

「エージェントが成功するか失敗するかを決める最大の要因は、モデルの性能ではなくコンテキストの質である」。AGENTS.md のような小さな追加が、精度と信頼性を大きく改善します。

Sources: Martin Fowler / Anthropic / Google Cloud

1.7x
AI 生成コードは
人間より多くの問題を含む
Agentic Coding でも開発知見は不可欠

AI 生成コードは 1.7 倍の問題を含み、45% にセキュリティ欠陥があるという調査も。AI は開発者を「コードを書く人」から「設計し、レビューし、判断する人」に変えます。計画レビューの体験はその縮図です。

Sources: CodeRabbit 2025 / Qodo / GitHub Blog

5日
脆弱性公開から
悪用までの期間(2025年)
攻撃者も AI を使う。防御にも AI とガバナンスが必要

脆弱性が悪用されるまでの期間は 2020 年の 700 日超から 2025 年にはわずか 5 日に短縮。AGENTS.md / Skill による自動チェック、Model Armor や GEAP のガバナンスは「あれば便利」ではなく必須の防御です。

Sources: Google Cloud / DeepStrike / Deep Instinct

持ち帰りアクション
  1. AGENTS.md を作成する — 10分で書けて、チーム全体の AI 出力品質が向上
  2. エージェントをフィーチャーブランチで使う — 計画をレビューする習慣をつける
  3. セキュリティを AGENTS.md / Skill に定着 — 毎タスクで自動チェック
  4. 小さなサービスを Cloud Run にデプロイ — 実装から出荷まで一気通貫で体験
次に読む
agy の権限・サンドボックス・並列サブエージェント・-p 自動化などをさらに深掘りしたい方は 発展ハンズオン(agy の特徴を深掘り) へ。各コマンドの詳細は Antigravity CLI リファレンス にまとめています。

参考リンク

附録 A

管理者セットアップ(GEAP + Cloud Workstations)

受講者がすぐ始められるよう、管理者が事前に行う準備 参考

ロール名・API は下記の確定値を参照(一部 要確認) 要確認
Cloud Workstations のカスタムイメージ手順は公式ドキュメントで確認済みです。GEAP(Gemini Enterprise Agent Platform)の有効化と IAM ロールも下記に確定値を記載しましたが、エンドユーザー向け Gemini Enterprise アプリ等とは別系統のため、実施時点の公式ドキュメントでの最終確認を推奨します。

1. Gemini Enterprise Agent Platform(GEAP = 本ガイドの略記)

  • エージェント基盤の API aiplatform.googleapis.com を有効化(有効化には roles/serviceusage.serviceUsageAdmin が必要)。開発者には Agent Platform User(roles/aiplatform.user)を付与
  • 有料シート(Gemini Code Assist Standard / Enterprise)の割り当ては Google Cloud コンソールの「Admin for Gemini」ページで行う(Antigravity 自体は現状プレビューで無償利用枠あり)
  • 開発者は Antigravity CLI から自分の Google Cloud ID でサインインし、ログイン時にプロジェクトとロケーション(global / eu / us)を選択する

2. Cloud Workstations

# API 有効化
gcloud services enable workstations.googleapis.com compute.googleapis.com

# クラスタ作成(リージョンに1つ。作成に ~20 分)
gcloud workstations clusters create handson-cluster --region=asia-northeast1

# コンフィグ作成(マシンタイプ / イメージ / アイドルタイムアウト / カスタム SA)
gcloud workstations configs create handson-config \
  --cluster=handson-cluster --region=asia-northeast1 \
  --machine-type=e2-standard-4 \
  --idle-timeout=3600s

# 各受講者のワークステーションを作成し、利用権限を付与
gcloud workstations create ws-user01 \
  --cluster=handson-cluster --config=handson-config --region=asia-northeast1
理想: カスタムイメージに Antigravity CLI / gcloud をプリインストール
Google 提供のベースイメージ(Code OSS)を拡張し、agy や追加ツールを焼き込んだカスタムイメージを Artifact Registry に push してコンフィグで指定すると、受講者は Ch.0 の導入手順を省けます。/home は永続ディスクが実行時にマウントされビルド時の変更が上書きされるため、/home 依存の初期化は /etc/workstation-startup.d/ のスタートアップスクリプト(3 桁の数値プレフィックス >200 で実行順を制御、root 実行)で行います。
  • 各受講者に roles/workstations.user(自分で作成させる場合は roles/workstations.workstationCreator も)を付与

3. Cloud Run デプロイ権限(Ch.5 用)

受講者の Google アカウントに以下を付与しておくと、Ch.5 がスムーズです:

ロール用途
roles/run.adminCloud Run サービスのデプロイ・更新
roles/iam.serviceAccountUserCloud Run 実行 SA として動作
roles/cloudbuild.builds.editorソースデプロイ時の Cloud Build 実行
roles/artifactregistry.writerビルド済みイメージの push
附録 B

Antigravity CLI チートシート

よく使う操作のまとめ 参考 要確認

詳細は CLI リファレンスへ
公式 CLI ドキュメントを日本語要約した Antigravity CLI リファレンス に各コマンドの詳細をまとめています。最新の正確な情報は 公式ドキュメント でご確認ください。
# インストール / バージョン確認(公式インストーラ)
curl -fsSL https://antigravity.google/cli/install.sh | bash
agy --version

# 対話 TUI を起動(Google アカウントでサインイン。ログアウトは /logout)
agy

# 一発実行(CI / git hook 向け)
agy -p "コミット前の差分をレビューして"

# ── 確認済み(公式 CHANGELOG / README)──────────────
# フラグ:       -p(非対話実行)  --model(モデル指定)
# サブコマンド:  agy models / agy changelog / agy plugin / agy update
# スラッシュ:    /settings /permissions /resume /diff /usage /quota
#              /credits /statusline /help /logout /changelog /add-dir
# キーバインド:  ctrl+r(Artifact Review)  ctrl+k(承認)  ctrl+o
#              ctrl+d(終了)  ctrl+delete  alt+j

# ── 要確認(公式ソース未確認。Claude Code / Gemini CLI 由来の可能性)──
# --cwd, /model /agents /tasks /skills /rewind /undo /fork /switch /clear,
# プロンプト内 @ ! ? esc, ctrl+v(画像添付) は実機の /help で確認してください
ファイル / 仕組み役割
AGENTS.md / GEMINI.md(ルート)起動時に自動読込される常時ルール(Rules)
~/.gemini/antigravity-cli/settings.json設定・permissions(allow/deny/ask)・enableTerminalSandbox
スキル / プラグイン
~/.gemini/antigravity-cli/plugins/
/skills で参照。skills / agents / rules / MCP / hooks を配布
権限アクション action(target)command(...) / read_file(...) / mcp(...) 等を allow/deny/ask
(任意)ローカル VS Code から使いたい場合
このハンズオンはブラウザ IDE 完結ですが、Cloud Workstations はローカル VS Code からのリモート接続にも対応しています。手元の VS Code を使いたい場合は、Cloud Workstations のリモート接続機能で接続し、統合ターミナルで同じ agy コマンドを実行できます。要確認