Aller au contenu principal

Biome : pourquoi remplacer ESLint par Rust

L'ère de Node.js pour le tooling touche à sa fin. Découvez Biome, la toolchain Rust qui divise vos temps de CI par 100.
Catégorie

Code quality

Outils, métriques et pratiques pour mesurer et améliorer la qualité du code PHP : analyse statique, refactoring, revue de code.

Lecture
3 min
Niveau
Intermédiaire
août 11 2025
Partager

En ingénierie logicielle, la vitesse de la boucle de feedback est critique. Si un développeur doit attendre 10 secondes pour savoir qu'il a oublié un point-virgule, il perd son productivité. Si la CI prend 4 minutes pour valider le style, le déploiement est ralenti.

Pendant 10 ans, nous avons accepté la lenteur d'ESLint et de Prettier parce que "c'était le standard". Mais ces outils tournent sur Node.js (JavaScript), un langage interprété, single-threaded, mal adapté aux tâches intensives de parsing et d'analyse de code.

Voici Biome. Et c'est un changement de paradigme.

La physique du problème (Rust vs V8)

ESLint doit :

  • Démarrer le runtime Node.js (lourd).
  • Charger des centaines de fichiers JS.
  • Parser votre code en AST.
  • Parcourir cet AST avec du JavaScript.

Biome est écrit en Rust.

  • C'est un binaire natif, compilé, optimisé au niveau machine.
  • Il utilise une architecture parallèle (multi-threading) que Node.js ne peut pas égaler.
  • Il construit l'AST une seule fois pour tout faire (Linter, Formatter, Import Sorter).

Ce n'est pas une optimisation. C'est un changement d'echelle.

L'architecture "Tout-en-un"

Le second problème de l'écosystème JS actuel est la fragmentation. Pour avoir un linting correct, il faut : eslint, prettier, eslint-config-prettier, eslint-plugin-import, eslint-plugin-react...

C'est une maintenance constante pour éviter les conflits de versions.

Biome adopte l'approche inverse : Une seule Toolchain. Le binaire contient tout. La configuration tient en dix lignes dans biome.json :

JSON
{
    "linter": { "enabled": true, "rules": { "recommended": true } },
    "formatter": { "enabled": true, "indentStyle": "space" },
    "organizeImports": { "enabled": true }
}

Plus de débat. Plus de conflit. Ça marche !

Intégration PHP (sans Node.js)

L'argument final pour un développeur Symfony est l'indépendance vis-à-vis de Node. Nous ne voulons pas installer npm et gérer un package.json juste pour du linting.

Grâce au bundle kocal/biome-js-bundle, Biome s'installe via Composer :

Bash
composer require --dev kocal/biome-js-bundle

Cela télécharge le binaire Biome standalone. Vous pouvez désormais vérifier vos assets JS/TS depuis votre pipeline, sans aucune dépendance Node.js sur votre serveur ou votre CI.

Le mot de la fin

L'adoption de Biome n'est pas une question de mode. C'est une question d'efficience. En informatique, quand un outil fait le même travail 100 fois plus vite en consommant 10 fois moins de mémoire, il finit toujours par remplacer l'ancien standard. ESLint a été un excellent serviteur. Mais à l'ère du Rust, il est devenu un goulot d'étranglement.

Poursuivre la lecture

Sélectionné avec soin pour vous.

DX

Castor : un task runner en PHP pour les projets Symfony

Castor permet d'écrire des tâches d'automatisation en PHP au lieu de Bash ou Make. Orchestration Docker, synchronisation de base, QA et déploiement dans un projet Symfony.

8 min de lecture
Symfony

Générer son SEO avec Symfony AI et Gemini

Implémentez la génération automatique de titre, description et mots-clés SEO avec Symfony AI, Gemini et Messenger dans votre administration EasyAdmin

12 min de lecture
Symfony

Construire un système de redirections HTTP complet avec Symfony

Système de redirections HTTP avec Symfony : règles exactes et regex, cache Redis, tracking via Messenger et création automatique lors des changements de slugs

12 min de lecture