Автоматизация проверок с помощью хуков

Разработка программного обеспечения с Claude Code

Dani Zysman

AI Curriculum Manager @ DataCamp

Проблема ручного процесса

recraft: half: Уставший разработчик за столом, вручную запускающий одну и ту же команду снова и снова

  • Хуки запускаются, когда Claude выполняет определённое действие
  • Хуки работают автоматически — удобно для повторяющихся задач
  • Хуки не позволяют пропускать шаги процесса
Разработка программного обеспечения с Claude Code

Что такое хуки?

  • Инструменты:
    • Чтение/запись файлов
    • Выполнение команды
  • Хуки:

    • Пользовательские shell-команды, которые выполняются автоматически
    • Настраиваются в .claude/settings.json
    • Это как «если это, то то» для Claude Code

    Используйте /hooks, чтобы увидеть список активных хуков

Разработка программного обеспечения с Claude Code

Проект на данный момент

music-analytics-api/
  app.py
  routes.py
  test_routes.py    
  CLAUDE.md
  .claude/
    agents/
    skills/
    settings.json    # <- Hook configuration
Разработка программного обеспечения с Claude Code

Типы хуков и рабочий процесс

Схема работы хуков

PreToolUse: срабатывает перед запуском инструмента → используйте для проверки или блокировки опасных операций

PostToolUse: срабатывает после завершения работы инструмента → используйте для запуска тестов, проверок линтера или логирования результатов

Разработка программного обеспечения с Claude Code

Настройка хука

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "cd $CLAUDE_PROJECT_DIR && python -m pytest --tb=short -q"
          }
        ]
      }
    ]
  }
}
Разработка программного обеспечения с Claude Code

Получение вывода хука

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")
Разработка программного обеспечения с Claude Code

Лог вывода хука

[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!

Разработка программного обеспечения с Claude Code

Когда использовать хуки

Схема принятия решения: когда использовать хуки

  • Подходит для:
    • Тестов после изменения файлов
    • Проверок линтером
    • Блокировки опасных действий
Разработка программного обеспечения с Claude Code

Итоги главы 2

Функция Вызов Список Путь конфигурации
Агенты @agent-name /agents .claude/agents/name.md
Навыки /skill-name /skills .claude/skills/name/SKILL.md
Хуки (автоматически) /hooks .claude/settings.json
Разработка программного обеспечения с Claude Code

Давайте потренируемся!

Разработка программного обеспечения с Claude Code

Preparing Video For Download...