Aller au contenu principal

Articles · Développement

Développement web : Symfony, PHP, tests et qualité de code

Articles sur le développement d'applications web avec PHP et Symfony : performance, tests automatisés, API, sécurité et maintenabilité.

20 articles · page 1/2

Technique · IA · Développement · · 14 min

6 mois avec Claude Code : ce sur quoi je m'étais trompé

Suite directe du retour d'expérience de janvier sur la refonte de x10-solutions.fr, qui se concluait sur un scepticisme assumé : « je n'envisage pas que des agents Claude puissent générer l'intégralité de l'application ». Six mois plus tard, cet article est un mea culpa argumenté et chiffré à partir du dépôt Git du site : 280 commits, plus de 81 500 lignes ajoutées, un blog passé de moins de dix articles à 58, un glossaire de 165 termes. La chronologie explique l'erreur — janvier en prise en main (6 commits), février consacré à l'industrialisation (85), mars et la suite en production continue (120). Trois raisons ont renversé le verdict, et une seule tient au modèle : le contexte est devenu un artefact versionné du dépôt plutôt qu'une conversation chez un éditeur, et j'avais jugé un outil que je ne savais pas encore utiliser. Le ratio s'est inversé (80 % de génération, 20 % de relecture), le budget outillage a triplé pour un arbitrage trivial, et Stitch a disparu du circuit. Mais la thèse de janvier tient sur l'essentiel : le gain vient de l'expertise qui cadre et relit. La démonstration est arrivée par surprise — des clients passés à Claude Code envoient désormais des merge requests, issues et specs générées par IA : massives, verbeuses, souvent fausses, et la charge de tri se déplace sur le prestataire. Le même outil multiplie le débit chez qui sait juger, et le volume à trier chez qui ne sait pas.

Technique · Développement · Architecture · · 12 min

Mettre une API externe en cache sans servir de données périmées

Beaucoup d'applications dépendent d'une API qu'elles ne maîtrisent pas — un annuaire, un référentiel, un ticketing maison — lente et parfois indisponible. Le réflexe est de mettre un cache devant ; le piège est de cacher sans discernement et de servir des tickets fermés comme ouverts. Ce retour d'expérience montre que cacher une API externe n'est pas un problème de cache mais de classification : trier chaque donnée entre ce qui peut vieillir (l'annuaire) et ce qui doit rester vivant (les tickets). Avec, autour de cette décision, une façade qui centralise les appels — une couche anti-corruption —, une clé de cache normalisée par tri avant hachage, une dégradation gracieuse qui renvoie une valeur neutre quand l'API tombe, et une interface qui rend toute la chaîne testable hors-ligne.

Technique · Développement · Architecture · · 12 min

Un transport Symfony Mailer sur mesure pour une API d'emails interne

En grande entreprise, le SMTP direct est fermé : tous les emails passent par une API maison, authentifiée en OAuth2 et capable de signer ou chiffrer en S/MIME. Le réflexe est d'écrire un service qui appelle cette API partout — et de coupler cinquante endroits du code à une plomberie spécifique, en perdant au passage l'objet Email, les templates Twig et la file d'attente. Ce retour d'expérience montre le bon point d'extension : un transport Symfony Mailer derrière un DSN api://, qui traduit l'Email en payload, met son token OAuth2 en cache avec une marge et un retry sur 401, et reçoit ses options de signature par des en-têtes MIME consommés en chemin. Une centaine de lignes isolées dans la librairie partagée, et tout le code métier ignore que l'API existe.

Technique · Développement · Architecture · · 12 min

Un moteur de formules métier sans Excel ni eval()

« Il nous faudrait juste des formules, comme dans Excel. » Cette demande mène soit à eval() et ses failles, soit à un parseur maison ingérable — soit à Symfony ExpressionLanguage, un composant discret qui fait exactement ce travail. Ce retour d'expérience croise deux mises en production très différentes : une application de reporting d'un grand opérateur télécom qui a remplacé un classeur Excel — fonctions null-safe à la sémantique tableur, solveur itératif de vingt lignes qui converge sans graphe de dépendances — et une plateforme SaaS PIM où les utilisateurs écrivent eux-mêmes leurs règles — vocabulaire métier de soixante fonctions, validation à la saisie, cache d'AST partagé et dépendances déduites de l'arbre syntaxique. Avec, en fil rouge, la frontière que ce montage offre au métier : changer ses règles sans déploiement.

Technique · Infrastructure · Développement · · 15 min

Tester l'image Docker de prod avec des e2e en CI

Le container déployé en production n'est jamais exactement le code testé en CI : dépendances sans dev, build des assets, configuration serveur, entrypoint… Sur une application Symfony déployée sur OpenShift pour un grand opérateur télécom, la suite e2e Playwright s'exécute désormais directement contre l'image de production fraîchement construite, comme service GitLab CI, avant toute publication. Cet article détaille l'architecture complète — bundles dev-only pour rendre l'image démarrable en test, dump SQL versionné pour des données déterministes, Mailpit pour les emails — et les pièges concrets rencontrés, dont un TLD préchargé HSTS dans Chromium.

Décideurs · Stratégie · Développement · · 12 min

WooCommerce, PrestaShop ou Magento : lequel choisir

WooCommerce, PrestaShop, Magento : trois plateformes e-commerce open source qui couvrent des besoins très différents. Cet article n'est pas un comparatif de fonctionnalités mais un avis de terrain, forgé en construisant des connecteurs PIM vers chacune de ces plateformes. Taille de catalogue, coûts d'hébergement, qualité des API, complexité de développement et écosystème français : les critères concrets pour un choix éclairé.

Technique · Architecture · Développement · · 15 min

Connecter un PIM à PrestaShop et Magento : REX

En tant que CTO d'une plateforme PIM/DAM SaaS, j'ai conçu et maintenu pendant quatre ans les connecteurs qui synchronisaient les catalogues des clients vers PrestaShop et Magento. Cet article détaille l'architecture en quatre couches (source → mapping → format → adapter), le traitement des variantes et déclinaisons, le streaming par générateurs PHP pour les gros catalogues, et les patterns de gestion d'erreurs qui ont survécu à la production.

Technique · Architecture · Développement · · 15 min

Concevoir une API REST maintenable

Une API REST bien conçue est un investissement. Mal conçue, elle devient un frein pour chaque évolution et chaque nouveau consommateur. Cet article détaille les principes concrets d'une API maintenable : conventions de nommage des ressources, stratégie de versioning (URL vs header), pagination et filtrage, gestion d'erreurs standardisée (RFC 7807), documentation automatisée (OpenAPI), authentification (OAuth2, API keys) et bonnes pratiques de performance (cache HTTP, compression, rate limiting).

Technique · Méthodologie · Développement · · 12 min

TDD, BDD ou tests a posteriori : lequel choisir

TDD (Test-Driven Development), BDD (Behavior-Driven Development) et tests a posteriori répondent à des objectifs différents. Cet article les compare sans dogmatisme : quand le TDD apporte un vrai gain (logique métier complexe, algorithmes), quand le BDD clarifie les spécifications (projets multi-parties prenantes), et quand les tests a posteriori sont le choix pragmatique (legacy, prototypage, dette technique). Il propose une combinaison optimale par couche applicative et un plan d'adoption progressif.

Technique · Méthodologie · Développement · · 14 min

Tests automatisés sur un projet legacy

Ajouter des tests sur un projet legacy semble impossible : code couplé, pas d'injection de dépendances, aucune couverture existante. Pourtant, c'est précisément là que les tests ont le plus de valeur. Cet article propose une stratégie pragmatique : commencer par les tests de caractérisation (documenter le comportement actuel), identifier les zones à risque, introduire des coutures (seams) pour rendre le code testable sans le réécrire, et augmenter la couverture progressivement en ciblant les modules critiques.

Technique · Développement · · 12 min

Core Web Vitals : impact SEO et optimisation

Les Core Web Vitals sont des signaux SEO mesurables qui influencent le classement Google. LCP (temps d'affichage du contenu principal), INP (réactivité aux interactions) et CLS (stabilité visuelle) mesurent l'expérience utilisateur réelle. Cet article explique chaque métrique avec ses seuils, les causes fréquentes de mauvais scores, l'impact réel sur le SEO et le business, les outils de mesure (Search Console, PageSpeed Insights, Lighthouse) et un plan d'action concret avec quick wins et optimisations structurelles.

Technique · Développement · Architecture · · 15 min

Optimiser les performances d'une application Symfony

Une application Symfony bien architecturée peut servir des pages en moins de 200 ms. Les problèmes de performance ne viennent presque jamais du framework mais de son utilisation. Cet article détaille les optimisations concrètes : base de données (N+1, index, cache de requêtes), code PHP (sérialisation, lazy loading), cache HTTP (navigateur, reverse proxy, applicatif), front-end (images, CSS, JavaScript) et monitoring (Profiler, Blackfire, Lighthouse). Avec une checklist des 10 points essentiels pour la production.

À propos de cette sélection

Le développement d'une application métier ne s'arrête pas à la mise en production : le code doit rester lisible, testé et rapide pendant des années.

Ces articles traitent de PHP et Symfony au quotidien : performance, stratégie de tests, conception d'API, et les solutions concrètes que j'ai mises en place sur des projets réels.

Contact

Un sujet vous intéresse ?

Vous avez une question technique ou souhaitez approfondir un sujet abordé dans ces articles ? N'hésitez pas à me contacter pour en discuter.

Me contacter arrow_forward