đ«đ· Comment LâIA Agentique Mâa Fait Ressusciter Un âVieuxâ Side Project
Une version anglaise de cet article est disponible ici.
Depuis que jâai commencĂ© Ă travailler (il y a quelques annĂ©es), jâinitie des projets GitLab pour tester des outils, des frameworks, faire des PoCs ou bien crĂ©er des projets dont jâespĂšre fortement les terminer. Spoiler, cela nâarrive jamais !
Jâai cependant un side project un peu diffĂ©rent car il concerne ma vie personnelle et familiale : une application de gestion dâarbre gĂ©nĂ©alogique. Une de mes tantes Ă rĂ©ussi Ă remonter avant 1800 et a rĂ©ussi Ă rassembler 300 personnes.
Pour rĂ©pondre Ă une question quâon mâa dĂ©jĂ posĂ©e plusieurs fois, jâai dĂ©cidĂ© de crĂ©er ce projet pour dĂ©jĂ , mâamuser, tester et apprĂ©hender de nouvelles technologies et, il faut le dire, pour Ă©viter de payer une solution qui, Ă l’Ă©poque, coĂ»tait et nâĂ©tait parfois pas adoptĂ©e Ă mes besoins. Et surtout, je voulais mâamuser et apprendre des choses.
Ce projet est privĂ© car il subit rĂ©guliĂšrement des tests. Câest avec ce projet que jâai pu mâinitier Ă Kubernetes et dĂ©ployer un cluster sur Google Cloud Platform. Est-ce quâil y a un intĂ©rĂȘt Ă avoir cette application utilisĂ©e par 1 ou 2 personnes sur Kubernetes? Clairement non. Lâinstaller sur un Kubernetes sur un Raspberry PI? Non plus mais câest fun.
Bref, en rĂ©sumĂ©, câest un projet perso dont lâarchitecture varie rĂ©guliĂšrement et qui subit mes expĂ©rimentations. Câest dâailleurs elles qui ont clairement complexifiĂ© le projet et qui me font rĂ©guliĂšrement procrastiner quand il sâagit de faire des Ă©volutions.
đ Etat des lieux de mon projet
Ce projet est constitué de plusieurs briques techniques :
-
Au niveau Front end
- un composant Vuejs pour visualiser lâarbre gĂ©nĂ©alogique. Aucune action nâest possible.
- un second composant dĂ©diĂ©e Ă lâadministration de lâarbre, en Vuejs Ă©galement.
-
CÎté back end
- une brique âlegacyâ en Nodejs, constituĂ©e dâune multitude dâendpoints pour rĂ©cupĂ©rer les donnĂ©es des personnes et calculer les coordonnĂ©es des liens entre les personnes.
- un back end en Go pour gĂ©rer les traitements âlourdsâ effectuĂ©s sur toutes les personnes de lâarbre comme le positionnement.
- un back end en Java / Quarkus pour remplacer le legacy en Nodejs et contenant des fonctionnalités plus récentes.
- un second back end en Java / Quarkus, déployé sur Cloud Run, vérifie quotidiennement les anniversaires et envoie des notifications.
CĂŽtĂ© infrastructure, et bien la partie Kubernetes que ce soit sur du âCloudâ et sur un Raspberry Ă©voquĂ©e prĂ©cĂ©demment nâexiste plus. A lâexception du composant de notifications des anniversaires, aucune infrastructure nâest dĂ©ployĂ©e sur le Cloud, Ă©tant le seul utilisateur. Une configuration docker-compose permet de rapidement dĂ©ployer lâapplication en local.
Voici une reprĂ©sentation de lâarchitecture de ce projet.
Comme je le mentionnais au dĂ©but de lâarticle, beaucoup de choix sont volontaires (et pas forcĂ©ment les meilleurs je vous lâaccorde đ). J’interviens sur ce projet de maniĂšre totalement alĂ©atoire et dĂ©pendant du contexte pro et perso et lâinterface de la partie administrateur laisse clairement Ă dĂ©sirer (le CSS et moi ça fait deux) mais :
- Ma famille est notifiée des anniversaires.
- Jâai numĂ©risĂ© une partie du travail de ma tante.
- Le déploiement sur GCP coûte moins de 5 euros par mois.
â Ce sont des objectifs qui me conviennent trĂšs bien et cela explique pourquoi jâinvestis moins de temps dans ce projet.
đĄ LâarrivĂ©e des Environnement de DĂ©veloppement boostĂ© Ă lâIA agentic
LâarrivĂ©e de lâIA et des IDEs boostĂ©s Ă lâIA a Ă©tĂ© pour moi (et pour beaucoup de monde jâimagine) lâopportunitĂ© de les tester et de changer ma maniĂšre de dĂ©velopper. Mon outil de âprĂ©dilectionâ ? Antigravity de Google. En mĂȘme temps, faisant partie des Google Developer Expert, jâai lâopportunitĂ© de recevoir des informations directement par mail ou Google Chat et dâassister Ă des prĂ©sentations. AprĂšs avoir testĂ© dâautres outils comme Cursor ou Claude, je suis restĂ© sur le projet de Google, me convenant le mieux.
Avant sa sortie, jâavais Ă©tĂ© convaincu par IDX qui a Ă©tĂ© repris en Firebase Studio (je vous en parle plus dans cet article https://dev.to/zenika/idx-becames-firebase-studio-be6). Firebase Studio est plus focalisĂ© sur la crĂ©ation de prototypes dâapplication alors quâAntigravity est plus portĂ©, de mon point de vue, sur la poursuite dâun projet en mettant le-la dĂ©veloppeur-euse comme un-une orchestrateur-trice dâagents.
Je suis Ă©galement un grand adepte de GitLab Duo que jâai pu tester sur certains projets. Et le mix GitLab Duo / Antigravity est possible (et trĂšs intĂ©ressant), je vous mets le lien de ce nouvel article https://dev.to/zenika/how-gilab-duo-agent-platform-antigravity-can-collaborate-to-improve-the-quality-of-our-38bm
đ€ La relance de mon side project
Venons Ă lâobjectif de cet article, Ă©voquer le fait quâAntigravity a relancĂ© mon side project. Mon projet Ă©tait fonctionnel et jâajoutais rĂ©guliĂšrement des ailleuls que trouve ma tante. Mes nombreuses tentatives de reprĂ©sentations graphiques impactent lâarchitecture et les nouvelles options me demandaient beaucoup de temps pour adapter les composants back end. AprĂšs quelques annĂ©es Ă ne plus avoir ouvert du JS et des composants Node, lâengouement de faire une migration nâĂ©tait clairement plus lĂ . Jâavais migrĂ© quelques fonctionnalitĂ©s mais il mâen reste encore beaucoup (trop).
Et câest lĂ oĂč je me suis dis quâAntigravity allait mâaider. Je lui confiais souvent des actions purement techniques comme par exemple la migration de la version de Java, la revue de mes fichiers docker-compose ou encore la mise Ă jour de la documentation. Et quand jâai pensĂ© Ă lui demander de reprendre ma merge request (MR) consistant Ă migrer mon composant Node en Quarkus, jâai Ă©tĂ© bluffĂ©. Les skills nâexistaient pas encore et aprĂšs quelques sollicitations dâun agent en mode âplanâ, il a rĂ©ussi Ă me proposer un plan qui tenait la route. AprĂšs lui avoir validĂ© ce plan, je me suis retrouvĂ© avec un composant Quarkus complĂ©tĂ©. Alors bien sĂ»r, jâai dĂ» revoir plusieurs choses, mais cela mâa pris quelques heures alors que cette migration mâaurait pris plusieurs jours Ă le faire Ă la main.
Dans lâeuphorie de cette migration, jâen ai profitĂ© pour lui demander de supprimer le composant Go pour le remplacer par du Quarkus. Le code Ă migrer Ă©tait beaucoup moins important et nâa pas eu besoin de retouche.
Câest pour moi Ă ce niveau oĂč lâIA va pouvoir nous aider et nous accompagner Ă rĂ©aliser des actions qui sont clairement un peu moins âsexyâ Ă faire.
đĄ Discuter avec les agents IA en mode plan permet de sâassurer que votre demande est bien comprise et que la proposition respecte bien vos attentes. Si ce nâest pas le cas, vous pouvez le revoir et lâajuster et ce nâest quâune fois que vous ĂȘtes dâaccord que vous demandez lâexĂ©cution du plan. Câest le principe de lââAI Driven Developmentâ.
đ Un side projet reboostĂ© en quelques semaines
AprĂšs avoir migrĂ© mes deux briques Node et Go, je me retrouve donc avec moins de composants, orientĂ©s dans une âcibleâ technique que je maĂźtrise, Quarkus et Vuejs. Lâapplication est plus simple et pouvoir me concentrer sur des nouvelles fonctionnalitĂ©s amĂšne un coup de boost Ă bosser sur ce projet.
Antigravity mâa Ă©galement aidĂ© Ă revoir et harmoniser la partie graphique de lâinterface administrateur. La dessus, jâavoue clairement que je lui fait totalement confiance quand il me propose des modifications sur le style de mon application. De toute façon, cela ne peut pas ĂȘtre pire que si je le fais de mes propres mains ! đ
Un autre aspect intĂ©ressant, ce sont les longues discussions avec lâagent en mode plan pour essayer de voir comment challenger diffĂ©rents aspects techniques comme lâarchitecture, mĂȘme si elle est trĂšs simple pour permettre dâoptimiser certains aspects ou alors pour rĂ©flĂ©chir sur des pistes dâamĂ©lioration et la mise en place de nouvelles fonctionnalitĂ©s.
Voici lâarchitecture telle quâelle existe actuellement :
DĂ©sormais, ce sont 60% des lignes de code de ce projet qui sont en Java. Je nâai malheureusement pas la statistique avant cette expĂ©rimentation mais NodeJS devait se trouver Ă Ă©galitĂ© avec Java.
đ Les points Ă retenir
LâIA mâa clairement permis dâaccĂ©lĂ©rer le dĂ©veloppement de mon side project sur des tĂąches qui nâavaient pas rĂ©ellement de plus value et qui ne m’intĂ©ressaient peu ou pas. Je ne suis pas bon en front, lâIA mâa aidĂ© Ă amĂ©liorer cette partie et câest quand mĂȘme plus agrĂ©able de travailler et de faire Ă©voluer un produit qui nous plaĂźt directement non? đ Ma motivation a Ă©tĂ© grandement amĂ©liorĂ©e depuis que jâai pu voir ces migrations initiĂ©es il y a un moment se resoudre. Maintenant que je me suis âamusĂ©â techniquement, je vais maintenant me concentrer sur terminer ce projet. Non je dĂ©conne je ne le terminerai jamais đ mais je veux aller jusquâau bout, terminer la mise Ă disposition de lâarbre Ă ma famille et amener des nouvelles fonctionnalitĂ©s comme la gestion de photos.
đĄ Fan de Gemini-cli, le mode plan est dĂ©sormais disponible dans cette version sortie le 11/03 : https://github.com/google-gemini/gemini-cli/discussions/22078