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つから導入してみることをおすすめします。