Démarrer8 min de lecture
Poste, Git et conventions
Tout ce qu'il faut pour cloner un projet, le lancer, et livrer du code que l'équipe relit sans friction.
Installer ton poste
Une seule version de chaque outil pour toute l'équipe : ça évite les « chez moi ça marche ».
| Outil | Comment |
|---|---|
| PHP 8.4, Composer, installeur Laravel | Script officiel php.new (Linux, WSL) ou Laravel Herd (macOS, Windows). |
| Node.js 24 LTS | Via fnm ou nvm, jamais le Node du système. Le projet fixe la version dans .nvmrc. |
| PostgreSQL, Redis | Docker Compose fourni dans chaque projet API (docker compose up -d), ou DBngin sur macOS. |
| Éditeur | VS Code ou PhpStorm, avec format à l'enregistrement activé. |
| Extensions VS Code | Laravel (officielle), PHP Intelephense, ESLint, Prettier, Tailwind CSS IntelliSense, i18n Ally (clés de traduction). |
# PHP 8.4 + Composer + Laravel installer (Linux / macOS / WSL)
/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.4)"
# Node.js 24 LTS via fnm
curl -fsSL https://fnm.vercel.app/install | bash
fnm install 24 && fnm default 24
# Check everything
php -v && composer -V && laravel --version && node -v && npm -vPremier lancement
Suis ces commandes dans l'ordre. Si un test échoue avant ta première modification, préviens ton tuteur : ce n'est pas à toi de le réparer en silence.
git clone git@github.com:lantorian/<project>-api.git && cd <project>-api
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate --seed
composer run dev # server + queue + logs + vite, all at once
composer test # must be green before you touch anythinggit clone git@github.com:lantorian/<project>-web.git && cd <project>-web
npm ci # exact versions from package-lock.json
cp .env.example .env.local # ask a teammate for the values
npm run dev # http://localhost:3000/fr
npm run lint && npm run typecheck && npm testLe flux Git
Une branche par ticket, des commits petits et lisibles, une pull request relue avant chaque fusion. Personne ne pousse directement sur main.
- 1
Créer la branche depuis main à jour
Format :type/numéro-ticket-description, par exemplefeat/142-invoice-export. - 2
Commiter par petites étapes
Un commit = une intention. Utilisegit add -ppour relire ce que tu ajoutes. - 3
Rebaser avant de pousser
git rebase origin/maingarde un historique linéaire. Pas de merge de main dans ta branche. - 4
Ouvrir la PR
Titre au format Conventional Commits, description avec le contexte, captures d'écran si l'interface change, et la checklist cochée. - 5
Intégrer la revue
Réponds à chaque commentaire, pousse les corrections, puis un relecteur fusionne en squash merge.
git switch main && git pull --rebase
git switch -c feat/142-invoice-export
# ...code, test, commit small steps
git add -p
git commit -m "feat(invoice): add csv export action"
# keep your branch up to date, then open the PR
git fetch origin && git rebase origin/main
git push -u origin feat/142-invoice-exportMessages de commit
On suit Conventional Commits : type(portée): description à l'impératif, en anglais, en minuscules, sans point final.
| Type | Quand l'utiliser |
|---|---|
feat | Nouvelle fonctionnalité visible par l'utilisateur. |
fix | Correction de bug. |
refactor | Changement de code sans changement de comportement. |
test | Ajout ou correction de tests uniquement. |
docs | Documentation, README, commentaires. |
chore | Dépendances, configuration, outillage. |
perf | Amélioration mesurable des performances. |
À éviter
wip
fix
update files
final version OKÀ faire
feat(invoice): add csv export action
test(invoice): cover empty invoice list
fix(auth): refresh token before expiry
refactor(user): extract CreateUser actionConventions de nommage
Le nom dit ce que fait la chose. En cas de doute, copie ce qui existe déjà dans le projet.
| Élément | Règle | Exemple |
|---|---|---|
| Classe PHP | PascalCase, suffixe du rôle | CreateInvoiceAction |
| Méthode PHP | camelCase, verbe | markAsPaid() |
| Table SQL | snake_case au pluriel | invoice_lines |
| URL d'API | kebab-case, ressources au pluriel | /api/v1/invoice-lines |
| Composant React | PascalCase | InvoiceTable |
| Fichier front | kebab-case | invoice-table.tsx |
| Hook React | préfixe use | use-invoices.ts |
| Clé de traduction | camelCase, groupée par écran | invoices.table.emptyTitle |
Outils qualité
Les mêmes commandes tournent sur ton poste et dans la CI. Pint formate le PHP, Larastan analyse les types, ESLint et Prettier s'occupent du TypeScript.
{
"scripts": {
"dev": "npx concurrently \"php artisan serve\" \"php artisan queue:listen\" \"php artisan pail\" \"npm run dev\"",
"lint": "pint --test",
"format": "pint",
"analyse": "phpstan analyse --memory-limit=1G",
"test": "pest --parallel",
"test:coverage": "pest --parallel --coverage --min=80",
"ci": ["@lint", "@analyse", "@test"]
}
}{
"scripts": {
"dev": "next dev",
"build": "next build",
"lint": "eslint .",
"format": "prettier --write .",
"typecheck": "tsc --noEmit",
"test": "vitest run",
"test:e2e": "playwright test",
"i18n:check": "node scripts/check-i18n.mjs"
}
}root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2
[*.php]
indent_size = 4
[*.md]
trim_trailing_whitespace = falseDemander de l'aide
Bloquer seul une journée coûte plus cher qu'une question. Quand tu demandes, donne : ce que tu essaies de faire, ce que tu as tenté, le message d'erreur complet.