フックでチェックを自動化する

Claude Code によるソフトウェア開発

Dani Zysman

AI Curriculum Manager @ DataCamp

手動作業の問題点

recraft: half: 机に向かい疲れた様子で、同じコマンドを何度も手動で実行する開発者

  • フックは Claude が特定のアクションを実行したときに発火します
  • フックは自動実行されるため、繰り返し作業に最適です
  • フックはプロセス内の手順の省略を防ぎます
Claude Code によるソフトウェア開発

フックとは?

  • ツール:
    • ファイルの読み書き
    • コマンドの実行
  • フック:

    • 自動的に実行されるユーザー定義のシェルコマンド
    • .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章の振り返り

機能 呼び出し 一覧 設定パス
Agents @agent-name /agents .claude/agents/name.md
Skills /skill-name /skills .claude/skills/name/SKILL.md
Hooks (自動) /hooks .claude/settings.json
Claude Code によるソフトウェア開発

練習しましょう!

Claude Code によるソフトウェア開発

Preparing Video For Download...