Monica v3 arrive avant la fin de 2026. Reconstruite de zéro. Toujours open source. Découvrir ce qui arrive
Monica
Tous les articles
6 min de lecture

Pourquoi Laravel ?

Pourquoi avoir choisi Laravel pour construire ce projet ?

Regis Freyd Fondateur

Note : cet article est technique.

Après avoir lancé Monica sur Hacker News, j'ai reçu beaucoup de questions sur les raisons qui m'ont poussé à écrire l'outil en PHP, et avec Laravel en particulier. J'ai été surpris d'en recevoir autant sur ce sujet, car je considère qu'un langage n'a pas d'importance : seul compte ce que l'on en fait.

Dans cet article je vais expliquer pourquoi j'ai choisi PHP et Laravel, et quelles difficultés j'ai dû surmonter pour construire la première version du produit. Ce texte n'a pas vocation à déclencher une guerre entre langages.

PHP a une histoire intéressante. Beaucoup d'excellents développeurs web, qui n'utilisent probablement plus PHP aujourd'hui, y ont appris les bases de la programmation. Il était si simple à prendre en main et, même sans être un langage élégant, il a ouvert la voie à des carrières dans le web. Puis, avec le temps, PHP a été de moins en moins aimé, au point qu'il devenait presque honteux de l'utiliser ou même de dire en meetup que son entreprise s'en servait. D'autres langages, sans doute plus élégants, ont gagné en popularité (Python, Ruby) grâce à d'excellents frameworks. En parallèle, de nouveaux frameworks PHP sont apparus. Symfony par exemple. Mais Symfony restait difficile à apprendre et à utiliser. Et puis PHP est mort. Du moins c'est ce que l'on disait, en ignorant apparemment qu'énormément d'entreprises l'utilisaient encore et l'appréciaient. Ensuite PHP 5.5 est arrivé, puis PHP 7, et un nouveau framework au nom étrange est apparu : Laravel. Et les mentalités ont complètement changé. PHP n'est toujours pas aussi élégant que d'autres langages populaires, mais les choses se sont beaucoup améliorées. Il est aussi devenu rapide.

Malgré tout, PHP reste le langage que les gens adorent détester, surtout sur Hacker News. On dit qu'il ne passe pas à l'échelle. C'est probablement pour cela que Facebook et Mailchimp, entre autres grands noms, utilisent PHP aujourd'hui, à très grande échelle.

Avec ce contexte en tête, pourquoi ai-je choisi PHP et Laravel ?

  • PHP est simple à apprendre et simple à utiliser.
  • Il y a beaucoup de développeurs PHP, et si des gens veulent travailler avec moi sur le projet, le vivier de développeurs PHP est potentiellement plus large, au moins là où je vis, que celui des développeurs Ruby ou Python. Il y a aussi beaucoup de monde sur GitHub qui utilise PHP, et si je voulais que ce projet open source prenne, je devais l'écrire dans un langage où des personnes de niveaux très variés pourraient contribuer facilement.
  • La chose la plus importante quand on choisit une pile technique pour un nouveau projet, c'est la facilité à le maintenir sur la durée. PHP est simple. Il est facile à déboguer (même si cela pourrait être mieux) et facile à faire grossir (même si ce n'est pas du tout ma préoccupation aujourd'hui).
  • Laravel est de loin le meilleur framework PHP que j'aie utilisé. Il rend les choses complexes très simples. On sent que le framework a été créé pour démarrer de nouvelles applications web très vite, et c'est un vrai plaisir à utiliser. Mais sa fonctionnalité imbattable, c'est la qualité de la documentation, comparée aux autres frameworks PHP et même à beaucoup de frameworks dans d'autres langages. Tout est extrêmement bien documenté. Je ne dirai jamais assez à quel point une bonne documentation compte (ce qui me rappelle que je devrais documenter Monica davantage).
  • Il y a une immense communauté autour de PHP et de Laravel en particulier : Laracasts, Forge, Envoyer, une communauté Slack très active, pour ne citer qu'eux. Si vous avez besoin d'aide, beaucoup de monde est prêt à vous en donner.

Quels défis ai-je rencontrés pendant le développement de ce projet ?

Globalement je n'ai pas eu tant de difficultés en développant la version actuelle de Monica. Ce n'est pas une application complexe, et je n'ai pas de problèmes de montée en charge car la base d'utilisateurs reste modeste (environ 7800 utilisateurs au total, 4300 actifs). Mais certains détails d'implémentation sont mauvais, non par mauvaise pratique, mais parce que mes compétences techniques n'étaient pas suffisantes pour résoudre ces problèmes à court terme. J'espère que lister ces erreurs aidera d'autres personnes à ne pas les commettre, ou que des gens bienveillants m'écriront pour me dire comment j'aurais pu les corriger.

  • Dans les premières versions, j'utilisais beaucoup d'événements et de listeners. Le concept est formidable, mais j'ai eu énormément de mal à tester unitairement les classes de base à cause d'eux. De plus, plus je les utilisais, plus la magie opérait en coulisses. Je me suis dit que les personnes plongeant dans le code auraient du mal à comprendre pourquoi certaines choses se produisaient à la création d'un objet, par exemple. Dans mon esprit, les événements et les listeners rendaient l'application plus difficile à comprendre, alors j'ai décidé de tous les supprimer (enfin, 99 % d'entre eux, il reste deux listeners dont je dois me débarrasser).
  • Au début, la base de données était entièrement chiffrée. Pour des raisons que je n'ai toujours pas comprises, il y avait de temps en temps des bugs dans le déchiffrement, ce qui menait à des données irrécupérables. Comme je ne voulais pas traiter ce problème à ce stade, j'ai décidé de retirer le chiffrement. Par ailleurs, des données chiffrées rendaient impossible tout tri ou toute recherche dans mes requêtes, ce qui aurait posé problème sur la durée. Il existe sûrement des solutions à ces deux problèmes, mais je voulais me concentrer sur de nouvelles fonctionnalités plutôt que sur celui-ci.
  • Je n'ai pas écrit de tests unitaires avant de lancer l'application. Cela m'a vraiment coûté cher. Je ne pense pas qu'il faille viser 100 % de couverture, mais il faut au moins des tests pour les fonctionnalités principales de son site. Sinon on se retrouve avec une tonne de bugs auxquels on n'avait pas pensé et, en essayant de les corriger, d'autres parties de l'application sont touchées par le correctif. Cela devient vite un cauchemar. Laravel rend les tests unitaires très faciles : j'aurais dû prendre cela plus au sérieux. À partir de la prochaine version, aucune pull request ne sera fusionnée sans tests unitaires, voire sans tests fonctionnels.

Conclusion

Voilà quelques raisons pour lesquelles j'ai choisi Laravel. Comme je le disais au début, votre projet ne se résume pas au langage. À moins que votre projet ne soit précisément d'apprendre un nouveau langage, vous ne devriez pas passer des semaines à choisir un langage ou un framework. Restez sur ce que vous connaissez et construisez quelque chose. Vos utilisateurs se moquent que votre code soit laid ou que vous ayez choisi Python plutôt que Ruby.

À lire ensuite

2017-07-04 Monica 0.3.0 avec les tags

La version 0.3.0 permet d'organiser vos contacts avec des tags.

2017-07-13 Monica 0.4.0 avec les appels téléphoniques

La version 0.4.0 permet de garder une trace de vos appels téléphoniques.