SymfonyLive 2018 : Symfony 4 met le cap sur l'excellence

Retour sur la 10e édition du Symfony Live qui s'est déroulée les 29 et 30 mars 2018. Une année record, avec plus de 800 visiteurs à la Cité Universitaire à Paris, rassemblés pour découvrir les nouveautés de Symfony et PHP.

Nous avons eu la chance cette année encore d'assister à la dixième édition du Symfony Live qui s'est déroulée les 29 et 30 mars derniers. Une année record, avec plus de 800 personnes rassemblées dans les prestigieux salons de la Cité Universitaire à Paris, pour échanger et découvrir les nouveautés autour de Symfony et de l'écosystème open source, et en particulier PHP.

Ces deux jours ont été rythmés par des conférences autour du framework Symfony, aussi intéressantes les unes que les autres. Nous avons été touchés par l'introduction de la journée : une belle initiative en faveur de la protection des éléphants et plus particulièrement les éléphants orphelins grâce à l'association David Sheldrick Wildlife Trust. C'est la première fois que nous assistons à ce genre d'initiative et cela nous a particulièrement marqué.

 Symfony 4 : un framework pour les gouverner tous

Comme chaque année, c'est Fabien Potencier, fondateur de Symfony, qui ouvre le bal avec une Keynote sur les nouveautés depuis la sortie de Symfony 4 en novembre 2017. Actuellement Symfony est en version béta 4.1, et dans les prochains mois, en misant plutôt sur la fin d'année, la version 4.4 sera disponible en LTS.

Rappelons que Symfony introduit encore des changements (comme pour la version 3.4) au niveau de son architecture, avec une structure de fichiers plus légère. Pour conséquence, la dépendance avec le bundle symfony/symfony disparaît, le dépôt symfony/skeleton est réduit à un simple fichier de configuration qui embarque les dépendances vitales dont le framework a besoin pour fonctionner.

En plus du basique, Symfony propose un autre dépôt skeleton pour construire un site web (symfony/website-skeleton) qui contient les composants de base que nous avions l'habitude d'utiliser auparavant.

Symfony s'appuie aussi sur Flex (un plugin composer) qui va automatiser la gestion, l'installation et la configuration des dépendances. Il propose également des bundles pour un mot clé donné, comme par exemple "mailer" qui proposera instinctivement "swift-mailer" en résultat.

Flex s'appuie sur un server Symfony Recipes (symfony.sh) pour construire de façon optimale ses dépendances. Ces recipes (la recette d'installation et de configuration des packages) peuvent être contribués et une validation de la Symfony Core Team est nécessaire. Flex permet l'utilisation d'alias pour installer un groupe entier de packages (avec les options pack/unpack).

Symfony 4 est pensé pour améliorer l'expérience développeur (DX), avec son système d'autowiring (l'injection auto des services et des bundles chargés). Combiné à Flex, il automatise la plupart des tâches répétitives du développeur, ainsi, il permet une prise en main très rapide, et promet une installation transparente des paquets tierces.

Autre nouveauté annoncée, l'utilisation des variables d'environnements via le fichier .env. Ainsi l'injection des paramètres de l'application ne devraient plus se faire via le fichier parameters.yml.

Parlons maintenant de ce qui n'est plus dans Symfony 4, le bundle générateur laisse place à symfony/maker-bundle ! La notion de Bundle n'est plus un terme que le développeur doit forcément connaître car il s'agit maintenant d'un terme plus interne au Framework.

La légèreté, et la praticité de Symfony 4, rend obsolète des micro-frameworks qui répondent à cette problématique, à l'instar de Silex, dont l'arrêt du support est prévu pour juin 2018. Pour donner un chiffre, Symfony 4, installé en skeleton ne fait pas plus de 13 fichiers ! Toujours dans une optique de légèreté, et pour se débarrasser de cette image de mastodonte qu'il traîne depuis des années, Symfony met la barre plus haut en permettant même d'alléger d'avantages les vendor installés en proposant de les "unpacker" afin de rendre visible ses dépendances et ainsi de supprimer celles qui n'ont aucune utilité dans le projet. Il devrait-être plus aisé qu'avant d'optimiser son application en termes de performances. En parlant de performances, il est nécessaire de préciser que Symfony 4 ne supporte plus PHP 5, et qu'il a été revu en profondeur pour répondre au mieux aux exigences de PHP 7, mais nous y reviendront.

Retours d'expérience et mise en pratique de Symfony 4

Cette nouvelle version a été mise en place chez Allociné, suite à la migration de leur API de connexion. C'était le sujet d'une autre conférence présentée par Estelle Le Cam (Lead dev chez Allociné). Elle a détaillé la roadmap de cette migration, mais sans rentrer dans les détails techniques de son implémentation. Elle a également parlé de leur méthode de versioning, sous Git, qui consiste à créer une branche par version de Symfony.

Ce retour d'expérience a été précédé par celui de Mathieu Santostefano, sur les outils les plus efficaces pour traduire une application Symfony, avec un comparatif des avantages/inconvénients de chacun. Et a fini par présenter l'outil le plus complet php-translation/symfony-bundle qui permet d'isoler complètement les traductions des développements applicatifs. Il a parlé notamment des rôles de chacun (développeur, chef de projet, traducteur) durant la phase de traduction, et comment via des outils (internes ou externes) faciliter le travail de chacun. Ces retours d'expérience nous ont concrètement démontré la mise en pratique de Symfony 4 et la facilité de l'intégrer dans un projet d'envergure.

Et l’architecture alors ?

Un des grands thèmes également abordés est l'architecture.

Ainsi durant son talk, Marc Weistroff (Web Architect, Freelance), a parlé de son expérience et de son refactoring pour passer son application d'une architecture intégrée à une architecture modulaire (séparer son code métier en modules indépendants), tout cela bien sûr en s'appuyant sur Symfony.

Toujours au sujet de l'architecture, c'est Romain Kuzniak (Chief Technology Officer, OpenClassRooms) qui à son tour nous a expliqué « la clean architecture » à travers un exemple de fermeture de sprint.

Il a confronté son exemple aux design patterns courants (MVC, n-tiers, Domaine Driven Design), à travers des schémas et des exemples de codes d'implémentation, prouvant le degré d'efficacité de chacun, pour arriver à l'excellence avec la clean architecture. Seul bémol, cette approche n'est efficace que sur un projet à long terme, avec une équipe investie.

Pour conclure sur le sujet de l'architecture, nous avons assisté à un duo de speakers sur la thématique de Doctrine, ou plus précisément : comment développer son modèle de données de façon à être le plus indépendant possible de son infrastructure. C'est le Domaine Driven Design, où le besoin de l'architecture est dicté par le code métier et non par l'infrastructure de l'application.  

 Testez-vous vos tests ?

 Nous avons également trouvé très intéressant le talk le Théo Fidry sur les tests des tests en introduisant des bugs par Mutation Testing. En effet, écrire des tests c'est écrire du code qu'il va falloir tester et ainsi de suite, ce qui conduit à une régression à l'infini.

Pour pallier à cette problématique cette conférence présente une nouvelle façon d'éprouver ces tests, en faisant muter le code via un bundle très intéressant : infection/infection.

Romain Gautier nous a fait un inventaire des outils utiles pour les développeurs. En partant de Git, des fixtures et en passant par les migrations et les tests jusqu'au outils pour l'intégration et le déploiement continu. Rien de nouveau en soi mais toujours utile.

PHP 7 et Symfony 4 : le duo de choc

La deuxième journée commence comme la première avec le talk d'une pointure de chez SensioLabs, Nicolas Grekas. Il a détaillé la façon dont PHP 7 améliore grandement les performances, et en quoi le mécanisme de l'OPcache est partagé dans le but de mutualiser les ressources. Durant son talk, il donne les grandes lignes d'amélioration qui ont été apportées à Symfony avec la preuve des audits via BlackFire (un autre outil SensioLabs). Tout cela démontre bien que Symfony 4 tire pleinement partie de PHP 7 et devient le Framework le plus performant de l’écosystème PHP !

Bien sûr de nombreux conseils d'optimisation de code sont donnés avec leur degré d'efficacité.

Dans un futur proche, une grosse amélioration sera introduite lors de la mise à jour PHP 7.3 : le Garbage Collector. Jusqu'ici très lourd et appelé tous les 10K objets, il sera revu et optimisé. Nicolas Grekas nous rappelle au passage qu'il peut déjà être optimisé (ou plutôt désactivé) si l'on sait ce que l'on fait avec ses objets.

GraphQL vs REST

Bien sûr que serait un back sans le front pour l'exposer ? C'est le but de certains talks de cette deuxième journée.

Suite à la présentation d'API platform (Framework web basé sur Symfony pour créer facilement des API, et sa version bundle api-platform/api-platform) Kevin Dunglas (Co-fondateur des Tilleuls) revient cette année avec plus de détails sur son API et notamment l'implémentation de GraphQL et REST.

Sur la base d'une comparaison de ces deux formats d'échange, il nous montre l'inconvénient et les avantages de ces deux approches. Parmi les participants à la conférence, nous avons pu constater que les avis été mitigés sur ces 2 formats… Seul l’usage nous montrera lequel sera le plus utile.

Webpack Encore… encore ?

Autre talk basé sur le même sujet que l'année dernière : celui d'Alain Hippolyte, qui nous a parlé « encore » de WebPack ou plus précisément WebPack Encore.

Ce composant a finalement vu le jour dans une version stable (l'année dernière WebPack n'était pas lancé officiellement). En tout cas, on se rend compte de la facilité de paramétrage des composants front dans une application Symfony, Webpack permet entre autres de convertir les langages de scripting web (ReactJs) en JS exécutable sur tout type de navigateurs en utilisant un interpréteur (Babel par exemple). Ajouté à cela, la recherche constante d'automatiser le plus possible, pour laisser le développeur se concentrer sur le code métier. Un focus a également été fait sur le mécanisme d’optimisation de chargement des ressources JavaScript et CSS.

WorkFlow, une nouvelle version simplifiée

Deux autres talk se sont concentrés sur des composants spécifiques de l'écosystème Symfony.

Le premier, symfony/workflow (une implémentation des States Machine), qui existait déjà, mais qui ne faisait pas l'unanimité parmi les développeurs.

Ce composant a été grandement amélioré dans sa nouvelle version, et simplifié dans son utilisation.

Ainsi à travers un exemple concret, le suivi de réalisation d'un projet dans le domaine du bâtiment, Hamza Amrouche (Lead Dev chez les Tilleuls) nous détaille l'implémentation du WorkFlow. Autre nouveauté de ce composant, la possibilité via une commande Symfony de générer un graphique du WorkFlow implémenté.

Dans ce talk nous avons eu le droit également à un rappel rapide sur "la théorie des graphs", nous présentant dans un premier temps les principaux graphs (cyclique, acyclique orienté, non orienté, arbre...) sur lesquels il est possible d'imaginer un WorkFlow.

Messenger : la grande nouveauté

Autre composant, mais cette fois-ci c'est une nouveauté. Il s'agit du composant Messenger.

Ne vous méprenez pas : il ne s'agit pas d'une reprise du fameux service de chat de Microsoft, mais plus d'un système d'échanges de messages (objets) entre deux services, interfaces, applications (à la RabbitMq), implémenté sous forme d'une pile.

Ce composant, maintenu par Symfony Core Team, est disponible uniquement à partir de Symfony 4.2 (il est possible de l'utiliser en mode développement dans la version 4.1). Il fait appel aux notions de Message Bus, Message Handler, Adpater et de Worker pour la gestion des messages de bout en bout d'un échange. Cela permet,  notamment grâce à une commande Symfony, d’envoyer les messages de façon asynchrone afin d’accélérer le processus en background. Seul bémol : la fonctionnalité de gestion des rejets n’est pas encore implémentée, il faudra donc le faire vous-même !

Conclusion  Et comme chaque année, c'est Sarah Khalil (IT Freelancer) qui conclut cette série de conférences officielles avec un retour sur une année de Symfony. L'occasion de revenir sur les accomplissements de l'année écoulée en termes de nouveautés dans l'écosystème Symfony. Elle reprend globalement les annonces faites durant ces 2 jours, et donne plus de détails sur les changements majeurs des composants qui n'ont pas été abordés durant les conférences. Ainsi elle nous a rappelé l’orientation de Symfony 4 vers la facilité de prise en main, la légèreté et la performance.

En tant que développeurs, nous sommes particulièrement sensibles à cette nouvelle orientation, qui va nous permettre de penser différemment nos applications, et de nous concentrer sur notre cœur de métier. C’est devenu une tradition : à la fin de chaque journée une quarantaine de minutes est réservées au principe des Lightning Talks. La parole est ainsi donnée au public, à raison de 7 min par personne (choisie à l'avance sur la base du volontariat).

Le sujet est libre (mais validé par les organisateurs au préalable) pour prendre place au pupitre et exposer un sujet, généralement des produits et services autour de Symfony. Cette édition rend hommage aussi aux contributeurs de l'écosystème Symfony et de l'open source. Ces contributeurs ne sont motivés que par leur passion, ce qui a permis la construction d'un édifice incontournable dans le développement web Symfony.

Pour mettre en valeur leur travail, les membres de SensioLabs sensibilisent sur la bienveillance et le respect lorsqu'il s'agit de faire un feedback ou une critique constructive. Ainsi on peut les remercier à notre niveau grâce au nouveau composant symfony/thanks.

L’ambiance était cette année encore au rendez-vous : bonne humeur, convivialité et échanges sont les mots d’ordre de cette édition 2018. En ce qui concerne les animations et les stands, on a eu la présence des partenaires habituels, à travers des jeux, des démos de leur outils et de nombreux goodies. Les entités de SensioLabs, qui ont déjà de multiples stands (Symfony, BlackFire) ont rajouté cette année un nouveau stand pour la promotion de SensioLab University Learning. Sans oublier bien sur les stands de détente, avec les smoothies, café, yaourt et autres friandises offertes le long des deux jours ! Remerciements Je tiens à remercier l'équipe des leads et développeurs qui ont assisté à cet événement, et qui ont grandement contribué à la rédaction de cet article, Attia Benselama, Anthony Ossent et Mohammed Aagour

Auteur : Abdessamad Benali, Lead Développeur, SQLI Paris