Section 13.7.2 : Développement full-stack du projet
🎯 Objectif pédagogique
Implémenter le projet final en suivant les bonnes pratiques Rails : développement itératif, TDD, code review, et gestion de projet avec Git flow.
Méthodologie de développement
Le développement suit une approche itérative avec des sprints courts :
## Sprint 1 (3 jours) : Fondations
- [ ] Initialiser le projet Rails
- [ ] Configurer la base de données (PostgreSQL + pgvector)
- [ ] Implémenter l'authentification (Devise)
- [ ] Créer le layout principal (Bootstrap)
- [ ] Déployer sur Heroku (CI/CD)
## Sprint 2 (3 jours) : Fonctionnalités core
- [ ] Modèles et migrations
- [ ] CRUD principal
- [ ] Interface utilisateur (Turbo + Stimulus)
- [ ] Tests RSpec
## Sprint 3 (3 jours) : Intégration IA
- [ ] Service OpenAI
- [ ] Pipeline RAG (embeddings + recherche)
- [ ] Interface de chat
- [ ] Gestion des erreurs et limites
## Sprint 4 (3 jours) : Finitions
- [ ] Administration (Pundit)
- [ ] Responsive design
- [ ] Performance (caching, N+1)
- [ ] Tests E2E
Git Flow pour le projet
# Branches principales
main # Production (toujours déployable)
develop # Développement (intégration)
# Branches de feature
git checkout -b feature/user-auth
# ... développer ...
git push origin feature/user-auth
# Créer une Pull Request vers develop
# Convention de commits
git commit -m "feat: add user authentication with Devise"
git commit -m "fix: resolve N+1 query in conversations#index"
git commit -m "test: add RSpec tests for AiService"
git commit -m "docs: update README with setup instructions"
Scaffold intelligent avec Rails
# Générer les modèles rapidement
rails generate model User name:string email:string role:string
rails generate model Conversation user:references title:string
rails generate model Message conversation:references role:string content:text tokens_used:integer
rails generate model Document title:string content:text category:string
rails generate model Chunk document:references content:text chunk_index:integer
# Générer un controller complet
rails generate controller Conversations index show create --skip-routes
# Migrations
rails db:migrate
TDD : tester en même temps que vous développez
# spec/services/ai_service_spec.rb
RSpec.describe AiService do
describe '.chat' do
it 'returns a response from OpenAI' do
VCR.use_cassette('openai_chat') do
result = AiService.chat('Dis bonjour')
expect(result).to be_a(String)
expect(result.length).to be > 0
end
end
it 'includes system message when provided' do
VCR.use_cassette('openai_chat_system') do
result = AiService.chat(
'Quel est ton rôle ?',
system_message: 'Tu es un assistant juridique.'
)
expect(result).to include('juridique').or include('droit')
end
end
end
end
# spec/models/conversation_spec.rb
RSpec.describe Conversation do
it { should belong_to(:user) }
it { should have_many(:messages).dependent(:destroy) }
it { should validate_presence_of(:title) }
describe '#last_message' do
it 'returns the most recent message' do
conversation = create(:conversation)
old_msg = create(:message, conversation: conversation, created_at: 1.hour.ago)
new_msg = create(:message, conversation: conversation, created_at: Time.current)
expect(conversation.last_message).to eq(new_msg)
end
end
end
Code Review checklist
## Avant chaque Pull Request, vérifiez :
### Fonctionnel
- [ ] La feature fonctionne comme prévu
- [ ] Les edge cases sont gérés
- [ ] Pas de régression sur les features existantes
### Code Quality
- [ ] DRY (pas de duplication)
- [ ] Methods < 10 lignes
- [ ] Nommage explicite (pas de variables x, y, temp)
- [ ] Strong Parameters utilisés
- [ ] N+1 queries éliminées
### Tests
- [ ] Tests unitaires pour les models/services
- [ ] Tests d intégration pour les controllers
- [ ] Tests passent en CI
### Sécurité
- [ ] Input sanitisé
- [ ] Autorisations Pundit en place
- [ ] Pas de secrets dans le code
Quel est l'avantage principal du développement itératif (sprints) ?
Apprendre l’IA, du premier prompt aux agents