Feature Flags en JavaScript : Comment activer des fonctionnalités sans risque ni déploiement
\n\nImaginez : vous avez développé une nouvelle fonctionnalité géniale — une recherche intelligente avec autocomplétion. Le code est prêt, les tests sont passés, mais vous avez peur de déployer cela immédiatement à tous les utilisateurs. Et si un bug survient ? Et si cela ne plaît pas à certains ? Avant, vous seriez resté jusqu'à tard à déployer, puis à faire des rollbacks. Aujourd'hui, il existe une solution élégante — les feature flags (ou feature toggles).
\n\nLes feature flags sont des drapeaux dans le code qui permettent d'activer ou de désactiver des fonctionnalités sans nouveau déploiement. Il suffit de modifier la valeur dans la configuration ou dans l'interface d'administration — et la fonctionnalité s'active ou disparaît. Dans cet article, nous allons voir comment les utiliser en JavaScript, montrer des exemples de code concrets et fournir une checklist pour leur mise en œuvre.
\n\nQue sont les feature flags et pourquoi en a-t-on besoin en JS ?
\n\nLes feature flags (également appelés feature toggles, drapeaux de fonctionnalités) sont de simples constructions conditionnelles qui contrôlent si une nouvelle fonctionnalité est affichée à l'utilisateur ou non. Ils fonctionnent au niveau du code : au lieu de supprimer l'ancien code, vous encapsulez le nouveau dans une vérification de drapeau.
\n\nPourquoi en a-t-on besoin dans les projets JavaScript ?
\n- \n
- Canary release (déploiement canari) — déployez la fonctionnalité sur 5 % des utilisateurs, surveillez les erreurs, puis étendez-la. \n
- Tests A/B — montrez différentes versions de l'interface à différents groupes et comparez les métriques. \n
- Désactivation instantanée — si une fonctionnalité casse la production, vous désactivez simplement le drapeau sans déploiement. \n
- Développement sans branches (trunk-based development) — vous pouvez fusionner du code non terminé, caché derrière un drapeau. \n
Feature flag très simple en JavaScript : exemple
\n\nCommençons par la version la plus basique — un drapeau dans la configuration. Supposons que nous ayons une fonction de recherche et que nous souhaitions activer l'autocomplétion uniquement pour les testeurs.
\n\n// config.js\nconst featureFlags = {\n enableAutocomplete: false, // désactivé par défaut\n enableDarkMode: true\n};\n\n// search.js\nfunction initSearch() {\n if (featureFlags.enableAutocomplete) {\n console.log('Autocomplétion activée');\n loadAutocompleteModule();\n } else {\n console.log('Autocomplétion désactivée');\n loadBasicSearch();\n }\n}\n\n\nModifiez enableAutocomplete à true dans la configuration — et la fonctionnalité est activée. Simple ? Oui. Mais ce n'est que le début. Pour la production, il faut plus — des drapeaux dynamiques, une gestion via API, des tests A/B.
Approche avancée : bibliothèques pour les feature flags
\n\nVous pouvez écrire vos propres solutions pour les drapeaux, mais il est préférable d'utiliser des bibliothèques éprouvées. Voici le top 3 pour JavaScript :
\n\n- \n
- LaunchDarkly — le standard en entreprise. Dispose de SDK pour React, Vue, Node.js. Prend en charge les tests A/B, la segmentation, le déploiement progressif (rollout). \n
- Flagsmith — une alternative open-source. Prend en charge le self-hosted et le cloud. Fonctionne avec n'importe quel framework. \n
- Unleash — une bibliothèque légère et open-source. Idéale pour les petits projets. \n
Exemple avec Unleash :
\n\n// Installation : npm install unleash-client\nconst { initialize } = require('unleash-client');\n\nconst unleash = initialize({\n url: 'https://your-unleash-instance.com/api',\n appName: 'my-js-app',\n environment: 'production',\n customHeaders: { Authorization: 'API-TOKEN' }\n});\n\n// Vérification du drapeau\nconst isEnabled = unleash.isEnabled('new-checkout-flow');\nif (isEnabled) {\n renderNewCheckout();\n} else {\n renderOldCheckout();\n}\n\n\nCes bibliothèques se synchronisent avec le serveur en temps réel. Si vous modifiez un drapeau dans le tableau de bord, le client le récupère en quelques secondes (généralement 30 à 60 secondes, paramétrable).
\n\nFeature flags dans React : Hooks et contexte
\n\nDans les applications React, il est pratique d'utiliser le contexte et des hooks personnalisés. Voici un exemple d'architecture :
\n\n
Blogs
Book Recommendations
Lire aussi