Symfony Live 2015

Nous étions présents au SymfonyLive 2015 qui avait lieu à Paris. Cette édition, célébrant cette année les 10 ans de Symfony, était l’occasion de découvrir des conférences techniques, des retours d’expériences ou encore des présentations d’outils, tous liés de près ou de loin au framework PHP numéro 1 en France. Cette année, les présentations avaient deux formats (10 et 40 min).

Ouverture : 10 ans de Symfony et son avenir

La keynote d’ouverture a été l’occasion pour Fabien Potencier de rappeler quelques anecdotes sur Symfony :

  • l’origine de la syntaxe de “Symfony” (conserver les initiales de Sensio Framework, son nom originel) ;
  • le premier site (un site e-commerce de lingerie) développé avec le framework, encore interne à l’époque, mais jamais payé par le client, donc autant en faire bénéficier la communauté Open Source.
Fabien Potencier à l'ouverture du SymfonyLive 2015

Nous avons aussi eu d’importantes annonces concernant les prochaines versions du framework. Symfony 3.0 est en cours de développement et sera une évolution et non une révolution, bien loin du “drame” du passage de la 1.0 à la 2.0. Toutes les nouvelles fonctionnalités ont en effet été intégrées tout au long des versions 2.X, toujours en préservant la compatibilité d’une version à une autre. Cette nouvelle mouture sera donc principalement l’occasion de supprimer toutes les couches de compatibilités insérées au fur et à mesure du développement des versions 2.X.

La première bêta de Symfony 2.7 sera tagguée le lendemain du SymfonyLive, marquant ainsi son feature-freeze. Cette nouvelle LTS comporte une centaine de nouvelles fonctionnalités ainsi que de nombreuses erreurs de dépréciations permettant d’ores et déjà de nous préparer à la migration de votre application vers la 3.0.

Fabien a également annoncé la sortie d’une version 2.8 en même temps que la 3.0, prévue pour le mois de novembre. Le but avoué est là encore de nous faciliter la migration vers la version 3.0 en permettant aux nouvelles fonctionnalités à venir d’être disponibles en version 2.X. Cette nouvelle version sera également une LTS, prolongeant ainsi le support de Symfony2 jusqu’en 2018. À noter que la première LTS de Symfony 3 sera la 3.2, prévue en novembre 2016 d’après la roadmap.

Concernant PSR-7, Fabien a déclaré que c’était une erreur. Selon lui, HTTP a déjà sa spécification et une implémentation unique devrait être développée plutôt qu’une interface. Il a aussi avoué que Laravel avait réussit à devenir ce qu’il avait essayé d’entreprendre avec Silex. Enfin, Fabien a révélé que la SymfonyCon 2015 aurait lieu les 3 et 4 décembre dans le cadre prestigieux des Folies Bergères.

Mettre en place une API

Nous avons eu droit à plusieurs conférences traitant d’API. Kévin Dunglas nous a présenté le développement d’applications API-centric. Concrètement, cela consiste a développer une partie front (basée sur angular ou react par exemple) qui va consommer une API de la même manière que le fera une application mobile, un client lourd ou un service tiers. Pour cela, Kévin nous a présenté plusieurs outils :

  • REST + Hateoas / Linked Data qui est désormais plutôt bien ancré dans l’industrie ;
  • Le format JSON-LD (Linked Data) basé sur JSON (qui est un standard léger et qui fonctionne partout). JSON-LD est un standard du W3C depuis 2014 et un standard industriel puisque qu’utilisé par Google, Microsoft, GitHub, la BBC, etc ;
  • La librairie PHP Schema qui permet de développer ses entités en la décrivant avec Schema.org. Cela permettra d’exposer une API sémantique sans effort ;
  • Le bundle JsonLdApiBundle qui permet d’exposer ses entités avec un minimum de configuration. Le bundle se veut être une solution clé en main (même si très personnalisable), là où FOSRestBundle est plutôt un ensemble d’outils et ne supporte pas JSON-LD.

Jonathan Petitcolas a effectué une session de live coding qui nous a bluffé par sa simplicité et son efficacité. Il a ainsi présenté 2 outils pour développer une API et une administration en moins 10 min :

  • LemonRestBundle pour générer une API REST plus rapidement qu’avec FOSRestBundle (9 lignes de code) ;
  • ng-admin pour générer une admin basée sur angular et consommant notre API.

Utiliser les logs

Deux conférences traitaient de la mise en place et de l’utilisation des logs pour surveiller son application Symfony. Grégoire Pineau nous a montré comment rendre ses logs intéressants avec Monolog, inclus par défaut dans Symfony. Il ne faut pas hésiter à injecter le logger partout. Pour citer Grégoire, “on log, on log, on log et on log”. Pour faciliter le traitement et le filtrage des logs, on peut aussi créer autant de channels pour les regrouper par thème. Il en existe d’ailleurs plusieurs par défaut (doctrine, event, php, request, etc). Les Processors de Monolog permettent d’enrichir ses logs avec l’URI, l’IP, l’utilisateur connecté, etc.

Olivier Dolbeau a présenté la chasse aux logs avec la stack ELK (pour Elasticsearch Logstash Kibana) qui permet de mieux visualiser ses logs pour être encore plus pro-actif dans la détection, la compréhension et le traitement des erreurs. Concrètement, on envoie ses logs d’accès du serveur web, ceux de l’application Symfony et les syslog dans Logstash. Les logs seront ensuite enregistrés dans Elasticsearch et Kibana sera utilisé pour mettre en place une interface avec des graphiques explicites (courbes d’évolution en temps réel d’un log en fonction de paramètres de son choix, camembert de répartitions des types de logs, etc). A titre d’information, Olivier nous indique que 110 Go de logs sont générés par jour chez BlaBlaCar.

Les deux speakers nous ont aussi précisé l’importance de bien formater les logs applicatifs :

  • Utiliser un message constant (par exemple “user signup” au lieu de “new user toto@example.com”, il sera ainsi bien plus simple de filtrer sur le message ;
  • Passer les variables en contexte. Le 2ème argument des méthodes de l’interface proposé par la PSR-3 est là pour ça :
$logger->info(‘user signup’, [
    ‘email’ => $email,
]);

Débuguer efficacement

Nicolas Grekas nous a parlé des composants Debug et VarDumper, qu’il a respectivement réécrit et développé.

Il nous a expliqué le fonctionnement du composant Debug. Celui-ci fonctionne comme un wrapper pour le système d’autoload, les handlers d’erreurs et d’exceptions. Le but ? Permettre d’afficher une belle page d’erreur pour comprendre rapidement d’où provient une erreur au lieu de perdre du temps avec une page blanche et aucun indice pour la résolution du problème.

Nicolas a également présenter le composant VarDumper, ajouté dans Symfony 2.6. Il permet de débugger une variable, que ce soit dans un script PHP, un template twig et pour un affichage en HTML + JS ou une sortie en ligne de commande. Le composant met à disposition une fonction dump() pour remplacer le bon vieux var_dump(). Ce composant est vraiment très efficace (n’affiche pas l’entity manager lors du dump d’une entité Doctrine par exemple) et très simple d’utilisation. Le debug n’a jamais été aussi simple en PHP !

Moderniser une application

Joris Calabrese et Etienne Broutin ont présenté la migration du back-end de Meetic d’un monolithe à une architecture orientée services basée sur Symfony. Cette migration, toujours en cours, a été l’occasion de mettre en place de nouvelles pratiques comme le BDD (aucun test existant il y a encore 2 ans, plus de 90% de couverture de code aujourd’hui), l’utilisation de Docker pour faciliter le développement et les tests. Ce nouvel environnement leur a permis d’améliorer leur confiance dans les déploiements ainsi que d’augmenter leur nombre : ils sont passés de 2 à 10 déploiements par jour.

Bastien Jaillot (un jolicodeur \o/) et Etienne Samson nous ont présenté un retour d’expérience chez Mediapart. Là aussi, c’est l’histoire d’une application monolithique pleine de bugs et difficilement maintenable. Si le but est également de s’orienter vers une architecture plus cartésienne avec des technos actuelles et basé sur une API, la manière d’y arriver est tout autre. Vu que l’équipe actuelle est noyée sous le nombre de bugs, Etienne nous présente une décision pas facile à prendre : arrêter de fixer les bugs pour éviter de nouvelles régressions et se concentrer sur un nouveau projet front qui piochera dans l’API. Mais comme l’a cité Bastien, « tout logiciel reflète l’organisation qui l’a créée ». Pour éviter un nouveau monolithe, il faut faire attention à la communication interne, recruter des profils spécialisés sur les nouvelles technologies, savoir prendre du recul. Bref, prendre conscience de l’importance du côté humain dans un projet technique. Notre Bastien a d’ailleurs publié un livre sur le sujet.

Bastien et Etienne on Stage

Nouvelles pratiques

Le Pattern View Model a été présenté par Romain Kuzniak. Ce pattern ajoute une nouvelle couche, l’assembleur, pour découpler le domaine de la présentation. Pour cela, l’assembleur est en charge de construire un objet sans logique qui sera utilisé dans les templates à la place des données brutes de notre domaine métier. Le seul inconvénient de ce pattern est qu’il introduit plus de classes. On notera toutefois que le terme de “présentation” ne fait pas forcément référence à un template mais peut aussi être la représentation d’une ressource au sein d’une API.

Jérémy Derussé nous a montré comment Docker peut nous aider lors du développement d’applications Web. Il permet d’utiliser des containers embarquant tous les outils spécifiques au projet (version de PHP spécifique, rabbitmq, postgresql, oracle, etc), pour faciliter l’installation du projet et ne pas polluer la machine du développeur. Il a en outre présenté phpaudit, un container créé par JoliCode facilitant l’analyse statique de votre code PHP. Jérémy a également présenté comment Docker pouvait faciliter l’intégration continue. Il a d’ailleurs parlé de JoliCi (un client d’intégration développé par JoliCode) permettant de lancer vos tests en local sur plusieurs versions de PHP. Enfin, il nous a donné quelques astuces pour accélérer les tests :

  • Docker permet de paralléliser vos tests fonctionnels ;
  • Utiliser des containers docker avec des données pré-chargées, plus rapide à relancer, plutôt que de recharger les fixtures. On peut aussi de tester rapidement ses migrations sur un container chargé avec des données de production

Présentation d’outils

Nous avons aussi eu droit à des présentations d’outils et de bibliothèques. Arnaud Langlade nous a ainsi parlé de Sylius (un ensemble de composant PHP indépendants et de bundles, à l’image de Symfony) mais surtout du SyliusResourceBundle. Ce dernier permet d’exposer des ressources avec une API REST et de mettre en place rapidement des CRUD classiques (index, show, create, update), mais aussi move up and down et gestion des changements d’état.

Une présentation intéressante a été donné par David Buchmann et Jérôme Vieilledent à propos du cache HTTP et plus précisément de FOSHttpCacheBundle et sa gestion du User Context pour maintenir en cache du contenu pour les utilisateurs connectés partageant un même profil de permission. Le contexte est matérialisé par un hash dont la génération pourra être personnalisé suivant vos besoins. Ce hash sera ainsi envoyé par le proxy au serveur Web à la place du cookie.

Nicolas Badey a présenté Elasticsearch et son intégration dans Symfony avec Elastica. Outre la présentation du moteur et de son API RESTful qui permet de créer rapidement un moteur de recherche puissant (et plus performant que SQL avec des index pensés pour optimiser la recherche), Nicolas a expliqué les possibilités offertes pour mettre en place des agrégations et des suggestions. Il a ensuite parler de l’intégration avec Elastica, le client PHP de référence pour Elasticsearch, qui inclus également une couche d’ORM.

Une conférence au sujet de l’injecteur de dépendance de Symfony a été donnée par Adrien Brault. Elle était intéressante mais un peu trop orienté débutant (tout le monde devrait avoir déjà créé un service en développant une application avec Symfony). Elle expliquait en revanche le fonctionnement du composant DependencyInjection, que l’on n’a pas l’habitude de manipuler directement puisque nous utilisation généralement des fichiers de conf. Quelques astuces ont été présentées comme la déclaration de services anonymes.

Enfin, dernière conférence de la journée, Mickaël Andrieu nous a parlé de BackBee, un CMS open source next-gen, basé sur Symfony, Doctrine et HTML5. La promesse du CMS ? Votre front-office est votre back-office. Toute l’édition se fait en manipulant directement le front-office : WYSIWYG, manipulation du layout, drag & drop, etc.

Conclusion

On remarque au travers de cette journée de conférence que le Web évolue vite. De plus en plus de projets s’orientent en effet vers des architecture basées sur des API et des micro-services.

Tout est fait désormais pour faciliter la phase de développement :

  • Docker pour l’installation d’un nouveau projet ;
  • le debug intégré dans Symfony ;
  • de nombreux outils pour générer facilement une API et/ou une administration.

La phase d’exploitation est également choyée :

  • Les logs permettent de suivre le bon fonctionnement de l’application en production, et d’intervenir rapidement pour résoudre les bugs ;
  • Les services d’intégration continue (local ou distant) permettent de valider rapidement le bon fonctionnement avant un déploiement et de maintenir la qualité du projet.

Concernant Symfony, de plus en plus d’outils se basent dessus, en utilisant un ou plusieurs composant ou le framework full stack. Que ce soit des CMS existant comme Drupal, ezSystem, des outils e-commerce tels que Sylius, Thelia, d’autres frameworks comme Laravel, tous ces outils permettent d’agrandir encore la communauté Symfony et d’apporter une nouvelle vision et de nouvelles contributions au framework.

Pour conclure, ce SymfonyLive 2015 était vraiment intéressant avec un nombre de participants record (plus de 700 personnes présentes), des annonces sur les versions à venir de Symfony, des conférences variées et de bonne qualité (même si parfois la durée n’était pas adaptée), l’organisation au top, un super soleil. Un seul bémol, les confs des sponsors, non prévues et pas vraiment intéressantes. Malgré cela, c’était un super événement pour souhaiter un joyeux anniversaire à Symfony !

La team JoliCode

blog comments powered by Disqus