Google Antigravity のスタートガイド

1. はじめに

この Codelab では、エージェント ファーストの時代に向けて IDE を進化させるエージェント型開発プラットフォームである Google Antigravity(以降、このドキュメントでは Antigravity と表記)について説明します。

行を自動補完するだけの標準的なコーディング アシスタントとは異なり、Antigravity は、計画、コーディング、さらにはウェブの閲覧まで行い、構築を支援する自律型エージェントを管理するための「ミッション コントロール」を提供します。

Antigravity は、エージェント ファーストのプラットフォームとして設計されています。これは、AI がコードを記述するツールではなく、人間の介入を最小限に抑えながら、複雑なエンジニアリング タスクの計画、実行、検証、反復処理を行うことができる自律的なアクターであることを前提としています。

学習内容

  • Antigravity のインストールと構成。
  • エージェント マネージャー、エディタ、ブラウザなど、Antigravity の主要なコンセプトについて説明します。
  • Antigravity のユースケースをいくつか見てみましょう。

必要なもの

現在、Antigravity は個人用の Gmail アカウントでプレビュー版としてご利用いただけます。最上位モデルを使用するための無料割り当てが付属しています。

Antigravity はシステムにローカルにインストールする必要があります。この製品は、Mac、Windows、特定の Linux ディストリビューションで利用できます。ご自身のパソコンに加えて、次のものが必要です。

  • Chrome ウェブブラウザ
  • Gmail アカウント(個人用 Gmail アカウント)。

この Codelab は、初心者を含むあらゆるレベルのユーザーとデベロッパーを対象としています。

問題を報告する

この Codelab で Antigravity を使用する際に、問題が発生する可能性があります。

Codelab 関連の問題(誤字脱字、誤った手順)については、この Codelab の左下にある Report a mistake ボタンを使用してバグを報告してください。

b06b582bcd847f6d.png

Antigravity に関連するバグや機能リクエストについては、Antigravity 内で問題を報告してください。これは、左下隅の Provide Feedback リンクを使用して、エージェント マネージャーで行うことができます。

281ac826fb44d427.png

プロフィール アイコンの下にある Report Issue リンクからエディタに移動することもできます。

e8afd782a8f92129.png

2. インストール

まず、Antigravity をインストールします。現在、このプロダクトはプレビュー版として提供されており、個人の Gmail アカウントを使用して開始できます。

ダウンロード ページに移動し、該当するオペレーティング システムのバージョンをクリックします。アプリケーション インストーラを起動し、マシンにインストールします。インストールが完了したら、Antigravity アプリケーションを起動します。次のような画面が表示されます。

29fada39721093c.png

Next をクリックして続行してください。主な手順は次のとおりです。

  • セットアップ フローを選択: 既存の VS Code または Cursor の設定からインポートするオプションが表示されます。最初からやり直します。
  • エディタのテーマタイプを選択する: ここではダークテーマを選択しますが、お好みで選択してください。
  • Antigravity エージェントをどのように使用しますか?

7ca55560ec377130.png

もう少し詳しく見ていきましょう。設定は、Antigravity のユーザー設定(Cmd + ,)でいつでも変更できます。

オプションの詳細に入る前に、いくつかの特定のプロパティ(ダイアログの右側に表示されます)を見てみましょう。

ターミナル実行ポリシー

これは、エージェントにターミナルでコマンド(アプリケーション/ツール)を実行する権限を付与することです。

  • 常に続行: ターミナル コマンドを常に自動実行します(構成可能な拒否リスト内のコマンドを除く)。
  • レビューをリクエスト: ターミナル コマンドを実行する前に、ユーザーのレビューと承認をリクエストします。

確認に関するポリシー

エージェントはタスクを実行する際に、さまざまなアーティファクト(タスクプラン、実装プランなど)を作成します。審査ポリシーは、審査が必要かどうかを判断するユーザーを決定できるように設定されています。常に確認するか、エージェントに判断を任せるか。そのため、ここでも 3 つのオプションがあります。

  • 常に続行: エージェントは審査をリクエストしません。
  • エージェントが決定: エージェントが審査をリクエストするタイミングを決定します。
  • Request Review(レビューをリクエスト): エージェントは常にレビューをリクエストします。

JavaScript 実行ポリシー

有効にすると、エージェントはブラウザツールを使用して URL を開き、ウェブページを読み取り、ブラウザ コンテンツを操作できます。このポリシーは、ブラウザでの JavaScript の実行方法を制御します。

  • 常に続行: エージェントは、ブラウザで JavaScript を実行する権限を求めるために停止しません。これにより、エージェントはブラウザで複雑なアクションと検証を実行するうえで最大限の自律性を得られますが、セキュリティ エクスプロイトに対する露出も最大になります。
  • レビューをリクエスト: エージェントは、ブラウザで JavaScript コードを実行する権限を求めるメッセージを常に表示します。
  • 無効: エージェントはブラウザで JavaScript コードを実行しません。

さまざまなポリシーについて理解したところで、左側の 4 つのオプションは、そのうち 3 つがターミナル実行、レビュー、JavaScript 実行ポリシーの特定の設定であり、4 つ目のオプションは完全にカスタム制御できるオプションです。これらの 4 つのオプションは、ターミナルでコマンドを実行し、タスクを進める前にアーティファクトのレビューを受けるために、エージェントにどの程度の自律性を与えるかを選択できるようにするために用意されています。

次の 4 つのオプションがあります。

  • セキュアモード: セキュアモードでは、エージェントのセキュリティ制御が強化され、外部リソースや機密性の高いオペレーションへのアクセスを制限できます。セキュアモードを有効にすると、環境を保護するためにいくつかのセキュリティ対策が適用されます。
  • レビュー主導の開発(推奨): エージェントは頻繁にレビューを求めます。
  • エージェント主導の開発: エージェントはレビューをリクエストしません。
  • カスタム構成

レビュー主導の開発オプションは、エージェントが決定を下してユーザーに承認を求めることができるため、バランスがよく、おすすめの方法です。

次は [エディタの設定] ページです。ここでは、次の設定を選択できます。

  • キー バインディング: キー バインディングを構成します。
  • 拡張機能: 人気の言語やその他の推奨拡張機能をインストールします。
  • コマンドライン: コマンドライン ツールをインストールして、agy で Antigravity を開きます。

これで、Google にログインする準備ができました。前述のとおり、個人用の Gmail アカウントをお持ちの場合は、プレビュー モードで Antigravity を無料でご利用いただけます。アカウントで今すぐログインしてください。ブラウザが開き、ログインできるようになります。認証に成功すると、次のようなメッセージが表示され、Antigravity アプリケーションに戻ります。流れに身を任せましょう。

最後に、利用規約。参加するかどうかを判断し、Next をクリックします。

この瞬間が真実の瞬間であり、Antigravity があなたとのコラボレーションを待っています。

3. エージェント マネージャー

準備が整いました。

Antigravity は、オープンソースの Visual Studio Code(VS Code)の基盤をフォークしますが、ユーザー エクスペリエンスを大幅に変更して、テキスト編集よりもエージェント管理を優先します。インターフェースは、EditorAgent Manager の 2 つの異なるメイン ウィンドウに分かれています。この関心の分離は、個人の貢献とエンジニアリング管理の区別を反映しています。

エージェント マネージャー: ミッション コントロール

Antigravity を起動すると、通常はファイル ツリーではなく、次のようなエージェント マネージャーが表示されます。

d5ae91fc746e1bba.png

このインターフェースは Mission Control ダッシュボードとして機能します。これは高レベルのオーケストレーション用に設計されており、デベロッパーはさまざまなワークスペースやタスクで非同期に動作する複数のエージェントを生成、モニタリング、操作できます。

このビューでは、デベロッパーはアーキテクトとして機能します。大まかな目標を定義します。たとえば、次のような目標が考えられます。

  • 認証モジュールをリファクタリングする
  • 依存関係ツリーを更新する
  • 課金 API のテストスイートを生成する

上の図に示すように、これらのリクエストごとに専用のエージェント インスタンスが生成されます。UI には、これらの並列ワーク ストリームの可視化が表示され、各エージェントのステータス、生成されたアーティファクト(プラン、結果、差分)、人間による承認の保留中のリクエストが表示されます。

このアーキテクチャは、以前の IDE の主な制限事項(線形かつ同期型のチャットボット エクスペリエンス)に対応しています。従来のチャット インターフェースでは、デベロッパーは AI がコードの生成を完了するまで待ってから、次の質問をする必要があります。Antigravity の Manager View では、デベロッパーは 5 つの異なるエージェントを同時に 5 つの異なるバグに割り当てて、スループットを効果的に増やすことができます。

上記の Next をクリックすると、ワークスペースを開くオプションが表示されます。

ec72712ea24bf6d5.png

VS Code で知っていたワークスペースと同じように考えれば、完了です。ボタンをクリックしてフォルダを選択すると、ローカル フォルダを開くことができます。私の場合は、ホーム フォルダに my-agy-projects という名前のフォルダがあったので、それを選択しました。まったく別のフォルダを使用することもできます。なお、この手順は完全にスキップすることもできます。ワークスペースは後からいつでも開くことができます。

この手順を完了すると、次の図に示すエージェント マネージャー ウィンドウが表示されます。

156224e223eeda36.png

選択したワークスペース フォルダ(my-agy-projects)で新しい会話をすぐに開始するように、アプリケーションが調整されます。他の AI アプリケーション(Cursor、Gemini CLI)の操作に関する既存の知識を活用して、@ などの方法でプロンプトにコンテキストを追加できます。

PlanningModel Selection の両方のプルダウンを確認してください。[モデルの選択] プルダウンでは、現時点で利用可能なモデルのいずれかを選択して、エージェントで使用できます。リストは次のとおりです。

fb0744dc43911365.png

同様に、エージェントはデフォルトの Planning モードになります。Fast モードも使用できます。

f403e40ad480efc9.png

ドキュメントには次のように記載されています。

  • Planning: エージェントはタスクを実行する前に計画を立てることができます。詳細な調査、複雑なタスク、共同作業に使用します。このモードでは、エージェントはタスクグループで作業を整理し、アーティファクトを生成し、最適な品質で作業を徹底的に調査、検討、計画するためのその他の手順を実行します。ここでは、より多くの出力が表示されます。
  • Fast: エージェントがタスクを直接実行します。変数名の変更、いくつかの bash コマンドの開始など、短時間で完了できる簡単なタスクに使用します。これは、速度が重要な要素であり、タスクが単純で品質の低下を心配する必要がない場合に役立ちます。

エージェントの思考予算などの用語に精通している場合は、エージェントの思考を制御する機能と考えるとよいでしょう。これにより、思考予算に直接影響します。現時点ではデフォルトの設定を使用しますが、リリース時には Gemini 3 Pro モデルの利用可能枠がすべてのお客様に割り当てられるため、Gemini 3 の無料枠を使い切った場合は、その旨を示すメッセージが表示されることをご了承ください。

ここで少し時間を取って、エージェント マネージャー(ウィンドウ)について見ていきましょう。基本的な構成要素、Antigravity でのナビゲーションなどについて理解を深めます。[Agent Manager] ウィンドウは次のようになります。

22f6dcf7b3edc583.png

上記の図の番号を参照してください。

  1. Inbox: すべての会話を 1 か所で追跡する方法と考えてください。エージェントがタスクを完了すると、受信トレイに表示されます。受信トレイをクリックすると、現在のすべての会話のリストが表示されます。会話をタップすると、やり取りされたすべてのメッセージ、タスクのステータス、エージェントが作成したコンテンツ、タスクに対するユーザー側の承認待ちかどうかなどを確認できます。これは、後で作業中の前のタスクに戻るのに最適な方法です。非常に便利な機能です。
  2. Start Conversation: これをクリックすると、新しい会話が開始されます。これにより、Ask anything と表示されている入力欄に直接移動します。
  3. Workspaces: ワークスペースについて説明しました。任意のワークスペースで作業できます。ワークスペースはいつでも追加でき、会話を開始する際に任意のワークスペースを選択できます。
  4. Playground: エージェントとの会話を簡単に開始し、その会話をワークスペースに変換して、ファイルなどをより厳密に管理できる優れた方法です。これはスクラッチ領域のようなものです。
  5. Editor View: ここまでは、エージェント マネージャー ビューにいます。必要に応じて、いつでもエディタビューに切り替えることができます。ワークスペース フォルダと生成されたファイルが表示されます。ファイルを直接編集したり、エディタでインライン ガイダンスやコマンドを指定したりすることもできます。これにより、エージェントは変更された推奨事項や手順に従って操作や変更を行うことができます。エディタビューについては、後のセクションで詳しく説明します。
  6. Browser: 最後に、Antigravity を非常に強力なものにしている明確な差別化要因の 1 つである、Chrome ブラウザとの緊密な統合について説明します。次のセクションでは、ブラウザの設定について説明します。

4. Antigravity ブラウザ

ドキュメントに記載されているように、エージェントがブラウザとやり取りする場合は、ブラウザ サブエージェントを呼び出して、当面のタスクを処理します。ブラウザ サブエージェントは、Antigravity 管理のブラウザ内で開いているページで動作するように特化したモデルを実行します。これは、メインエージェント用に選択したモデルとは異なります。

このサブエージェントは、クリック、スクロール、入力、コンソールログの読み取りなど、ブラウザの制御に必要なさまざまなツールにアクセスできます。また、DOM キャプチャ、スクリーンショット、マークダウン解析を通じて開いているページを読み取ったり、動画を撮影したりすることもできます。

つまり、Antigravity ブラウザ拡張機能を起動してインストールする必要があります。Playground で会話を開始して、手順を確認してみましょう。

Playground を選択し、次のタスク go to antigravity.google を以下に示すようにエージェントに付与します。

51a373d3da23db56.png

タスクを送信します。エージェントがタスクを分析している様子が表示され、思考プロセスを確認できます。しばらくすると、以下のようにブラウザ エージェントの設定が必要であるというメッセージが表示されます。Setup をクリックします。

e7119f40e093afd2.png

ブラウザが起動し、次のように拡張機能をインストールするメッセージが表示されます。

82fb87d7d75b4a6c.png

[続行] をクリックすると、インストール可能な Chrome 拡張機能に移動します。

f3468f0e5f3bb075.png

拡張機能を正常にインストールすると、Antigravity Agent が動作を開始し、タスクを実行するための権限を許可するよう求めるメッセージが表示されます。開いたブラウザ ウィンドウにアクティビティが表示されます。

7f0367e00ac36d5a.png

エージェント マネージャーのビューに戻ると、次のようになります。

b9d89e1ebefcfd76.png

これは、エージェントに antigravity.google ウェブサイトにアクセスするように指示したため、想定どおりの結果です。権限を付与すると、以下のようにウェブサイトに安全に移動したことがわかります。

77fcc38b5fb4ca7c.png

5. アーティファクト

Antigravity は、作業を計画して実行する際に、作業を伝達して人間ユーザーからフィードバックを得る手段としてアーティファクトを作成します。リッチ マークダウン ファイル、アーキテクチャ図、画像、ブラウザの録画、コードの差分などがあります。

アーティファクトは「信頼のギャップ」を解消します。エージェントが「バグを修正しました」と主張した場合、以前はデベロッパーがコードを読んで確認する必要がありました。Antigravity では、エージェントがそれを証明するアーティファクトを生成します。

Antigravity によって生成される主なアーティファクトは次のとおりです。

  • Task Lists: コードを記述する前に、エージェントが構造化されたプランを生成します。通常、このプランを編集する必要はありませんが、確認して、必要に応じてコメントを追加して変更できます。
  • Implementation Plan: コードベース内の変更を設計してタスクを完了するために使用されます。これらのプランには、必要な修正に関する技術的な詳細が含まれており、アーティファクトの審査ポリシーが [常に続行] に設定されていない限り、ユーザーによる審査を目的としています。
  • Walkthrough: エージェントがタスクの実装を完了すると、変更の概要とテスト方法がまとめられたものが作成されます。
  • Code diffs: 厳密にはアーティファクトではありませんが、Antigravity はレビューとコメントが可能なコード差分も生成します。
  • Screenshots: エージェントは、変更前後の UI の状態をキャプチャします。
  • Browser Recordings: 動的なインタラクション(例: 「ログイン ボタンをクリックし、スピナーが表示されるのを待って、ダッシュボードが読み込まれることを確認する」)の場合、エージェントはセッションの動画を録画します。デベロッパーは、この動画を見ることで、アプリを自分で実行しなくても機能要件が満たされていることを確認できます。

アーティファクトが生成され、エージェント マネージャー ビューとエディタ ビューの両方に表示されます。

エディタビューの右下にある Artifacts をクリックすると、次の操作ができます。

5deff47fe0a93aa1.png

エージェント マネージャー ビューの右上にある Review changes の横に、アーティファクトを切り替えるボタンが表示されます。切り替えがオンになっている場合は、生成されたアーティファクトのリストが表示されます。

5320f447471c43eb.png

次のように、[アーティファクト] ビューが表示されます。この例では、エージェントに antigravity.google ページにアクセスするよう指示したため、スクリーンショットがキャプチャされ、同じ内容の動画が作成されています。

19d9738bb3c7c0c9.png

コードの差分は、エディタ ビューの Review Changes で確認できます。

e1d8fd6e7df4daf3.png

デベロッパーは、「Google ドキュメント スタイルのコメント」を使用して、これらのアーティファクトとコードの差分を操作できます。特定のアクションやタスクを選択し、希望するコマンドを入力して、エージェントに送信します。エージェントは、このフィードバックを取り込んで、それに応じて反復処理を行います。インタラクティブな Google ドキュメントの使用を検討してください。この場合、著者にフィードバックを提供すると、著者がそのフィードバックに基づいて修正します。

6. 受信トレイを再確認する

エージェントとの会話をいくつか開始したら、Agent Manager ウィンドウで Inbox を確認します。すべての会話が表示されます。いずれかの会話をクリックすると、その会話の履歴や生成されたアーティファクトなどを確認できます。この例では、最初の会話を実行した後、受信トレイに会話が一覧表示されます。

1a2a1bbdd4464ecf.png

その会話をクリックすると、詳細が表示されます。

b7e493765cfb1b1a.png

ここから会話を続けることもできます。

7. 編集者

エディタは VS Code の使いやすさを維持しているため、経験豊富なデベロッパーの筋肉記憶を尊重できます。標準のファイル エクスプローラ、構文ハイライト表示、拡張機能エコシステムが含まれています。

エージェント マネージャーの右上にある Open Editor ボタンをクリックすると、エディタに移動できます。

セットアップと拡張機能

一般的な設定では、エディタ、ターミナル、エージェントが表示されます。

7996408528de93e1.png

そうでない場合は、次のようにターミナル パネルとエージェント パネルを切り替えることができます。

  • ターミナル パネルを切り替えるには、Ctrl + ` ショートカットを使用します。
  • エージェント パネルを切り替えるには、Cmd + L ショートカットを使用します。

また、Antigravity はセットアップ時に一部の拡張機能をインストールできますが、使用しているプログラミング言語によっては、さらに多くの拡張機能をインストールする必要があるでしょう。たとえば、Python 開発の場合、次のような拡張機能をインストールできます。

bd33a79837b5a12a.png

編集者

予測入力

エディタでコードを入力すると、スマートなオートコンプリートが起動し、タブキーを押すだけで入力できます。

e90825ed7a009350.png

インポートするタブ

不足している依存関係を追加するためのインポートするタブの候補が表示されます。

bcab60794caa0aec.png

Tab キーでジャンプ

タブでジャンプの候補が表示され、コード内の次の論理的な場所にカーソルを移動できます。

8610ae5217be7fe5.png

コマンド

エディタまたはターミナルで Cmd + I を使用してコマンドをトリガーし、自然言語を使用してインライン補完を行うことができます。

エディタで、フィボナッチ数を計算するメソッドをリクエストし、承認または拒否できます。

13a615e515cea100.png

ターミナルで、ターミナル コマンドの候補を取得できます。

5a75e560f998cedc.png

エージェント サイドパネル

エディタでは、複数の方法でエージェント サイドパネルを切り替えることができます。

マニュアルを開く

右側にあるエージェント パネルは、Cmd + L ショートカットで手動で切り替えることができます。

質問を開始したり、@ を使用してファイル、ディレクトリ、MCP サーバーなどのコンテキストを追加したり、/ を使用してワークフロー(保存されたプロンプト)を参照したりできます。

95c5a6d31d771748.png

会話モードは Fast または Planning の 2 つから選択できます。

d3d1449f12510e3e.png

Fast は簡単なタスクにおすすめです。Planning は、エージェントが作成したプランを承認できる複雑なタスクにおすすめです。

会話に別のモデルを選択することもできます。

af709bcc03c1e21e.png

説明と修正

エージェントをトリガーするもう 1 つの方法は、問題にカーソルを合わせて Explain and fix を選択することです。

e45cbe02ed76b9c1.png

問題をエージェントに送信する

Problems セクションに移動して Send all to Agent を選択し、エージェントに問題の解決を試みさせることもできます。

e4992d14708005d0.png

ターミナル出力をエージェントに送信する

ターミナル出力の一部を選択して、Cmd + L でエージェントに送信することもできます。

c40293bab474c9b1.png

エディタとエージェント マネージャーの切り替え

エディタ モードでは右上の Open Agent Manager ボタンをクリックすると、いつでもエディタ モードとエージェント マネージャーのフルモードを切り替えることができます。エージェント マネージャー モードでは右上の Open Editor ボタンをクリックすると、エディタ モードに戻ります。

また、Cmd + E キーボード ショートカットを使用して 2 つのモードを切り替えることもできます。

8. フィードバックを送信する

Antigravity の中核となるのは、エクスペリエンスのあらゆる段階でフィードバックを簡単に収集できる機能です。エージェントがタスクを処理する際に、さまざまなアーティファクトが作成されます。

  • 実装計画とタスクリスト(コーディング前)
  • コードの差分(コードの生成時)
  • 結果を確認する手順(コーディング後)

これらのアーティファクトは、Antigravity が計画と進捗状況を伝えるための手段です。また、Google ドキュメントのコメント形式でエージェントにフィードバックを提供することもできます。これは、エージェントを効果的に誘導するうえで非常に役立ちます。

簡単な ToDo リスト アプリケーションを作成しながら、Antigravity にフィードバックを送信する方法を見てみましょう。

プランニング モード

まず、Antigravity が Planning モード(Fast モードではない)になっていることを確認します。これは、エージェントのサイドパネル チャットで選択できます。これにより、Antigravity はコードに飛び込む前に実装計画とタスクリストを作成します。次に、Create a todo list web app using Python のようなプロンプトを試します。これにより、エージェントが計画を開始し、実装計画を作成します。

導入計画

実装計画は、Antigravity が何を行う予定か、どの技術スタックを使用するか、提案された変更の概要を説明したものです。

Implementation Plan - Python Todo App
Goal
Create a simple, functional, and aesthetically pleasing Todo List web application using Python (Flask).

Tech Stack
Backend: Python with Flask
Frontend: HTML5, CSS3 (Vanilla), Jinja2 templates
...

また、フィードバックを送信できる最初の場所でもあります。このケースでは、エージェントは Python ウェブ フレームワークとして Flask を使用したいと考えています。実装計画にコメントを追加して、代わりに FastAPI を使用できます。コメントを追加したら、コメントを送信するか、Antigravity に更新された実装計画を Proceed するよう依頼します。

タスクリスト

実装プランが更新されると、Antigravity によってタスクリストが作成されます。これは、Antigravity がアプリの作成と確認を行うための具体的な手順のリストです。

Task Plan
 Create requirements.txt
 Create directory structure (static/css, templates)
 Create static/css/style.css
 Create templates/index.html
 Create main.py with FastAPI setup and Database logic
 Verify application

フィードバックを送信できる場所は、他にもあります。

たとえば、このユースケースでは、次のコメントを追加して、より詳細な検証手順を追加できます。Verify application by adding, editing, and deleting a todo item and taking a screenshot.

コード変更

この時点で、Antigravity は新しいファイルにコードを生成します。エージェント チャットのサイドパネルで、詳細を確認せずにこれらの変更を Accept all または Reject all できます。

Review changes をクリックして変更の詳細を確認し、コードに関する詳細なコメントを追加することもできます。たとえば、main.py に次のコメントを追加できます。Add basic comments to all methods

これは、Antigravity を使用してコードを反復処理する優れた方法です。

チュートリアル

Antigravity はコーディングが完了すると、サーバーを起動し、ブラウザを開いてアプリを検証します。タスクの追加や更新などの手動テストも行います。これらはすべて Antigravity ブラウザ拡張機能のおかげです。最後に、アプリの検証内容をまとめたウォークスルー ファイルが作成されます。これには、スクリーンショットや、ブラウザの録画を含む検証フローが含まれます。

ウォークスルーでは、スクリーンショットやブラウザの録画にコメントすることもできます。たとえば、コメント Change the blue theme to orange theme を追加して送信します。コメントが送信されると、Antigravity が変更を行い、結果を確認して、ウォークスルーを更新します。

変更を元に戻す

最後に、各ステップの後に変更に満足できない場合は、チャットから変更を元に戻すことができます。チャットで ↩️ Undo changes up to this point を選択するだけです。

9. ルールとワークフロー

Antigravity には、ルールワークフローの 2 つのカスタマイズ オプションがあります。

右上にある ... をクリックして Customizations を選択すると、RulesWorkflows が表示されます。

ff8babd8d8bcfa83.png

ルールは、エージェントの動作をガイドするのに役立ちます。これらは、エージェントがコードとテストを生成する際に従うように指定できるガイドラインです。たとえば、エージェントに特定のコードスタイルに従うように指示したり、常にメソッドを文書化するように指示したりできます。これらをルールとして追加すると、エージェントが考慮します。

ワークフローは、エージェントとのやり取り中に / でオンデマンドでトリガーできる保存済みのプロンプトです。エージェントの動作をガイドしますが、ユーザーのオンデマンドでトリガーされます。

ルールはシステムの手順に近く、ワークフローはオンデマンドで選択できる保存済みプロンプトに近いと考えるとわかりやすいでしょう。

ルールワークフローは、グローバルまたはワークスペースごとに適用でき、次の場所に保存できます。

  • グローバル ルール: ~/.gemini/GEMINI.md
  • グローバル ワークフロー: ~/.gemini/antigravity/global_workflows/global-workflow.md
  • ワークスペース ルール: your-workspace/.agent/rules/
  • ワークスペース ワークフロー: your-workspace/.agent/workflows/

ワークスペースにルールとワークフローを追加しましょう。

ルールを追加

まず、コード スタイル ルールを追加しましょう。Rules に移動し、+Workspace ボタンを選択します。次のコード スタイル ルールを使用して、code-style-guide などの名前を付けます。

* Make sure all the code is styled with PEP 8 style guide
* Make sure all the code is properly commented

次に、コードがモジュール方式で生成されるように別のルールを追加します。code-generation-guide ルールの例を次に示します。

* The main method in main.py is the entry point to showcase functionality.
* Do not generate code in the main method. Instead generate distinct functionality in a new file (eg. feature_x.py)
* Then, generate example code to show the new functionality in a new method in main.py (eg. example_feature_x) and simply call that method from the main method.

2 つのルールが保存され、準備が整いました。

bfd179dfef6b2355.png

ワークフローを追加する

単体テストを生成するワークフローも定義しましょう。これにより、コードに満足したら単体テストをトリガーできます(エージェントが常に単体テストを生成するのではなく)。

Workflows に移動し、+Workspace ボタンを選択します。次のように名前を付けます(例: generate-unit-tests)。

* Generate unit tests for each file and each method
* Make sure the unit tests are named similar to files but with test_ prefix

ワークフローも実行できるようになりました。

d22059258592f0e1.png

試してみる

では、ルールとワークフローの動作を見てみましょう。ワークスペースにスケルトン main.py ファイルを作成します。

def main():
    pass

if __name__ == "__main__":
    main()

エージェントのチャット ウィンドウに移動し、エージェントに「Implement binary search and bubble sort.」と質問します。

1 ~ 2 分後に、ワークスペースに main.pybubble_sort.pybinary_search.py の 3 つのファイルが作成されます。また、すべてのルールが実装されていることもわかります。メインファイルは整理されており、サンプルコードが含まれています。各機能は独自のファイルに実装されています。すべてのコードがドキュメント化され、適切なスタイルで記述されています。

from binary_search import binary_search, binary_search_recursive
from bubble_sort import bubble_sort, bubble_sort_descending


def example_binary_search():
    """
    Demonstrate binary search algorithm with various test cases.
    """
    ...

def example_bubble_sort():
    """
    Demonstrate bubble sort algorithm with various test cases.
    """
    ...

def main():
    """
    Main entry point to showcase functionality.
    """
    example_binary_search()
    example_bubble_sort()
    print("\n" + "=" * 60)


if __name__ == "__main__":
    main()

コードに問題がないことを確認できたので、単体テストの生成ワークフローをトリガーできるかどうかを確認しましょう。

チャットに移動して /generate と入力すると、Antigravity はワークフローを認識しています。

8a3efd9e3be7eb6f.png

generate-unit-tests を選択して Enter キーを押します。数秒後に、ワークスペースに新しいファイル(test_binary_search.pytest_bubble_sort.py)が作成されます。これらのファイルには、すでに実装されているテストがいくつか含まれています。

11febd7940ef8199.png

すばらしいですね!

10. エージェントの保護

AI エージェントにターミナルとブラウザへのアクセス権を付与することは、両刃の剣です。自律的なデバッグとデプロイが可能になりますが、プロンプト インジェクションとデータ漏洩のベクトルも開きます。

Antigravity は、ターミナル コマンドの自動実行ポリシー、許可リスト、拒否リストを中心としたきめ細かい権限システムを通じて、この問題に対処します。

Antigravity を初めて構成するとき、または設定メニューから、Terminal Command Auto Execution ポリシーを選択する必要があります。この設定は、シェル コマンドに関するエージェントの自律性を決定します。

現在の設定を確認するには、Antigravity — Settings に移動し、Advanced Settings を選択します。エージェントの設定の Terminal セクションが表示されます。この設定を別の設定に変更する場合は、次の表を参考にしてください。

ポリシー モード

説明

オフ

エージェントは、明示的に許可されていない限り、ターミナル コマンドを自動的に実行することはありません。

自動

エージェントは、内部の安全性モデルに基づいて実行するかどうかを決定します。リスクの高いコマンドの権限を求めます。

ターボ

エージェントは、明示的に拒否されない限り、常にコマンドを自動的に実行します。

許可リストの構成

許可リストは、主に [オフ] ポリシーで使用されます。これはポジティブ セキュリティ モデルを表します。つまり、明示的に許可されていない限り、すべてが禁止されます。これが最も安全な構成です。

ステップバイステップの構成

  1. [ターミナル コマンドの自動実行] 設定を [オフ] に設定します。
  2. [ターミナル コマンドの許可リスト] で、横にある [追加] ボタンをクリックして、次のコマンドを追加します。ls -al必要に応じて、他のターミナル コマンドを追加することもできます。

許可リストをテストする

  • エージェントに List the files in this directory を尋ねます。
  • エージェントは ls を自動的に実行します。
  • エージェントに次の質問をします。Delete the <some file>
  • エージェントは rm <filepath> を試みますが、rm が許可リストにないため、Antigravity がブロックしてユーザー レビューを強制します。Antigravity は、コマンドを実行する前に権限を求める必要があります。

拒否リストの構成

拒否リストは、ターボ(および場合によっては自動)ポリシーの保護機能です。これは否定的なセキュリティ モデルを表します。つまり、明示的に禁止されていない限り、すべてが許可されます。これは、開発者が考えられるすべての危険を予測することに依存しており、リスクの高い提案ですが、最大限のスピードを実現できます。

ステップバイステップの構成

  1. [ターミナル コマンドの自動実行] 設定を [ターボ] に設定します。
  2. [Deny List Terminal Commands] に次のコマンドを追加します。追加するには、横にある [Add] ボタンをクリックします。
  3. rm
  4. rmdir
  5. sudo
  6. curl
  7. wget

拒否リストのテスト

  • エージェントに Check the version of python を尋ねます。
  • エージェントは python --version を自動的に実行します。
  • エージェントに次の質問をします。Download www.google.com home page
  • エージェントは curl を試みます。Antigravity は、拒否リスト内の curl を検出し、実行をブロックして、手動承認を求めます。

ブラウザのセキュリティ

Antigravity のウェブ閲覧機能はスーパーパワーですが、脆弱性でもあります。侵害されたドキュメント サイトにアクセスしたエージェントが、プロンプト インジェクション攻撃を受ける可能性があります。

これを防ぐには、ブラウザ エージェントにブラウザ URL 許可リストを実装します。

現在の設定を確認するには、Antigravity — SettingsAdvanced Settings の順に移動します。以下のように、ブラウザ設定の [ブラウザ URL 許可リスト] セクションが表示されます。

5ed231150122ecc5.png

[Open Allowlist File] をクリックすると、フォルダ HOME/.gemini/antigravity/browserAllowlist.txt. でファイルが開きます。ここで、信頼できるドメインのみが入力されていることを確認できます。

11. ユースケース

プロダクトの基本を理解したところで、実際のユースケースをいくつか見ていきましょう。Antigravity はエージェント ファーストのプラットフォームです。つまり、ほとんどの場合、エージェントに指示を出すだけで、エージェントは単独でタスクを実行し、必要に応じて権限を要求し、アーティファクトを生成し、タスクが完了したら通知します。そのため、次の各ユースケースでエージェントの会話のすべての出力を生成することはできません。手順と、想定される結果のスクリーンショットをいくつか共有しますが、結果は多少異なる可能性があります。

ここでは、外部サイトを使用したいくつかのタスクの自動化から、プロジェクトの単体テストケースの生成と検証、完全なウェブサイトの開発まで、さまざまなユースケースについて説明します。始める

ニュース ハイライト

これはシンプルなユースケースですが、ウェブブラウザを使用してウェブサイトにアクセスし、情報を抽出し、アクションを実行して、ユーザーにデータを返すための基盤となります。

ここでは、Google ニュースのサイトにアクセスして、そこから情報を抽出します。ただし、任意のサイトで簡単にテストして、結果を確認できます。

次の図に示すように、Agent Manager に移動し、Playground を選択していることを確認します。

cffa12c98a68cb6c.png

次に、次の指示を出します。

8513d489eea0b014.png

これにより、エージェント プロセスが開始され、ブラウザの起動が必要であると判断されます。思考プロセスをよく見て、エージェントがどのように作業を進めているかを確認してください。問題がなければ、Antigravity ブラウザが起動し、以下のようにサイトにアクセスします。サイトの周りの青い枠線は、エージェントがブラウザを制御し、サイトを移動して情報を取得していることを示しています。

9d594588f2ffe6bc.png

作業が完了すると、次のようにアーティファクトが生成されます。

dc6cf4e7d8425df8.png

エージェントによる実行の例を以下に示します。

fb7397cd2cce0682.png

左側に [思考プロセス] が表示されています。ポイントをスクロールして、再生やその他のデータを表示することもできます。

試してみたいこと

  • このことを理解したら、利用可能なウェブサイトを選択し、エージェントにアクセスしてデータを取得または要約してもらいます。ダッシュボードとグラフがあることがわかっているウェブサイトをいくつか指定して、いくつかの値を選択するように依頼します。
  • 次のプロンプトを試してみましょう。Visit https://docs.cloud.google.com/release-notes and get me a summary of the release notes, categorized by product.

Python + Flask で動的ウェブサイトを生成する

次に、完全なウェブ アプリケーションを生成します。作成するウェブ アプリケーションは、複数の講演者が 1 日を通して講演する 1 日の技術イベントに関する情報を提供するサイトです。

もう一度、Agent Manager に移動し、Playground を選択していることを確認します。

次のプロンプトを入力します。

I would like to generate a website that is a 1-day technical conference informational site.

The website should have the following functionality:
        1. A home page that shows the current date, location, schedule and time table.
        2. The 1-day event is a list of 8 talks in total.
        3. Each talk has 1 or 2 max. speakers. 
        4. A talk has an ID, Title, Speakers, Category (1 or 2), Description and time of the talk.
        5. Each speaker has a First Name, Last Name and LinkedIn url.
        6. Allow for users to search by category, speaker, title.
        7. Give a lunch break of 60 minutes.
        8. Use dummy data for events and speakers, come up with a schedule, the event is about Google Cloud Technologies.
        9. Tech Stack: Python and Flask framework on server side. Front-end is basic HTML, CSS and JavaScript. 
        10. Test out the site on your own for all functionality and provide a detailed README on how to setup, run and make any further changes. 
11. Launch the web application for me to review. 

上記のプロンプトを入力して会話を開始します。

エージェントはタスクを実行する際に、次のようにアーティファクトの作成を進めます。

  • タスク アーティファクト
  • 実装アーティファクト
  • チュートリアル アーティファクト

以下のタスク アーティファクトは、エージェントが与えられたタスクに基づいて実行すべきと解釈したタスクの最初のシーケンスです。実行のスクリーンショットの例を以下に示します。

c95d82e1c040698f.png

[実装計画] アーティファクトをクリックします。以下に、スクリーンショットの例を示します。

632169a236bc62cc.png

最後に、ウォークスルー アーティファクトがあります。以下に示すように、エージェントが行ったすべての処理が含まれています。

e3f6152d6f54d4f9.png

サーバーが起動し、URL が提供されたことがわかります。この URL をクリックすると、アプリケーションが表示されます。以下のスクリーンショットに例を示します。

abf879f2ce53d055.png

エディタに切り替えると、Python Flask アプリケーションが生成されるフォルダが含まれていることが画面に表示されます。また、右側に Agent mode がタグ付けされているため、そこから会話を続けることもできます。

b0fea8aa65c3a1c5.png

ここで、イベントにさらにいくつかの講演を追加したいとします。エディタとエージェント パネルで、Add two more talks to the schedule などの指示を出すことができます。

これにより、エージェントが要件を分析し、タスクと実装計画を更新してから、更新された機能も検証します。会話の例を以下に示します。

ba8455e6f68973e9.png

必要に応じて、エージェント マネージャーに戻すことができます。このプロセスは、エージェント マネージャーから編集者に移行し、それに応じて変更を行うプロセスを理解するのに役立ちます。

試してみたいこと

  • アプリケーションに追加したい機能を追加します。エージェントに詳細を伝えます。エージェントは、まずタスクリスト、次に実装プランなどを変更して、タスクを進めます。
  • エージェントに、アプリの README やその他のドキュメントを生成するよう依頼します。

シンプルな生産性向上アプリを生成する

ここでは、簡単なポモドーロ タイマー ウェブ アプリケーションを生成します。

Agent Manager に移動し、Playground を選択していることを確認します。次のプロンプトを入力します。

Create a productivity app that features a Pomodoro timer. Give a calm and aesthetic look to the application.

タスクリストと実装計画を作成し、それらを実行する方法に注目してください。フローに注意してください。レビューを求めるメッセージが表示される場合があります。以下に実行例を示します。

5be0a668e5a67d85.png

この場合、Antigravity ブラウザも起動し、独自のテストを実行して、テストが成功したことを確認する必要があります。生成されたものの 1 つに、検証の動画を含むメディア アーティファクトがあります。これは、テスト内容を確認するのに最適な方法です。また、スタイル変更が反映されていなかったため、スタイル変更を提案したところ、反映されました。

完成したアプリは次のようになり、見栄えもかなり良くなりました。

c9ab6bca97a51a8c.png

アプリケーションに素敵なタイマー画像を追加してみましょう。必要な手順は次のとおりです。

Add an image to the application that displays a timer.

これにより、エージェントは Task アーティファクトに新しいタスクを追加しました。

498dd946d4e9ae55.png

タスクの実行中に画像が生成されました。

c291da9bdb37ff96.png

最終的に、アプリにはリクエストした画像が表示されました。

de8f418ba8e4600d.png

試してみたいこと

  • アプリケーションの砂時計アイコンの背景が透明になっていないことに注目してください。エージェントに透明化するよう指示してみてください。
  • 生成するアプリケーションのバリエーションをいくつか試してみます。スタイルや画像を試したり、変更をリクエストしたりします。

単体テスト、モックスタブの生成、テストの検証

ここで試す最後のユースケースは、特定のコードファイルに対して単体テストを生成し、エージェントがテストを実行して検証するというものです。

このため、次のように 1 つの Python ファイルを含むワークスペースを作成します。

from typing import Dict

# --- Custom Exceptions ---
class InventoryShortageError(Exception):
    """Raised when there is not enough item stock."""
    pass

class PaymentFailedError(Exception):
    """Raised when the payment gateway rejects the transaction."""
    pass

class InvalidOrderError(Exception):
    """Raised when the order violates business rules."""
    pass

# --- External Service Interfaces (To be Mocked) ---
class InventoryService:
    def get_stock(self, product_id: str) -> int:
        """Connects to DB to check stock."""
        raise NotImplementedError("Real connection required")

    def decrement_stock(self, product_id: str, quantity: int):
        """Connects to DB to reduce stock."""
        raise NotImplementedError("Real connection required")

class PaymentGateway:
    def charge(self, amount: float, currency: str) -> bool:
        """Connects to Stripe/PayPal."""
        raise NotImplementedError("Real connection required")

# --- Main Business Logic ---
class Order:
    def __init__(self, 
                 inventory_service: InventoryService, 
                 payment_gateway: PaymentGateway,
                 customer_email: str,
                 is_vip: bool = False):
        
        self.inventory = inventory_service
        self.payment = payment_gateway
        self.customer_email = customer_email
        self.is_vip = is_vip
        self.items: Dict[str, Dict] = {} # {product_id: {'price': float, 'qty': int}}
        self.is_paid = False
        self.status = "DRAFT"

    def add_item(self, product_id: str, price: float, quantity: int = 1):
        """Adds items to the cart. Rejects invalid prices or quantities."""
        if price < 0:
            raise ValueError("Price cannot be negative")
        if quantity <= 0:
            raise ValueError("Quantity must be greater than zero")

        if product_id in self.items:
            self.items[product_id]['qty'] += quantity
        else:
            self.items[product_id] = {'price': price, 'qty': quantity}

    def remove_item(self, product_id: str):
        """Removes an item entirely from the cart."""
        if product_id in self.items:
            del self.items[product_id]

    @property
    def total_price(self) -> float:
        """Calculates raw total before discounts."""
        return sum(item['price'] * item['qty'] for item in self.items.values())

    def apply_discount(self) -> float:
        """
        Applies business logic:
        1. VIPs get flat 20% off.
        2. Regulars get 10% off if total > 100.
        3. No discount otherwise.
        """
        total = self.total_price
        
        if self.is_vip:
            return round(total * 0.8, 2)
        elif total > 100:
            return round(total * 0.9, 2)
        
        return round(total, 2)

    def checkout(self):
        """
        Orchestrates the checkout process:
        1. Validates cart is not empty.
        2. Checks stock for all items.
        3. Calculates final price.
        4. Charges payment.
        5. Updates inventory.
        """
        if not self.items:
            raise InvalidOrderError("Cannot checkout an empty cart")

        # 1. Check Inventory Logic
        for product_id, data in self.items.items():
            available_stock = self.inventory.get_stock(product_id)
            if available_stock < data['qty']:
                raise InventoryShortageError(f"Not enough stock for {product_id}")

        # 2. Calculate Final Price
        final_amount = self.apply_discount()

        # 3. Process Payment
        try:
            success = self.payment.charge(final_amount, "USD")
            if not success:
                raise PaymentFailedError("Transaction declined by gateway")
        except Exception as e:
            # Catching generic network errors from the gateway
            raise PaymentFailedError(f"Payment gateway error: {str(e)}")

        # 4. Decrement Stock (Only occurs if payment succeeded)
        for product_id, data in self.items.items():
            self.inventory.decrement_stock(product_id, data['qty'])

        self.is_paid = True
        self.status = "COMPLETED"
        
        return {"status": "success", "charged_amount": final_amount}

上記の Python ファイルがローカルのフォルダに保存されており、Antigravity でワークスペースとして読み込まれていることを確認します。

これは、checkout 関数に次の主な機能があるシンプルな Order サービスです。

  1. カートが空でないことを検証します。
  2. すべての商品の在庫を確認します。
  3. 最終価格を計算します。
  4. お支払いの請求。
  5. 在庫を更新します。

エージェントに単体テストケースの生成、モック実装の提供、テストの実行を割り当てて、テストが成功することを確認します。

特定のワークスペース フォルダを開くと、@ 記号を使用してファイルを参照できるようになっていることがわかります。たとえば、次のような処理を行います。

8368856e51a7561a.png

このファイルの説明が表示されます。

b69c217d3372d802.png

プロンプトを使用して、より優れた可視化を生成するように指示できます。

Can you visually show this class for better understanding

da5bd701323818d4.png

次のステップは、単体テストを生成し、エージェントにテストを依頼することです。次のプロンプトを入力します。

generate unit tests for this module and test it out with mock implementations.

次のタスク アーティファクトが生成され、タスクが実行されました。

21425379db336dc6.png

実行されたテストの詳細も確認できます。

48f3320cd76b5cd8.png

生成されたファイルの 1 つはテストファイルでもありました。以下にそのスクリーンショットを示します。

f962061f115c040f.png

試してみたいこと

独自のコードを使用して、機能の追加からコードの一部のリファクタリングまで、エージェントにどのようなことを依頼できるかを確認します。

12. 完了

これで、エージェント ファーストの開発プラットフォームである Antigravity のインストールと使用方法の理解が完了しました。試したさまざまなユースケースは、独自の要件を把握し、Antigravity がどのように連携して要件を満たすことができるかを検討するうえで役立ちます。

リファレンス ドキュメント