Gemini 2.5 – Bonnes pratiques pour le développement web
Des livrables copier/coller et vérifiables, itérés par étapes avec preuves & tests. Sorties typées (JSON/diff) pour automatiser côté backend Vertex AI.
Demander du code clair & complet (Django / Flask / React)
Un livrable exploitable = tout ce qu’il faut pour coller-exécuter : imports, chemins exacts, commandes, tests. Avec Gemini 2.5, impose un format de sortie que ton backend peut parser.
✅ Check-list livrable “copier/coller”
- Noms & chemins exacts (ex :
blog/models.py). - Imports complets + versions compatibles.
- Bloc par fichier et/ou diff unifié si modification.
- Commandes (manage.py, npm, migrations) prêt-à-exécuter.
- Tests (succès/erreur/edge) = preuve rapide.
🧱 Patron “bloc par fichier”
FICHIER: blog/models.py
<code complet>
FICHIER: blog/admin.py
<code complet>
FICHIER: blog/views.py
<code complet>
COMMANDES:
python manage.py makemigrations
python manage.py migrate
pytest -q🧪 Sortie JSON structurée (Vertex AI)
from vertexai.generative_models import GenerationConfig, ResponseSchema
schema = ResponseSchema(type="object", properties={
"files":{"type":"array","items":{"type":"object","properties":{
"path":{"type":"string"}, "action":{"type":"string","enum":["create","patch"]},
"content":{"type":"string"}}}},
"commands":{"type":"array","items":{"type":"string"}}
}, required=["files"])
cfg = GenerationConfig(response_mime_type="application/json", response_schema=schema)📦 Exemples par stack
- Django : modèle + admin + CBV + url + template + tests pytest.
- Flask : blueprint, routes, schema, tests.
- React : composant contrôlé, props typées, exemple d’usage, test RTL.
Vérifier la cohérence (copier/coller vs. vérifier)
On ne pousse pas sans gate technique + preuves. Demande à Gemini de fournir les commandes de vérification et l’output attendu.
🧪 Gate technique — Django
python -m py_compile $(git ls-files "*.py")
ruff check && ruff format --check
python manage.py check
python manage.py makemigrations --check
python manage.py migrate --plan
pytest -q
grep -R "ArticleListView" blog/🧪 Gate technique — React
npm run typecheck
npm run lint && npm run build
npm run test -s
grep -R "<ContactForm" src/📋 Demander la preuve (avant/après)
"Donne les commandes de vérif (Django/React) et l’output attendu si tout est correct."📊 Métriques Vertex AI à tracer
- Tokens in/out, latence p95, coût, taux de “réponses incertaines”.
- Erreurs/quota : backoff exponentiel + idempotence.
Découper les tâches (modèles, vues, templates)
Découper = éviter les effets de bord, garder chaque étape vérifiable. Préfère des tranches verticales apportant de la valeur.
🪚 Découpes courantes (Django)
- Étape 1 : modèle + admin + migration (+ test modèle simple).
- Étape 2 : ListView + URL + template minimal (+ test liste).
- Étape 3 : CreateView + formulaire + validations + tests.
- Étape 4 : JS/CSS front, après validation du back.
🧭 Patron “Plan 3–5 étapes”
"Propose un plan 3–5 étapes pour <objectif>.
Attends mon OK, puis donne uniquement l’étape 1 (≤ 60 lignes)."📌 Exemple mini-plan (Blog)
1) Modèle Article + admin + migration (+ test modèle)
2) ListView + URL + template minimal (+ test liste)
3) CreateView + Form + tests (ok/erreur/permission)🧯 Anti-patterns
- Tout faire d’un coup (modèles + vues + templates + tests).
- Changer de stack/versions sans raison.
- Mélanger UX/JS lourds avant un back validé.
Faire valider chaque étape (Gate review)
Chaque étape a une DoD et une preuve (tests/commandes/screens). On n’avance pas sans validation claire.
✅ Definition of Done (gabarit)
DoD :
- Code linté (PEP8) + imports OK
- Tests : 1 succès + 1 erreur + 1 edge
- Commandes d’exécution fournies & passantes
- Diff minimal si modif + commentaire de tête🧪 Self-check demandé à Gemini
"Avant de livrer, rappelle contraintes, risques, contrôles/tests.
Propose 1 alternative et justifie le choix."📎 Exemple test (Django)
def test_article_list_view(client, django_db_setup):
resp = client.get("/blog/")
assert resp.status_code == 200
assert b"<h1>Articles</h1>" in resp.contentUtiliser Gemini comme pair-programmer (pas “copieur magique”)
Demander de la pensée critique, des alternatives, des preuves. Le but : itérer vite et bien, pas juste “recracher du code”.
🧠 Rôles utiles
- Code reviewer : “Revue stricte PEP8/perfs/sécu + diff & suggestions.”
- Architecte : “2 options, trade-offs, choix justifié.”
- Test engineer : “Écris tests (ok/erreur/edge) + comment les exécuter.”
🔌 Tools & RAG (Vertex AI)
from vertexai.generative_models import GenerativeModel, Tool, FunctionDeclaration
tool = Tool(function_declarations=[FunctionDeclaration(
name="lookup_doc",
description="Recherche interne",
parameters={"type":"object","properties":{"query":{"type":"string"}},"required":["query"]}
)])
resp = GenerativeModel("gemini-2.5-pro").generate_content("Synthétise le RGPD avec citations.", tools=[tool])🧯 Anti-patterns
- Accepter une solution sans tests ni preuves.
- Laisser le modèle modifier des fichiers non autorisés.
- Réponses “génériques” → faire un reset (voir Contexte & Sessions).
