Advanced

Maîtriser les Hooks de Claude Code : Formatage automatique, tests automatiques et plus encore

Apprenez à configurer le formatage et les tests automatiques avec les hooks de Claude Code. Inclut des exemples de configuration pratiques et des cas d'utilisation concrets.

Que sont les Hooks ?

Les hooks de Claude Code vous permettent d’exécuter automatiquement des commandes personnalisées avant ou après des actions spécifiques. Vous pouvez configurer le formatage automatique après la sauvegarde de fichiers, l’exécution automatique de tests après des modifications de code, et bien plus encore.

Les hooks sont définis dans .claude/settings.json et exécutent des commandes shell lorsque Claude Code effectue certaines opérations.

Types de Hooks

Claude Code prend en charge les hooks aux points d’événement suivants :

Événement du HookDéclenchement
PreToolUseAvant l’exécution d’un outil
PostToolUseAprès l’exécution d’un outil
NotificationLors de l’envoi d’une notification
StopLorsque Claude Code termine sa réponse

Configuration de base

Les hooks sont définis dans le champ hooks de .claude/settings.json :

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "command": "npx prettier --write \"$CLAUDE_FILE_PATH\""
      }
    ]
  }
}

Structure de la configuration

  • matcher : Un pattern regex qui correspond au nom de l’outil déclenchant le hook
  • command : La commande shell à exécuter

Cas d’utilisation 1 : Formatage automatique

Exécuter automatiquement Prettier après chaque modification de fichier :

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "command": "npx prettier --write \"$CLAUDE_FILE_PATH\""
      }
    ]
  }
}

Avec cette configuration, chaque fois que Claude Code crée ou modifie un fichier, Prettier le formate automatiquement. Le style de code de votre équipe reste cohérent sans aucun effort manuel.

Cas d’utilisation 2 : Linting automatique

Voici comment intégrer la correction automatique d’ESLint :

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "command": "npx eslint --fix \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
      }
    ]
  }
}

Le suffixe || true empêche les erreurs de lint de faire échouer le hook, permettant à Claude Code de continuer le traitement.

Cas d’utilisation 3 : Tests automatiques lors des modifications

Exécuter automatiquement les tests associés après la modification de fichiers et obtenir un retour :

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "command": "npx vitest related \"$CLAUDE_FILE_PATH\" --run 2>&1 | tail -20"
      }
    ]
  }
}

L’option related de Vitest n’exécute que les tests liés au fichier modifié, fournissant un retour bien plus rapide qu’une suite de tests complète.

Cas d’utilisation 4 : Vérification automatique des types

Exécuter la vérification de types TypeScript après les modifications de fichiers :

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "command": "npx tsc --noEmit 2>&1 | head -30"
      }
    ]
  }
}

Cas d’utilisation 5 : Bloquer les commandes dangereuses

Un hook PreToolUse qui empêche l’exécution de commandes risquées :

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf|drop table|git push.*force'; then echo 'BLOQUÉ : Commande dangereuse détectée' >&2; exit 1; fi"
      }
    ]
  }
}

Lorsque le hook se termine avec le code 1, Claude Code annule complètement l’exécution de l’outil.

Cas d’utilisation 6 : Notifications à la fin

Envoyer une notification lorsque Claude Code termine une tâche :

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "command": "notify-send 'Claude Code' 'Tâche terminée' 2>/dev/null; echo 'Terminé'"
      }
    ]
  }
}

Sur macOS, vous pouvez utiliser :

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "command": "osascript -e 'display notification \"Tâche terminée\" with title \"Claude Code\"'"
      }
    ]
  }
}

Combiner plusieurs hooks

Dans les projets réels, combiner plusieurs hooks est l’approche la plus efficace :

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf /'; then exit 1; fi"
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
      },
      {
        "matcher": "Write|Edit",
        "command": "npx eslint --fix \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
      }
    ],
    "Stop": [
      {
        "matcher": "",
        "command": "echo '✓ Tâche terminée'"
      }
    ]
  }
}

Conseils pour écrire des hooks

1. Gardez un temps d’exécution court

Les hooks s’exécutent de manière synchrone, donc les opérations lourdes ralentiront les réponses de Claude Code. Utilisez des options comme related pour limiter la portée des tests, et head ou tail pour réduire la sortie.

2. Gérez les erreurs avec soin

Un hook qui se termine avec une erreur peut perturber le workflow de Claude Code. Utilisez || true et 2>/dev/null pour assurer la stabilité.

3. Utilisez les variables d’environnement

Profitez des variables d’environnement disponibles dans les hooks. $CLAUDE_FILE_PATH vous donne le chemin du fichier en cours de traitement.

Conclusion

Les hooks vous permettent de personnaliser en profondeur le workflow de Claude Code. La combinaison du formatage automatique et des tests automatiques est particulièrement puissante pour maintenir la qualité du code. Commencez par le formatage automatique avec Prettier et développez à partir de là.

#Claude Code #hooks #automation #formatting #testing