En route vers le SdZv4
Le Site du Zéro a maintenant 10 ans. Les choses ont beaucoup évolué depuis 1999 sur le Web : on ne conçoit plus du tout des sites web de la même manière. J'ai eu la chance d'observer cette évolution au fil des années et d'en faire profiter progressivement le Site du Zéro.
Que de changements entre la toute première version en HTML 4 lancée un après-midi alors au collège, et l'actuelle version 3 qui sert de base à un site fréquenté par 2 millions de visiteurs uniques par mois ! L'évolution majeure du site, comme certains d'entre vous le savent sûrement, est arrivée avec cette fameuse "v3" qui a été développée en grande partie par Pierre Dubuc (karamilo) aujourd'hui mon associé, ainsi que d'autres personnes qui y ont participé de près ou de loin et qu'on n'oublie pas : winzou, Duael, IAN, Venom, zaz et bien d'autres.Depuis le lancement de la version 3 en novembre 2005 (lors d'un après-midi pluvieux depuis un appartement miteux à Londres), le site n'a jamais cessé d'évoluer bien au contraire. Les modules du site se sont sans cesse développés, ont été améliorés, transformés, et il en est allé de même pour le design du site. Ce sont pour la plupart des évolutions réalisées par une poignée de bénévoles courageux (que nous ne remercierons jamais assez) mais aussi depuis 2 ans par les développeurs en stage chez Simple IT ainsi que par Romain qui est notre premier développeur salarié depuis fin novembre 2009.Bref, comme vous le voyez, tout ceci a une longue histoire et les choses se sont accélérées pour nous récemment. A tel point qu'il y a généralement 2 à 3 développeurs en continu sur le site (ce qui reste très inférieur à nos besoins, mais cela va évoluer). Or, le travail en commun avec différentes façons de développer finit par montrer progressivement ses limites.
Le SdZ-framework de la v3
C'est Pierre qui a posé les bases du framework actuel dès 2003 (le lancement de la v3 ayant pris 2 ans à l'époque). Sa structure MVC et sa conception intelligente qui se focalise sur les performances ont permis au site de supporter l'évolution fulgurante du site ces dernières années. Nous sommes en effet passés de 3-4000 visiteurs / jour à 70 000 visiteurs / jour, toujours avec le même framework de base. Parvenir à supporter 2 millions de visiteurs par mois avec seulement 2 serveurs en pratique (un frontal web et un sql) tient parfois du miracle, mais c'est pourtant ce que nous faisons.Or, le monde du Web a évolué rapidement et on entend parler notamment des framework RAD (Rapid Application Development) que sont :
- Ruby on Rails (un des pionniers)
- Django
- Symfony
- CakePHP
- etc.
Ces frameworks font la même chose que notre framework actuel : ils gèrent toute la base du site et délèguent les tâches spécifiques à des modules. Ils ont comme particularité d'être plus lourds et plus lents en général car ils rajoutent plusieurs couches d'abstraction, ce qui fait qu'on peut dire sans prendre trop de risques que le sdzframework est pour nous le plus rapide. Normal, il est spécifiquement adapté au SdZ.Cependant, tous ces frameworks ont aussi de nombreux points forts pour lesquels le sdz-framework a clairement un train de retard. Parmi eux, les bonnes pratiques de développement tels que les tests unitaires et fonctionnels, des outils avancés de débuggage, des systèmes relationnel-objet (ORM), des systèmes de migration de données, de tâches, l'intégration native d'outils Javascript et AJAX, etc.Si nous avons implémenté progressivement une partie de ces choses-là au fil du temps, le tout manque de cohérence par rapport aux frameworks connus. Il faut aussi compter le temps de formation des nouveaux stagiaires et employés à notre framework qui n'est pas toujours évident à comprendre au début. Et, bien que ce ne soit pas un prérequis, notre framework actuel n'est pas orienté objet et ne peut pas bénéficier de fonctionnalités telle que l'héritage (je rappelle que la v3 a été développée à l'époque de PHP 4, donc toute POO était exclue).
Evoluer vers une v4 pour plus de clarté
Nous ne fonçons pas forcément dans un mur avec la v3 maintenant, mais il est clair que si un jour nous arrivons à une dizaine de développeurs dans nos locaux voire plus (ce qui est probable), il risque d'être un peu tard pour se rendre compte que nos outils deviennent trop limités ou trop délicats à maintenir.Nous avons donc entamé il y a quelques mois un début de réflexion autour de la possibilité de faire évoluer le site et de le porter sous un framework connu. Les intérêts de passer à ce type de framework open-source sont nombreux :
- Il ne sera plus nécessaire de maintenir les fonctionnalités de base du site (système de sessions, de comptes, de cache, de requêtes ajax) et on pourra se concentrer sur ce qui est spécifique au site et donc faire évoluer plus rapidement le site.
- Le framework étant connu et particulièrement documenté, nous n'aurons pas à maintenir de documentation propre au framework.
- Par conséquent, la durée de formation des nouveaux développeurs sera réduite et nous pourrons annoncer dans nos offres de stage / emploi qu'il est nécessaire de connaître Symfony.
- On disposera d'outils puissants pour retracer les erreurs et même les anticiper, ce qui limitera considérablement les risques de régression.
L'idée centrale est de se concentrer sur ce qu'on appelle le métier, c'est-à-dire sur ce qui est propre au site, tout en se reposant sur une architecture solide en laquelle nous avons confiance.Quand vous décorez l'intérieur de votre maison, vous n'avez pas besoin de penser à la charge que doivent supporter les murs porteurs ou à la meilleure façon de plâtrer du béton ? Eh bien avec un site web, c'est exactement la même chose. On préfère passer du temps à aménager l'intérieur plutôt qu'à se préoccuper de choses qui ne sont pas notre métier. ;o)
Pourquoi Symfony ?
Les frameworks de qualité sont nombreux, j'en ai cité quelques-uns plus haut. Il fallait faire un choix là-dedans, en considérant :
- La "facilité" de migration (toute relative car ça reste complexe)
- La communauté et la pérennité du projet
- Son caractère open-source, un élément indispensable à nos yeux pour pouvoir "hacker" le framework au besoin et probablement proposer des retours pour l'améliorer.
Les frameworks tels que Ruby on Rails et Django ont donc été exclus d'office, car ils sont basés sur d'autres langages (Ruby et Python) ce qui aurait demandé une charge de travail beaucoup trop importante.Parmi les frameworks PHP, c'est Symfony que nous avons retenu pour la qualité de sa documentation, son tutoriel Jobeet (et nous on aime ça les bons tutos !), sa pérennité (le projet est activement développé et maintenu) et ses références (Dailymotion est en train de passer à Symfony, forcément ça motive et ça encourage !).
La (très) délicate migration
Il ne suffit pas d'avoir la volonté, il faut encore s'organiser. A ce titre, j'ai eu la chance de rencontrer le génial vincent1870 (pardon pour tes chevilles vincent) qui est un des principaux développeurs du site des zCorrecteurs. Il se trouve qu'il s'intéresse beaucoup à Symfony et qu'il a depuis quelques temps une bonne vue d'ensemble du sdzframework. Il a ces derniers temps fait un travail remarquable pour adapter Symfony à nos besoins, trouver une méthode de migration réaliste et progressive et documenter cette méthode. Depuis peu, Romain l'a rejoint pour l'aider à adapter certaines sections spécifiques tels que les crons.Beaucoup de choses ont déjà été faites sur une branche Git de développement du site. A l'heure actuelle, nous arrivons à poser les premières bases de Symfony et à le coupler au sdzframework. En effet, il est inconcevable de geler le développement du site pendant qu'on le porte vers Symfony (ce qui représente beaucoup de travail). Nous allons donc le faire module par module, progressivement, en gelant les modules un à un.La migration vers Symfony prendra forcément du temps, on l'estime entre 8 et 12 mois, ce qui est conséquent. Nous pensons mettre en production les premières bases vers la fin de ce mois-ci. Le SdZ semblera être exactement le même, si ce n'est que c'est Symfony qui traitera la requête et qui la routera soit vers l'ancien framework si le module n'a pas été porté, soit vers Symfony lui-même si celui-ci a été porté. Un des premiers modules à être porté devrait être le livre d'or (choisi en raison de son extrême simplicité :-° ).
Quels changements ?
Pour les visiteurs, il n'y aura aucun changement au début (à part peut-être quelques curieux bugs de temps en temps, on ne pourra pas y échapper ^^ ). A terme, ils verront de nouvelles fonctionnalités plus régulièrement, le tout sera plus cohérent et il y aura moins de bugs.Pour les développeurs, le changement sera énorme au niveau de la structure du code. A terme, le développement du site devrait être beaucoup plus rapide, beaucoup plus facile et beaucoup plus sûr. Mais nous n'en sommes pas encore là. ;o)

