1. Introduction
Dans cet atelier de programmation, vous allez découvrir Google Antigravity, une plate-forme de développement agentique conçue pour vous aider à développer des applications à l'ère des agents. Antigravity sert de centre de commande central pour vos agents d'IA. Il fournit une plate-forme unifiée pour lancer, surveiller et orchestrer leurs activités.
Dans cet atelier de programmation, nous allons utiliser Antigravity pour créer des applications réelles. Nous passerons d'une simple recherche sur le Web à la génération d'applications full stack et de tests unitaires de niveau entreprise.
Prérequis :
- Antigravity et Antigravity IDE installés et configurés.
- Connaissances de base de Google Antigravity Nous vous recommandons de suivre l'atelier de programmation Premiers pas avec Google Antigravity.
2. À propos des cas d'utilisation
Maintenant que vous avez une compréhension de base d'Antigravity, examinons quelques cas d'utilisation pour voir comment cela fonctionne. Notez qu'Antigravity est une plate-forme agent-first. Cela signifie que, dans la plupart des cas, nous donnons simplement une instruction à l'agent, qui s'en va ensuite de son côté, effectue sa tâche, demande des autorisations si nécessaire, produit les artefacts et nous avertit lorsque la tâche est terminée. Par conséquent, nous ne pouvons pas produire chaque résultat de la conversation de l'agent dans chacun des cas d'utilisation suivants. Nous vous fournirons les instructions et quelques captures d'écran nécessaires des résultats attendus, mais vos résultats peuvent être légèrement différents.
Les cas d'utilisation que nous allons aborder vont de l'automatisation de quelques tâches avec des sites externes à la génération et à la vérification de cas de tests unitaires pour un projet, en passant par le développement complet d'un site Web. Commençons.
3. Actualités en bref
Il s'agit d'un cas d'utilisation simple, mais il peut servir de base pour utiliser le navigateur Web afin de visiter des sites Web, d'extraire des informations, d'effectuer des actions, puis de renvoyer des données à l'utilisateur.
Dans ce cas, nous allons visiter le site Google Actualités et en extraire des informations. Mais vous pouvez facilement tester un site de votre choix et voir ce que cela donne.
Nous allons supposer que nous disposons d'un dossier racine sous lequel nous allons créer les différents projets que nous allons voir dans cet atelier de programmation. Ce dossier racine sur notre machine est nommé agy2-pprojects.
Commencez par créer un dossier nommé news-highlights dans le dossier ci-dessus pour repartir de zéro.
Lancez Antigravity et créez un projet. Ajoutez-y le dossier news-highlights.
Démarrez une conversation dans l'espace de travail news-highlights que vous venez d'importer :

Ensuite, donnez l'instruction suivante : Accède à news.google.com et donne-moi les principaux titres du moment.

Le processus de l'agent est alors lancé. Il détermine qu'il doit accéder au site news.google.com et vous demande votre autorisation. Il peut vous demander plusieurs fois l'autorisation de lire les URL. Vous pouvez choisir de l'accorder pour ce projet, etc.

Vous devez porter une attention particulière au processus de réflexion et voir comment l'agent s'y prend. Voici un exemple d'exécution par l'agent :

À essayer
- Une fois que vous avez compris cela, choisissez un site Web disponible à partir duquel vous souhaitez que l'agent obtienne ou résume des données. Pensez à un site Web qui, selon vous, comporte des tableaux de bord et des graphiques, et demandez-lui de choisir quelques valeurs.
- Essayez le prompt suivant :
Visit https://docs.cloud.google.com/release-notes and get me a summary of the release notes, categorized by product.
4. Générer un site Web dynamique avec Python et Flask
Passons maintenant à la génération d'une application Web complète. L'application Web que nous allons créer est un site qui fournit des informations sur un événement technique d'une journée, avec des conférences tout au long de la journée par plusieurs intervenants.
Créez un nouveau dossier nommé conference-website. Assurez-vous d'avoir créé un projet dans l'interface Antigravity Agent et d'y avoir ajouté le dossier conference-website.
Vous pouvez commencer la conversation en saisissant la requête ci-dessous :
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.
Antigravity analysera la demande et proposera d'abord un plan d'implémentation. Il créera un artefact clé appelé implementation_plan.md que vous pourrez examiner pour voir comment il prévoit de créer et de répondre aux exigences que vous avez spécifiées dans la requête. Voici un exemple de résultat :

Avant de cliquer sur "Proceed" (Continuer), examinez le plan d'implémentation. Vous pouvez cliquer sur le lien vers le fichier implementation_plan.md ci-dessus ou activer le volet auxiliaire en haut à droite. La vue des artefacts s'affiche et vous pouvez voir que le plan d'implémentation est disponible pour examen.

Vous trouverez ci-dessous un exemple de plan d'implémentation généré pour notre exécution :

Vous pouvez ajouter vos commentaires dans le plan et relancer l'agent. Vous pouvez aussi accepter le plan d'implémentation tel quel pour le moment et passer à l'étape suivante en cliquant sur le bouton Continuer dans l'interface de conversation.
L'agent poursuit la génération des fichiers de code source. Vous remarquerez également qu'il met à jour un autre artefact appelé "Task" (Tâche). Il s'agit d'une liste d'actions ou de tâches qu'il a identifiées comme nécessaires pour atteindre le résultat final.
Vous pouvez cliquer sur la tâche à tout moment ou même consulter la liste des artefacts pour afficher les tâches. Voici un exemple de fiche :

À un moment donné de la tâche finale, où il tente d'exécuter et de valider l'application, Antigravity configure un environnement Python et vous demande l'autorisation de le configurer, d'installer les dépendances, etc. Accordez les autorisations nécessaires.
Une fois la validation réussie, les détails sont mis en évidence, ainsi qu'un autre artefact, le guide, qui détaille les fonctionnalités, la pile technologique, les résultats de la validation et les instructions.

Voici un exemple de procédure pas à pas :

Le site Web final lorsque nous accédons à l'URL est illustré ci-dessous :

Si vous souhaitez voir le code généré, vous pouvez cliquer sur Ouvrir l'IDE en haut à droite. L'IDE Antigravity s'ouvre. Vous pouvez l'utiliser pour afficher le code généré. Voici un exemple de capture d'écran :

À essayer
- Ajoutez à l'application les fonctionnalités supplémentaires que vous souhaitez. Fournissez les détails à l'agent et observez comment il s'y prend en modifiant d'abord la liste des tâches, puis le plan d'implémentation, etc.
- Ajoutez des données supplémentaires au programme de l'événement. Par exemple,
Add two more talks to the schedule. - Demandez à l'agent de générer un fichier README ou plus de documentation pour l'application.
5. Générer une application de productivité simple
Nous allons maintenant générer une application Web de minuteur Pomodoro simple.
Créer un dossier pomodoro-timer. Assurez-vous d'être dans Agent Manager, et d'avoir importé et sélectionné l'espace de travail pomodoro-timer. Commencez par cette requête :
Create a productivity app that features a Pomodoro timer. Give a calm and aesthetic look to the application.
Remarquez comment il s'y prend pour créer le plan d'implémentation et la liste des tâches. Continuez à prêter attention au flux, car il peut y avoir des situations dans lesquelles il vous demandera de l'examiner.
Voici un exemple d'exécution avec le message et les tâches de la visite guidée :

L'application finale ressemblait à celle ci-dessous et était plutôt réussie.

À essayer
- Ajoutez des images à l'application. Par exemple, ajoutez une image de minuteur à l'application.
- Essayez quelques variantes de l'application que vous souhaitez générer. Testez les styles et les images, demandez des modifications, etc.
6. Générer des tests unitaires, des stubs de simulation et valider des tests
Le dernier cas d'utilisation que nous allons essayer ici consiste à générer des tests unitaires pour un fichier de code spécifique que nous possédons, et à demander à l'agent d'exécuter et de valider ces tests.
Pour ce faire, nous allons utiliser un espace de travail qui ne contient qu'un seul fichier Python, comme indiqué ci-dessous :
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}
Assurez-vous que le fichier Python ci-dessus (order_service.py) est disponible localement dans un nouveau dossier et que ce projet est ouvert pour la conversation dans Antigravity.
Il s'agit d'un service de commande simple qui présente les fonctionnalités clés suivantes dans la fonction checkout :
- Valide que le panier n'est pas vide.
- Vérifiez le stock de tous les articles.
- Calcule le prix final.
- Paiement des frais.
- Met à jour l'inventaire.
Nous allons attribuer à l'agent la tâche de générer des cas de tests unitaires, de fournir des implémentations Mock et d'exécuter les tests pour s'assurer qu'ils réussissent.
Nous allons ouvrir le dossier de notre espace de travail spécifique. Vous remarquerez que nous pouvons désormais utiliser le symbole @ pour faire référence au fichier. Par exemple, si nous commençons à saisir @order, le fichier order_service.py devrait s'afficher.

Nous pouvons lui demander d'effectuer une tâche qui nous aidera à comprendre ce fichier. Fournissez le prompt suivant :
Explain the @order_service.py file
Une explication s'affiche concernant ce fichier :

Nous pouvons lui demander de générer une meilleure visualisation à l'aide de la requête suivante :
Can you visually show this class for better understanding
Antigravity mentionne que la tâche est terminée et qu'il a généré un artefact contenant la visualisation :

Nous pouvons consulter la visualisation comme indiqué ci-dessous :

et les informations suivantes :

L'étape suivante consiste à générer les tests unitaires et à demander à l'agent de les tester. J'ai saisi le prompt suivant :
generate unit tests for this module and test it out with mock implementations.
Il s'est attelé à sa tâche, a généré les tests, les a exécutés et a même corrigé un bug. Voici le résultat :

L'un des fichiers qu'il a générés était également le fichier de test. Voici une capture d'écran :

À essayer
Prenez votre propre code et voyez ce que vous pouvez demander à l'agent de faire, qu'il s'agisse d'ajouter des fonctionnalités ou de refactoriser des parties de votre code.
7. Félicitations
Félicitations ! Vous avez utilisé Google Antigravity pour :
- effectuer des recherches sur le Web de manière autonome ;
- Créez et itérez des applications Web full stack.
- Écrivez et validez des tests unitaires complexes avec des mocks.
Vous êtes maintenant prêt à laisser Antigravity s'occuper des tâches les plus difficiles dans vos propres projets.
Documents de référence
- Atelier de programmation : Premiers pas avec Google Antigravity
- Site officiel : https://antigravity.google/
- Documentation : https://antigravity.google/docs
- Télécharger : https://antigravity.google/download
- Chaîne YouTube Google Antigravity : https://www.youtube.com/@googleantigravity