Google Antigravity のスタートガイド

1. はじめに

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

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

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

学習内容

  1. Antigravity のインストールと構成
  2. エージェント マネージャー、エディタ、ブラウザなど、Antigravity の主要なコンセプトについて説明します。
  3. Antigravity のユースケース

必要なもの

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

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

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

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

2. インストール

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

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

29fada39721093c.png

[次へ] をクリックして、手順を進めてください。主な手順は次のとおりです。

  • Choose setup flow: これにより、既存の VS Code または Cursor の設定からインポートするオプションが表示されます。最初からやり直します。
  • Choose an Editor theme type. ダークモードを使用しますが、お好みで変更できます。
  • How do you want to use Antigravity agent:

cf89c9d16394914c.png

この点をもう少し詳しく見ていきましょう。この設定は固定されたものではなく、エージェントとのやり取り中も含め、いつでも変更できることを覚えておいてください。

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

ターミナル実行ポリシー

これは、エージェントにターミナルでコマンド(アプリケーション/ツール)を実行する機能を与えることです。こちらには 3 つのオプションがあります。

  • Off: ターミナル コマンドを自動実行しない(構成可能な許可リストにあるコマンドを除く)
  • Auto: エージェントは、指定されたターミナル コマンドを自動実行するかどうかを決定します。権限の取得が必要な場合は、判断してユーザーに権限を求めます。
  • Turbo: 常にターミナル コマンドを自動実行する(構成可能な拒否リストにあるコマンドを除く)

レビュー ポリシー

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

  • Always Proceed: エージェントがレビューをリクエストしない
  • Agent Decides: エージェントがレビューを求めるタイミングを決定します
  • Request Review: エージェントが常にレビューを求める

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

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

  • エージェント主導型の開発
  • エージェント支援開発
  • レビュー駆動開発
  • カスタム構成

エージェント支援開発オプションは、エージェントが意思決定を行い、ユーザーに承認を求めることができるため、バランスがよく、推奨されるオプションです。

選択肢を選びましょう。理想的には、現時点では推奨されるアプローチを選択します。

  • Configure your Editor: 設定を選択します。
  • Sign in to Google: 前述のとおり、個人用 Gmail アカウントをお持ちの場合は、プレビュー モードで Antigravity を無料でご利用いただけます。アカウントでログインしてください。このために新しい Chrome プロファイルが作成されるようにしてください。ブラウザが開き、ログインできるようになります。認証に成功すると、次のようなメッセージが表示され、Antigravity アプリケーションに戻ります。流れに身を任せましょう。
  • Terms of Use: 参加するかどうかを決定し、[次へ] をクリックします。

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

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

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

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

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

d5ae91fc746e1bba.png

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

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

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

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

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

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

ec72712ea24bf6d5.png

VS Code で知っていた Workspace と同じように考えれば、完了です。ボタンをクリックしてフォルダを選択すると、ローカル フォルダを開くことができます。私の場合は、ホーム フォルダに 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

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

e7119f40e093afd2.png

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

9a5a43c17980e46c.png

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

f3468f0e5f3bb075.png

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

7f0367e00ac36d5a.png

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

b9d89e1ebefcfd76.png

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

77fcc38b5fb4ca7c.png

アーティファクトの検査

ここからが面白いところです。エージェントが作業を完了すると、作業全体を確認できるようになります。これにより、成果物が導入されます。これは、計画した作業、これまでに実施した作業、その検証方法という点で信頼を構築するための基盤となります。

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

Antigravity は、タスクに応じて重要なアーティファクトの生成に重点を置いています。タスクプランから実装プラン、最終的にはウォークスルー プラン(検証を含む)まで、さまざまなプランがあります。これらのプランには、次のような内容を含めることを検討してください。

  • Task Lists & Plans: コードを記述する前に、エージェントが構造化されたプランを生成します。ユーザーは、このプランを確認、編集、承認できます。
  • Code Diffs: 変更される行を正確に示す標準化された差分ビュー。
  • Screenshots: エージェントは、変更前後の UI の状態をキャプチャします。
  • Browser Recordings: 動的なインタラクション(例: 「ログイン ボタンをクリックし、スピナーが表示されるのを待って、ダッシュボードが読み込まれることを確認する」)場合、エージェントはセッションの動画を録画します。デベロッパーは、この動画を見ることで、アプリを自分で実行しなくても機能要件が満たされていることを確認できます。
  • Test Results: エージェントによって生成および実行されたテストの合格/不合格の構造化ログ。

右上の [Review changes in Agent Manager view] の横に、アーティファクトを切り替えるボタンが表示されます。アーティファクトがオンになっている場合は、生成されたアーティファクトのリストが表示されます。

5320f447471c43eb.png

次のように、[アーティファクト] ビューが表示されます。この例では、エージェントに antigravity.google ページにアクセスするよう指示したため、スクリーンショットの撮影や動画の作成などが行われています。

19d9738bb3c7c0c9.png

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

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

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

1a2a1bbdd4464ecf.png

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

b7e493765cfb1b1a.png

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

6. エディタ

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

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

91f3c96b81d993b9.png

エディタに「エージェント認識」が追加されました。

  • Inline Command: エディタはバイブ コーディングとインライン指示をサポートしています。ユーザーはコードをハイライト表示して、エージェントに "Make this more efficient" または "Add comments explaining this logic" を指示できます。
  • Agent Side Panel : エディタの右側のパネルを使用して、エージェントを直接操作します。ここから新しい会話を開始したり、コードを変更する手順を指定したりできます。

エージェントが複数のコードファイルを作成するウェブ開発に関連するユースケースを見てみましょう。エディタでファイルを確認し、変更を加え、ここからエージェントと直接やり取りできます。

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

Antigravity では、エディタとエージェント マネージャーが別々のウィンドウであり、両方が明確に必要とされているという点で、独自の意見を持っています。エディタの右上にある [エージェント マネージャーを開く] ボタンをクリックするか、エージェント マネージャーの右上にある [エディタを開く] ボタンをクリックして、エディタとエージェント マネージャーを切り替えることができます。

また、2 つのモードを切り替えるためのキーボード ショートカット(Cmd + E)もあります。

8. ユースケース

プロダクトの基本を理解したところで、ユースケースをいくつか見て、実際に動作している様子を確認しましょう。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

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

注: このタスクの実行中に、エージェントは現在のマシンで使用中のポート 5000 で Flask サーバーを起動しようとしました。次の空きポートを試行し続け、最終的に 8080 を使用することに決めて、サーバーを起動できました。

試してみたいこと

  • アプリケーションに追加したい機能を追加します。エージェントに詳細を提供し、タスクリスト、実装計画などを変更してタスクを進めていく様子を確認します。
  • エージェントに、アプリの 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.

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

21425379db336dc6.png

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

48f3320cd76b5cd8.png

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

8ee68905942825d.png

試してみたいこと

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

9. 完了

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

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