Créer et configurer un flag LaunchDarkly
Vous utilisez une skill qui vous guidera à travers l'introduction d'un nouveau feature flag dans une codebase. Votre travail consiste à explorer comment les flags sont déjà utilisés dans cette codebase, créer le flag dans LaunchDarkly de façon cohérente, ajouter le code d'évaluation en respectant les patterns existants, et vérifier que tout est correctement intégré.
Prérequis
Cette skill nécessite que le serveur MCP LaunchDarkly hébergé à distance soit configuré dans votre environnement.
Outils MCP requis :
create-flag: créer un nouveau feature flag dans un projetget-flag: vérifier que le flag a été créé correctement
Outils MCP optionnels (améliorent le workflow) :
list-flags: parcourir les flags existants pour comprendre les conventions de nommage et les tagsupdate-flag-settings: mettre à jour les métadonnées du flag (nom, description, tags, statut temporaire/permanent)
Workflow
Étape 1 : Explorer la codebase
Avant de créer quoi que ce soit, comprenez comment cette codebase utilise les feature flags.
-
Trouvez le SDK. Cherchez les imports ou l'initialisation du SDK LaunchDarkly :
- Cherchez
launchdarkly,ldclient,ld-client,LDClientdans les imports - Vérifiez
package.json,requirements.txt,go.mod,Gemfile, ou équivalent pour la dépendance du SDK - Identifiez quel SDK est utilisé (server-side Node, React, Python, Go, Java, etc.)
- Cherchez
-
Trouvez les évaluations de flags existantes. Cherchez les appels de variation pour comprendre les patterns que cette codebase utilise :
- Appels SDK directs :
variation(),boolVariation(),useFlags(), etc. - Patterns wrapper : Cette codebase abstrait-elle les flags derrière un service ou un utilitaire ?
- Définitions de constantes : Les clés de flags sont-elles définies comme constantes quelque part ?
- Voir SDK Evaluation Patterns pour les patterns par langage
- Appels SDK directs :
-
Comprendre les conventions. Regardez les flags existants pour apprendre :
- Convention de nommage : Les clés sont-elles en
kebab-case,snake_case,camelCase? - Organisation : Les clés de flags sont-elles co-localisées avec les features, ou centralisées dans un fichier de constantes ?
- Valeurs par défaut : Quelles valeurs par défaut les évaluations existantes utilisent-elles ?
- Construction du context/utilisateur : Comment cette codebase construit-elle l'objet utilisateur/context passé au SDK ?
- Convention de nommage : Les clés sont-elles en
-
Vérifiez les conventions du projet LaunchDarkly. Optionnellement, utilisez
list-flagspour voir les flags existants :- Quels tags sont couramment utilisés ?
- Les flags sont-ils marqués comme temporaires ou permanents ?
- Quels patterns de nommage existent dans le projet ?
Étape 2 : Déterminer le bon type de flag
En fonction de ce dont l'utilisateur a besoin, choisissez la configuration de flag appropriée. Voir Flag Types and Patterns pour le guide complet.
Décision rapide :
| Intention utilisateur | Type de flag | Variations |
|---|---|---|
| « Activer/désactiver une feature » | boolean |
true / false |
| « Déployer progressivement une feature » | boolean |
true / false |
| « Tester A/B entre options » | multivariate (string) |
Valeurs définies par l'utilisateur |
| « Configurer un seuil numérique » | multivariate (number) |
Valeurs définies par l'utilisateur |
| « Servir différents objets de config » | multivariate (JSON) |
Valeurs définies par l'utilisateur |
Valeurs par défaut à appliquer :
- Définissez
temporary: truesauf si l'utilisateur dit explicitement que c'est un flag permanent/long-term. La plupart des flags sont des release flags qui devraient être nettoyés à terme. - Générez une
keyà partir du nom si non fournie (ex. « New Checkout Flow » ->new-checkout-flow), mais respectez la convention de nommage de la codebase s'il en existe une. - Suggérez des tags pertinents en fonction du domaine de la feature, de l'équipe, ou du contexte mentionné par l'utilisateur.
Étape 3 : Créer le flag dans LaunchDarkly
Utilisez create-flag avec la configuration déterminée à l'étape 2.
Après la création :
- Le flag est créé avec le ciblage désactivé dans tous les environnements.
- Le flag sert la
offVariationà tout le monde jusqu'à ce que le ciblage soit activé. - Rappelez à l'utilisateur qu'il devra utiliser la skill de ciblage de flag pour l'activer et optionnellement mettre en place des règles de déploiement.
Étape 4 : Ajouter l'évaluation du flag au code
Maintenant, ajoutez le code pour évaluer le flag, en respectant les patterns que vous avez trouvés à l'étape 1.
- Utilisez les mêmes patterns SDK que ceux que la codebase utilise déjà. S'il y a un wrapper, utilisez-le. S'il y a des constantes, ajoutez la nouvelle clé au fichier de constantes.
- Utilisez une valeur par défaut appropriée. La valeur par défaut (fallback) dans le code devrait être le comportement « safe » : généralement le comportement existant avant le flag. Cela garantit que la feature reste désactivée si le SDK ne peut pas atteindre LaunchDarkly.
- Ajoutez la logique conditionnelle. Enrobez le nouveau comportement d'une vérification de flag.
- Gérez les deux branches. Assurez-vous que le chemin de code pour chaque variation est clair et complet.
Voir SDK Evaluation Patterns pour les exemples d'implémentation par langage et framework.
Étape 5 : Vérifier
Confirmez que le flag est correctement configuré :
- Le code compile/passe le linting. Lancez l'étape de build ou de lint du projet.
- Le flag existe dans LaunchDarkly. Utilisez
get-flagpour confirmer qu'il a été créé avec la bonne configuration. - Les deux chemins de code fonctionnent. Le chemin flag-off préserve le comportement existant ; le chemin flag-on active la nouvelle feature.
- La valeur par défaut est safe. Si LaunchDarkly est injoignable, le code revient à la valeur par défaut : assurez-vous que c'est le comportement existant/safe.
Mettre à jour les paramètres du flag
Si l'utilisateur veut changer les métadonnées du flag (pas le ciblage), utilisez update-flag-settings. Modifications supportées :
| Modification | Instruction |
|---|---|
| Renommer | {kind: "updateName", value: "New Name"} |
| Mettre à jour la description | {kind: "updateDescription", value: "New description"} |
| Ajouter des tags | {kind: "addTags", values: ["tag1", "tag2"]} |
| Supprimer des tags | {kind: "removeTags", values: ["old-tag"]} |
| Marquer comme temporaire | {kind: "markTemporary"} |
| Marquer comme permanent | {kind: "markPermanent"} |
Plusieurs instructions peuvent être groupées dans un seul appel. Ces modifications sont au niveau du projet, non spécifiques à un environnement.
Important : Les mises à jour de métadonnées (ci-dessus) sont séparées des modifications de ciblage (toggle, déploiement, règles). Si l'utilisateur veut changer qui voit quoi, dirigez-le vers la skill de ciblage de flag.
Contexte important
- Les clés de flags sont immuables. Une fois créée, la clé d'un flag ne peut pas être modifiée. Choisissez soigneusement.
- Les flags commencent DÉSACTIVÉS. La création ne signifie jamais l'activation d'un flag. C'est une mesure de sécurité.
- La valeur par défaut dans le code est votre filet de sécurité. C'est ce qui est servi quand le SDK ne peut pas se connecter à LaunchDarkly. Utilisez toujours le comportement « safe » / existant comme défaut.
- Suivez les conventions de la codebase existante. L'erreur la plus courante est d'introduire un pattern de flag qui ne correspond pas à ce que l'équipe fait déjà. L'étape 1 existe pour prévenir cela.
Références
- Flag Types and Patterns : Boolean vs multivariate, conventions de nommage, meilleures pratiques de configuration
- SDK Evaluation Patterns : Comment évaluer les flags dans chaque SDK, incluant les patterns wrapper courants