Tự động hóa kiểm tra với Hooks

Phát triển phần mềm với Claude Code

Dani Zysman

AI Curriculum Manager @ DataCamp

Vấn đề khi làm thủ công

recraft: half: Một lập trình viên ngồi bàn làm việc, mệt mỏi vì phải chạy đi chạy lại cùng một lệnh thủ công

  • Hook kích hoạt khi Claude chạy một hành động cụ thể
  • Hook chạy tự động: rất hợp cho tác vụ lặp lại
  • Hook ngăn bỏ qua các bước trong quy trình
Phát triển phần mềm với Claude Code

Hook là gì?

  • Công cụ:
    • Đọc/ghi tệp
    • Chạy lệnh
  • Hooks:

    • Lệnh shell do người dùng định nghĩa chạy tự động
    • Cấu hình trong .claude/settings.json
    • Hãy coi chúng như "nếu cái này, thì cái kia" cho Claude Code

    Dùng /hooks để liệt kê những gì đang hoạt động

Phát triển phần mềm với Claude Code

Dự án đến hiện tại

music-analytics-api/
  app.py
  routes.py
  test_routes.py    
  CLAUDE.md
  .claude/
    agents/
    skills/
    settings.json    # <- Hook configuration
Phát triển phần mềm với Claude Code

Loại Hook & Quy trình

Sơ đồ quy trình hook

PreToolUse: kích hoạt trước khi công cụ chạy → Dùng để kiểm tra hoặc chặn thao tác nguy hiểm

PostToolUse: kích hoạt sau khi công cụ hoàn tất → Dùng để chạy test, lint, hoặc ghi log

Phát triển phần mềm với Claude Code

Cấu hình một Hook

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "cd $CLAUDE_PROJECT_DIR && python -m pytest --tb=short -q"
          }
        ]
      }
    ]
  }
}
Phát triển phần mềm với Claude Code

Ghi nhận đầu ra của Hook

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")
Phát triển phần mềm với Claude Code

Log đầu ra của Hook

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

Phát triển phần mềm với Claude Code

Khi nào nên dùng Hooks

Lưu đồ quyết định khi nào dùng hooks

  • Tình huống phù hợp:
    • Chạy test sau khi sửa tệp
    • Kiểm tra lint
    • Chặn thao tác nguy hiểm
Phát triển phần mềm với Claude Code

Tóm tắt Chương 2

Tính năng Gọi Liệt kê Đường dẫn cấu hình
Agents @agent-name /agents .claude/agents/name.md
Skills /skill-name /skills .claude/skills/name/SKILL.md
Hooks (tự động) /hooks .claude/settings.json
Phát triển phần mềm với Claude Code

Cùng luyện tập nào!

Phát triển phần mềm với Claude Code

Preparing Video For Download...