Configuration de l'environnement de développement Next.js (nextjs-dev-setup)
Un guide d'orchestration structuré de bout en bout pour découvrir, configurer et vérifier l'environnement de développement Next.js App Router, le routage par proxy inverse (Traefik / Nginx) et une source de vérité unique dans docs/project.json.
Pré-conditions et découverte
- Analyse sans interruption : Analysez les fichiers existants du dépôt (
package.json, lockfiles, feuilles de style,docs/adr/*.md,docs/plan.md,CONTEXT.md) avant de poser des questions. - Consultez project-json-schema.md pour la structure des métadonnées et les règles de déduction automatisées.
Phase 0 : Entretien de configuration multi-tours (approfondi) et génération du plan
Menez l'entretien interactif en tours progressifs et adaptatifs (en attendant la réponse de l'utilisateur après chaque tour) pour personnaliser la configuration :
- Tour 1 (Périmètre et outils) : Interrogez sur les suites de test cibles (Jest, Playwright, Storybook), les serveurs MCP et l'application de
@shadcn/lint. - Tour 2 (Proxy inverse et hébergement de production) : Interrogez sur le nom de domaine, le port et la stratégie de proxy inverse :
- Traefik via Docker Compose : Découverte automatique des conteneurs à l'aide des labels Compose qui lisent les variables d'environnement (
${DOMAIN_NAME},${TRAEFIK_ENTRYPOINT},${TRAEFIK_CERTRESOLVER}) avec anti-buffering. - Nginx via le système hôte : Configuration autonome dans
/etc/nginx/sites-available/<domain>utilisant les certificats SSL Certbot.
- Traefik via Docker Compose : Découverte automatique des conteneurs à l'aide des labels Compose qui lisent les variables d'environnement (
- Tour 3 (CI/CD, hooks Git et registre) : Interrogez sur les suites de test Husky pre-push, Commitlint et les workflows GitHub Actions Release Please / GHCR.
- Consultez setup-interview-rounds.md pour les ensembles de questions complets et la logique de branchement.
- Plan et exécution : Générez et présentez un artefact
implementation_plan.mddétaillant tous les fichiers, configurations et paquets prévus avant d'appliquer les modifications, puis procédez directement à l'exécution sans attendre de confirmation manuelle.
Flux d'exécution étape par étape
Étape 1 : Métadonnées du projet et outils de développement (docs/project.json)
- Initialisez
docs/project.jsonen utilisant project.template.json en fonction des choix de l'utilisateur lors de l'entretien. - Configurez
.vscode/launch.jsonen utilisant vscode-launch.json.template. - Échafaudez
app/providers.tsxavec<ProgressBarProvider>en utilisant providers.tsx.template et le composant composite<Link>en utilisant Link.tsx.template. - Échafaudez
.env.exampleen utilisant env.example.template pour la production et.env.localen utilisant env.local.template pour le développement local. - Icônes d'application, icône Apple et manifeste PWA : Déployez manifest.ts.template vers
app/manifest.ts. Configurez le favicon fourni par l'utilisateur dansapp/favicon.ico,app/icon.pngetapp/apple-icon.png(ou une icône dynamiqueImageResponse). Consultez app-icons-and-pwa-guide.md.
Étape 2 : Suites de test (Jest, Playwright et navigation instantanée)
[!IMPORTANT] Aucun fichier de test factice (Règle 3) : Ne créez pas de fichiers de test factices ou d'exemple dans l'espace de travail. Configurez uniquement les fichiers et scripts du framework. Des exemples de modèles sont disponibles dans sample-component.test.tsx, sample-navigation.spec.ts et sample-component.stories.tsx.
- Tests unitaires Jest : Configurez jest.config.ts.template et jest.setup.ts.template.
- Playwright E2E et navigation instantanée : Installez
@playwright/testet@next/playwright(pnpm add -D @playwright/test @next/playwright), configurez playwright.config.ts.template et installez les navigateurs. - Configuration instantanée Next.js : Configurez
cacheComponents: true,partialPrefetching: trueet les insights instantanés dansnext.config.ts. - Atelier Storybook : Configurez .storybook/main.ts et .storybook/preview.tsx.
- Passez en revue les architectures dans testing-guide.md et storybook-guide.md.
Étape 3 : Configuration du double serveur MCP
[!IMPORTANT] Règle de chargement global MCP d'Antigravity : AG ne charge que les serveurs MCP configurés globalement sur le système hôte (
~/.gemini/antigravity/mcp_config.jsonet~/.gemini/config/mcp_config.json). Le fichiermcp.jsonde l'espace de travail est conservé pour la portabilité. Les deux doivent être configurés.
- Configurez
next-devtools,playwright,storybooketcodebase-memory-mcp. - Prévention du bégaiement : Définissez
auto_watch = falseviacodebase-memory-mcp config set auto_watch falseet déployez .cbmignore à la racine. - Passez en revue les spécifications complètes dans mcp-configuration-guide.md.
Étape 4 : Linting du système de conception axé sur l'agent (@shadcn/lint)
- Installez
@shadcn/lintet configurez la configuration plate ESLint en utilisant eslint.config.mjs.template. - Passez en revue les mécanismes dans styling-and-linting-guide.md.
Étape 5 : Docker de production autonome et proxy inverse (Traefik / Nginx)
- Dans
next.config.ts: résolvez le hash du commit Git (getGitCommitHash()avec des solutions de repli CI) et la version du paquet, injectezNEXT_PUBLIC_APP_VERSIONetNEXT_PUBLIC_GIT_COMMIT_HASHsousenv, activezoutput: "standalone", définissezdeploymentIdpour la protection contre les décalages de version (${pkg.version}-${gitHash}), configurez lesheadersavecX-Accel-Buffering: noet définissezexperimental.serverActions.allowedOrigins. - Documentez
NEXT_SERVER_ACTIONS_ENCRYPTION_KEYdans.env.exampleet transmettez-le aux environnements d'exécution. - Déployez Dockerfile.template (avec
STOPSIGNAL SIGTERM) et docker-compose.yml.template (avecstop_grace_period: 30s). - Configuration du proxy inverse :
- Traefik : Déployez docker-compose.prod.yml.template avec des labels de variables d'environnement dynamiques (
${DOMAIN_NAME},${TRAEFIK_ENTRYPOINT},${TRAEFIK_CERTRESOLVER}) et un middleware anti-buffering. - Nginx : Déployez ou générez nginx-site.conf.template pour
/etc/nginx/sites-available/<domain>avec les certificats SSL Certbot.
- Traefik : Déployez docker-compose.prod.yml.template avec des labels de variables d'environnement dynamiques (
- Passez en revue l'architecture et l'avertissement de dérive du cache multi-conteneurs dans docker-containerization-guide.md.
Étape 6 : Hooks Git et CI/CD optimisé pour les crédits
- Installez
husky,@commitlint/cli,@commitlint/config-conventional. - Configurez commitlint.config.mjs.template,
.husky/commit-msget.husky/pre-push(pnpm run test:all). - Déployez .github/workflows/release-please.yml avec la mise en cache de la construction
.next/cacheet la publication matricielle multi-architecture. - Passez en revue la mise en cache dans cicd-and-release-automation-guide.md.
Étape 7 : Rapport d'exécution final et vérification
- Exécutez le script de vérification de la configuration et assurez-vous que toutes les vérifications réussissent.
- Staguez tous les fichiers créés/modifiés dans git (
git add .) conformément à la Règle 36. - Sortie finale obligatoire : Affichez le tableau markdown complet et structuré du Rapport d'exécution de la configuration de l'environnement de développement Next.js résumant tous les fichiers implémentés, les résultats des vérifications et les prochaines étapes de développement.
Vérification et test de cohérence
- Exécutez le script de vérification de la configuration :
- Windows (PowerShell) :
powershell -ExecutionPolicy Bypass -File .agents/skills/nextjs-dev-setup/scripts/verify-project-config.ps1 - Linux / macOS (Bash) :
bash .agents/skills/nextjs-dev-setup/scripts/verify-project-config.sh
- Windows (PowerShell) :
- Corrigez les éventuelles erreurs signalées et revérifiez jusqu'à ce que toutes les vérifications réussissent.
Cas limites et pièges IA connus
- Commandes chaînées : Ne chaînez jamais les commandes avec
&&ou;sur une seule ligne dans l'exécution du terminal. - Désactivation de MCP : Dans les configurations globales d'AG,
agy.exeignore"disabled": trueà l'intérieur demcpServers. Déplacez les serveurs désactivés en dehors demcpServers. - Noms d'images Docker : La dénomination OCI Docker exige strictement des noms de dépôt en minuscules (
IMAGE_NAME=$(echo ... | tr '[:upper:]' '[:lower:]')). - Contexte intl de Storybook : Enveloppez toujours les stories Storybook qui rendent
LinkouuseTranslationsavecNextIntlClientProvider.
Modèle de rapport d'exécution final obligatoire
Générez toujours ce rapport à la fin du workflow de la compétence :
## 🛠️ Rapport d'exécution de la configuration de l'environnement de développement Next.js
| Étape / Composant | Fichier(s) cible(s) / Ressource(s) | Statut | Notes / Détails |
| :--------------------------------- | :------------------------------------------------------------------------------------------------------- | :------------------------------ | :------------------------------------------------------------------------------- |
| **1. Métadonnées du projet** | `docs/project.json` | `[IMPLEMENTED]` / `[UNTOUCHED]` | Gestionnaire de paquets configuré, répertoires, métadonnées d'animation et i18n. |
| **2. Icônes d'application et manifeste PWA** | `app/manifest.ts`, `app/favicon.ico`, `app/apple-icon.png`, `app/icon.png` | `[IMPLEMENTED]` / `[UNTOUCHED]` | Favicon racine configuré, icône tactile Apple et manifeste d'application Web utilisant le favicon de l'utilisateur. |
| **3. Dépendances principales** | `package.json`, Lockfile | `[IMPLEMENTED]` / `[UNTOUCHED]` | Bibliothèques React, Next.js, de style et de mouvement vérifiées. |
| **4. Serveur de développement Next.js MCP** | `~/.gemini/antigravity/mcp_config.json`, `mcp.json`, `.agents/plugins/workspace-tools/mcp_config.json` | `[IMPLEMENTED]` / `[UNTOUCHED]` | Serveur de développement Next.js (`next-devtools`) configuré globalement pour AG et dans l'espace de travail. |
| **5. Playwright et tests instantanés** | `playwright.config.ts`, `@next/playwright`, `mcp.json`, `~/.gemini/antigravity/mcp_config.json` | `[IMPLEMENTED]` / `[UNTOUCHED]` | Exécuteur de Playwright, navigateurs, MCP Playwright et assistant de navigation instantanée `@next/playwright` vérifiés. |
| **6. Mémoire de codebase et correction du bégaiement** | `.cbmignore`, `mcp.json`, `~/.gemini/antigravity/mcp_config.json`, `auto_watch=false` | `[IMPLEMENTED]` / `[UNTOUCHED]` | MCP enregistré, exclusions .cbmignore configurées et observateur de session désactivé. |
| **7. Tests unitaires Jest** | `jest.config.ts`, `jest.setup.ts` | `[IMPLEMENTED]` / `[UNTOUCHED]` | Transformateur Jest Next.js configuré, environnement jsdom et test-dom. |
| **8. Storybook et MCP Storybook** | `.storybook/main.ts`, `.storybook/preview.tsx`, `mcp.json`, `~/.gemini/antigravity/mcp_config.json` | `[IMPLEMENTED]` / `[UNTOUCHED]` | Storybook Vite configuré, a11y, thèmes et MCP IA Storybook globalement et dans l'espace de travail. |
| **9. Linter Tailwind axé sur l'agent** | `eslint.config.mjs`, `package.json` | `[IMPLEMENTED]` / `[UNTOUCHED]` | `@shadcn/lint` configuré pour la vérification par agent des jetons de conception et des contrats. |
| **10. Docker et proxy inverse** | `Dockerfile`, `docker-compose.prod.yml`, `nginx-site.conf`, `.dockerignore` | `[IMPLEMENTED]` / `[UNTOUCHED]` | Conteneur autonome, labels Traefik / Nginx HTTPS avec Certbot SSL. |
| **11. Hooks Git Husky** | `.husky/commit-msg`, `.husky/pre-push` | `[IMPLEMENTED]` / `[UNTOUCHED]` | Applique la double suite de test pre-push (Jest + Playwright) et commitlint. |
| **12. Configuration Commitlint** | `commitlint.config.mjs` | `[IMPLEMENTED]` / `[UNTOUCHED]` | `@commitlint/config-conventional` configuré. |
| **13. Mise en cache des builds de release et CI** | `.github/workflows/release-please.yml` | `[IMPLEMENTED]` / `[UNTOUCHED]` | Cache de build Next.js (.next/cache), PR de version SemVer et paquet multi-arch GHCR. |
| **14. Vérification de l'environnement** | `scripts/verify-project-config.ps1` / `.sh` | `[PASSED]` | Test de cohérence réussi avec zéro erreur. |
#### Définitions des statuts :
- **`[IMPLEMENTED]`** : Créé, installé ou modifié lors de cette exécution de configuration.
- **`[UNTOUCHED]`** : Déjà correctement configuré avant l'exécution de la compétence ; conservé tel quel.
- **`[SKIPPED]`** : Volontairement omis en fonction de la préférence de l'utilisateur.