You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.6 KiB
6.6 KiB
ADR-002 : Next.js 14 comme Framework Frontend
Statut : ✅ Accepté
Date : Octobre 2025
Décideurs : Équipe Architecture
Tags : frontend, framework, react
Contexte
L'application moderne nécessite un framework React performant avec :
- Support TypeScript natif
- Server-Side Rendering (SSR) pour SEO
- API Routes intégrées (Backend For Frontend)
- Performance optimale
- DX (Developer Experience) excellente
Options considérées
- Next.js 14 (App Router)
- Remix
- Vite + React Router
- Create React App (CRA)
Décision
✅ Nous adoptons Next.js 14 avec App Router
Justification
Pourquoi Next.js ?
1. Écosystème Mature 🌟
- Framework le plus populaire React (utilisé par Vercel, Netflix, TikTok, etc.)
- Communauté énorme
- Documentation excellente
- Ressources d'apprentissage abondantes
2. Performance Exceptionnelle ⚡
- SSR/SSG natifs (SEO optimal)
- Streaming (React 18 Server Components)
- Image Optimization automatique (
next/image) - Code Splitting automatique
- Lazy Loading built-in
3. App Router (Next.js 14) 🚀
- Server Components par défaut (moins de JS client)
- Nested Layouts (partage de UI)
- Loading UI et Error Boundaries intégrés
- Parallel Routes et Intercepting Routes
- Routing basé sur le système de fichiers (convention over configuration)
4. Backend Intégré (BFF Pattern) 🔧
- API Routes (
app/api/) - Parfait pour notre API Gateway / BFF
- Déploiement unifié (frontend + backend)
- Middleware pour auth, logging, etc.
5. TypeScript First 📘
- Support TypeScript natif
- Typage automatique des routes
- Autocomplétion des imports
6. Déploiement Simplifié ☁️
- Vercel (hébergement optimisé)
- Déploiement en 1 clic
- Preview deployments automatiques
- Edge Functions disponibles
7. Écosystème Intégré 🛠️
- Compatible avec shadcn/ui
- Intégration Tailwind CSS excellente
- Support React Query, Zustand, etc.
Comparaison des Alternatives
| Critère | Next.js 14 | Remix | Vite + RR | CRA |
|---|---|---|---|---|
| SSR/SSG | ✅✅✅ Natif | ✅✅ Natif | ⚠️ Manuel | ❌ CSR only |
| API Routes | ✅ Oui | ✅ Oui | ❌ Non | ❌ Non |
| Performance | ✅✅✅ | ✅✅ | ✅✅ | ⚠️ |
| DX | ✅✅✅ | ✅✅ | ✅✅ | ⚠️ |
| Communauté | ✅✅✅ Énorme | ✅ Croissante | ✅✅ | ⚠️ Déprécié |
| Déploiement | ✅✅✅ Vercel | ✅ Fly.io | ⚠️ Manuel | ⚠️ |
| Courbe apprentissage | ⚠️ Moyenne | ⚠️ Moyenne | ✅ Faible | ✅ Faible |
| Popularité 2025 | ✅✅✅ | ✅ | ✅✅ | ❌ |
App Router vs Pages Router
Nous choisissons App Router (Next.js 13+) :
| Feature | Pages Router | App Router |
|---|---|---|
| Server Components | ❌ Non | ✅ Oui |
| Nested Layouts | ⚠️ Layout HOC | ✅ Natif |
| Streaming | ❌ Non | ✅ Oui |
| Loading States | ⚠️ Manuel | ✅ Natif |
| Error Handling | ⚠️ _error.js | ✅ error.tsx |
| Parallel Routes | ❌ Non | ✅ Oui |
| Metadata API | ⚠️ Head | ✅ Metadata object |
| Futur | ⚠️ Legacy | ✅ Recommandé |
Conclusion : App Router est le futur de Next.js
Architecture avec Next.js
Structure
apps/modern-app/
├── src/
│ ├── app/ # App Router
│ │ ├── (auth)/ # Route group (auth pages)
│ │ ├── (main)/ # Route group (main app)
│ │ ├── api/ # API Routes (BFF)
│ │ ├── layout.tsx # Root layout
│ │ └── page.tsx # Home page
│ │
│ ├── components/ # React Components
│ ├── services/ # Microservices logic
│ └── lib/ # Utilities
BFF Pattern avec API Routes
// app/api/reservations/route.ts
export async function POST(request: Request) {
// API Gateway logic
const data = await request.json()
// Orchestrate microservices
const availability = await inventoryService.check(data)
const reservation = await reservationService.create(data)
const payment = await paymentService.createIntent(reservation)
return Response.json({ reservation, payment })
}
Conséquences
✅ Avantages
- Performance : Lighthouse scores > 95
- SEO : SSR natif
- DX : Hot reload, Fast Refresh
- BFF : API Routes intégrées
- Déploiement : Vercel en 1 clic
- Maintenance : Framework mainstream
- Portfolio : Technologie recherchée
⚠️ Inconvénients
- Complexité initiale : App Router = courbe d'apprentissage
- Magie : Conventions à connaître (Server Components, etc.)
- Vendor lock-in : Optimisé pour Vercel (mais pas obligatoire)
🛠️ Mitigations
- Formation App Router (documentation Next.js)
- Exemples de code commentés
- Isolation de la logique métier (services indépendants)
Alternatives Rejetées
❌ Remix
Avantages :
- Excellente gestion des forms
- Nested routes puissants
- Philosophie web-native
Raisons du rejet :
- Communauté plus petite
- Moins de ressources/exemples
- Déploiement moins simple que Vercel
- Moins connu = moins impressionnant pour portfolio
❌ Vite + React Router
Avantages :
- Build ultra-rapide (Vite)
- Flexibilité maximale
- Lightweight
Raisons du rejet :
- Pas d'API Routes intégrées (besoin backend séparé)
- SSR manuel à configurer
- Moins de conventions (plus de décisions)
- Pas de BFF pattern natif
❌ Create React App (CRA)
Raisons du rejet :
- Déprécié officiellement par React
- CSR only (pas de SSR)
- Performance médiocre
- Pas d'API Routes
- Pas adapté 2025
Références
Validations
- POC App Router réalisé
- Tests performance (Lighthouse)
- Compatibilité avec Supabase validée
- shadcn/ui compatible ✅
Prochaine révision : Si Next.js 15 sort avec changements majeurs