illustration de Laravel Herd pour développer en local
Mise à jour : 4 septembre 2023

Le 20 juillet dernier était annoncé la sortie d’un nouvel outil pour les développeurs PHP appelé Laravel Herd. Étant sur Mac, j’utilise la stack Docker + Symfony CLI pour développer, mais sur quelques projets, j’ai des gros problèmes de performances. Le full docker améliore les perfs, mais l’expérience n’est pas terrible pour ceux qui connaissent la rapidité de Docker sur Mac.

Qu’est-ce que Herd ?

Herd est une application native incluant plusieurs versions de php (7.4 à 8.3), ngnix et dnsmasq. Il route automatiquement les projets locaux vers des urls en « *.test ».

Comparés a MAMP, les avantages sont la gestion des domaines et des certificats SSL et l’interface permettant de sélectionner la version PHP par projet.

Mise à jour des versions de PHP

Herd permet d’installer plusieurs versions de PHP, à chaque mise à jour, il est possible de l’appliquer directement depuis l’interface de l’outil. Quand on connait la galère de Homebrew sur mac avec les mises à jour qui ont une fâcheuse habitude à tout casser, c’est plutôt pratique.

PHP est buildé de manière statique. Ça permet de ne nécessiter aucune dépendance sur le Mac et d’améliorer les performances de PHP comparé aux versions de Homebrew. Tout est compilé (php et ses extensions) dans un seul fichier binaire.

Résultat

J’ai testé sur un projet WordPress bien chargé par le client sur la page d’accueil (~250 ressources à charger) et des 404 sur les images pour tester, le résultat est sans appel. La page est rendue en mois de 2 secondes avec Herd contre 25 secondes avec Symfony CLI.

Les performances comparées a Symfony CLI sont vraiment impressionnantes et c’est normal. Herd utilisant ngnix en interne, il permet de répondre extrêmement vite sur des centaines de requêtes statiques, ce que Symfony CLI ne sait pas faire. Surtout que les ressources en 404, la CLI de Symfony n’aime pas ça du tout.

Les versions de PHP sont installées dans des dossiers spécifiques pour Herd, aucun lien avec Homebrew. Pas besoin de migrer tous les développements, je peux garder la Symfony CLI qui fonctionne très bien sur 95% des projets 😉