Checks automatiseren met hooks

Softwareontwikkeling met Claude Code

Dani Zysman

AI Curriculum Manager @ DataCamp

Het handmatige probleem

recraft: half: Een ontwikkelaar aan een bureau, moe, die steeds hetzelfde commando handmatig uitvoert

  • Hooks starten wanneer Claude een specifieke actie uitvoert
  • Hooks draaien automatisch: ideaal voor repetitieve taken
  • Hooks voorkomen dat je stappen overslaat
Softwareontwikkeling met Claude Code

Wat zijn hooks?

  • Tools:
    • Bestanden lezen/schrijven
    • Een commando uitvoeren
  • Hooks:

    • Door de gebruiker gedefinieerde shellcommando's die automatisch draaien
    • Geconfigureerd in .claude/settings.json
    • Zie ze als "if this, then that" voor Claude Code

    Gebruik /hooks om te zien wat actief is

Softwareontwikkeling met Claude Code

Het project tot nu toe

music-analytics-api/
  app.py
  routes.py
  test_routes.py    
  CLAUDE.md
  .claude/
    agents/
    skills/
    settings.json    # <- Hook configuration
Softwareontwikkeling met Claude Code

Hooktypes & workflow

Hook-workflowdiagram

PreToolUse: vuurt vóór de tool draait → Gebruik dit om te inspecteren of gevaarlijke acties te blokkeren

PostToolUse: vuurt nadat de tool klaar is → Gebruik dit om tests, lint-checks of logging te draaien

Softwareontwikkeling met Claude Code

Een hook configureren

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "cd $CLAUDE_PROJECT_DIR && python -m pytest --tb=short -q"
          }
        ]
      }
    ]
  }
}
Softwareontwikkeling met Claude Code

Hook-uitvoer vastleggen

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    passed = len(terminalreporter.stats.get('passed', []))
    failed = len(terminalreporter.stats.get('failed', []))

    if failed:
        title = "pytest FAILED"
        message = f"{failed} failed {passed} passed"
    else:
        title = "pytest PASSED"
        message = f"All {passed} tests passed!"

    with open("/tmp/pytest_results.log", "a") as f:
        f.write(f"{title}: {message}\n")
Softwareontwikkeling met Claude Code

Hook-uitvoerlog

[23:07:35] pytest FAILED: ❌; 2 failed, 15 passed

[23:07:38] pytest PASSED: ✅ All 17 tests passed!

[23:08:09] pytest PASSED: ✅ All 17 tests passed!

[23:08:12] pytest PASSED: ✅ All 17 tests passed!

Softwareontwikkeling met Claude Code

Wanneer hooks gebruiken

Beslisstroomdiagram voor wanneer hooks te gebruiken

  • Goede kandidaten:
    • Tests na bestandswijzigingen
    • Lint-checks
    • Veiligheidsblokkades
Softwareontwikkeling met Claude Code

Hoofdstuk 2 samenvatting

Functie Aanroepen Lijst Config-pad
Agents @agent-name /agents .claude/agents/name.md
Skills /skill-name /skills .claude/skills/name/SKILL.md
Hooks (automatisch) /hooks .claude/settings.json
Softwareontwikkeling met Claude Code

Laten we oefenen!

Softwareontwikkeling met Claude Code

Preparing Video For Download...