Claude Code CI/CD連携実践——GitHub Actions・Agent Hooks・品質ゲートの構築

Claude CodeはローカルIDEでの対話だけでなく、CI/CDパイプラインに組み込んで自動化の一部として運用できます。本記事では、GitHub Actions連携、Agent Hooks、品質ゲートの実装パターンをまとめます。

結論:CI/CD連携は「無人化」より「品質ゲート」を目的に据える

  • 自動PR作成・自動レビューは既に実運用レベル
  • ただし無人マージは危険。人間の承認ゲートを必ず残す
  • Hooks を使えば Claude Codeの行動を強制的に制御できる(実行前ブロック、実行後通知など)

GitHub Actions との連携

ユースケース1:Issue駆動の自動実装

Issueにラベル(例:claude-implement)を付けると、Claude Codeがタスクを解釈してPRを作成する構成です。

# .github/workflows/auto-execute-task.yml
name: Auto Execute Task
on:
  issues:
    types: [labeled]

jobs:
  execute:
    if: github.event.label.name == 'claude-implement'
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
    steps:
      - uses: actions/checkout@v4
      - name: Run Claude Code
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          npx @anthropic-ai/claude-code \
            --prompt "Issue #${{ github.event.issue.number }} を解決するPRを作成してください" \
            --allowed-tools "Read,Edit,Write,Bash,Grep"

ポイントは --allowed-tools でツール権限を絞ることです。CIではユーザー確認ができないため、危険な操作を明示的に禁止します。

ユースケース2:PRへの自動レビュー

# .github/workflows/auto-review.yml
name: Auto Review
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Review with Claude
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          npx @anthropic-ai/claude-code \
            --prompt "/review-pr ${{ github.event.pull_request.number }}" \
            --allowed-tools "Read,Bash,Grep"

書き込み権限を与えないことで、レビューはするがコード変更はしない安全な運用になります。

Agent Hooks の活用

Hooksは Claude Code のライフサイクルイベントに処理を割り込ませる仕組みで、.claude/settings.json に定義します。

主要なフック種類

フック タイミング 典型用途
PreToolUse ツール実行前 危険操作のブロック、監査ログ
PostToolUse ツール実行後 結果検証、通知
Stop 応答終了時 作業ログ保存、次タスクのトリガー
UserPromptSubmit ユーザー入力送信時 プロンプト変換、前処理

PreToolUse:本番DBへの書き込みをブロック

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/block-prod-db.sh"
          }
        ]
      }
    ]
  }
}
# .claude/hooks/block-prod-db.sh
#!/bin/bash
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')

if echo "$COMMAND" | grep -qE "(DROP|TRUNCATE|DELETE).*prod"; then
  echo '{"decision": "block", "reason": "本番DBへの破壊的操作は禁止"}'
  exit 0
fi
echo '{}'

Claudeが DROP TABLE users を実行しようとしても、シェルレベルで止まるため、事故を構造的に防げます。

PostToolUse:Edit後に自動でテスト実行

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npm test -- --findRelatedTests $(cat | jq -r '.tool_input.file_path')"
          }
        ]
      }
    ]
  }
}

編集対象ファイルに関連するテストのみを実行し、早期失敗を実現します。

Stop:セッション終了時にログ保存

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/log-status.sh --agent orchestrator 'session completed'"
          }
        ]
      }
    ]
  }
}

セッションの成果を時系列で追跡できるようにし、監査・振り返りに活用します。

Monitorツールによる非同期ワークフロー

2026年のアップデートで導入されたMonitorツールは、バックグラウンドプロセスの標準出力を逐次取得する仕組みです。CIの長時間ジョブと相性が良好です。

活用例:ビルド進行を監視しつつ他作業

1. `npm run build`  run_in_background で起動
2. Monitor で標準出力を購読
3. ビルド中に別ファイルのリファクタを並行実施
4. ビルド完了イベントで統合テストを自動起動

ポーリング不要で、完了通知ベースで次のステップに進めるのが大きな利点です。CIではテスト・デプロイ・E2E検証を段階的に直列実行する際に有効です。

品質ゲートの実装例

レイヤー1:静的チェック(必須・高速)

  • Lint(ESLint / Ruff)
  • Format(Prettier / Black)
  • 型チェック(TypeScript / mypy)

レイヤー2:Claude Codeレビュー(必須・中速)

  • 差分に対する自動レビュー(上記 auto-review.yml)
  • セキュリティ観点チェック(シークレット混入、SQLi等)

レイヤー3:テスト(必須・中〜低速)

  • ユニットテスト
  • 統合テスト
  • 関連テストのみ実行で高速化(PostToolUse Hook参照)

レイヤー4:人間レビュー(必須・可変)

  • Claudeの提案を鵜呑みにせず、最終判断は人間
  • レイヤー1〜3を全通過したPRのみレビュアーに回る設計にする

GitHub Branch Protection の設定例

# 必須チェック
- lint
- typecheck
- test
- claude-review
# レビュー要件
- required_approving_review_count: 1
- dismiss_stale_reviews: true

運用のコツ

  • 秘密情報はGitHub Secretsで管理ANTHROPIC_API_KEY は絶対にコード直書きしない
  • CIでは --allowed-tools を厳格化:対話で許可する操作とは別モデルで設計
  • フックは失敗してもワークフローを止めない設計:通知や監査が落ちても本筋の開発が止まらないように
  • Monitor活用で直列化しすぎない:並列化可能な処理は並列化し、CI時間を短縮

まとめ

Claude CodeのCI/CD連携は「全自動化」ではなく「自動化+品質ゲート」の設計が肝要です。GitHub Actionsで自動PR・自動レビューを動かし、Hooksで危険操作をブロックし、最後は人間が承認する。この3層構成を採れば、速度と安全性を両立した開発体制が構築できます。まずは auto-review.yml と PreToolUse の1つから導入してみることをおすすめします。