MF Blogs 便利ツール
Claude CodeとGitHub Actionsを連携させたCIフローの抽象図

記事

Claude CodeとGitHub ActionsでCIを整える手順

AI生成コードを安全に運用するためのGitHub Actions CI設計。基本のテスト・lint・型チェック・ビルドに加え、公式の`anthropics/claude-code-action`を使ったPRレビュー・自動修正フローまで整理します。

0:00 0:00

Claude Codeで書いたコードを安全に本番投入するには、ローカルでnpm testを流すだけでは不十分です。AIが生成したコードは「ローカルでは通るがCIでは落ちる」「依存追加に気づかない」「テスト不足のまま自信満々にマージ依頼してくる」といった事故が起きやすく、人間レビューだけでは見落としが残ります。GitHub Actionsテスト・lint・型チェック・ビルドの4点を機械的に止める層を作り、その上に公式のanthropics/claude-code-actionを載せれば、AIに「失敗を見て自分で直す」フローまで含めて任せられます。この記事では、その2段構成を実例つきで整理します。

結論:CIは「人間レビュー前のフィルター」として最低4チェック

AI生成コードに対するCIの役割は次の3つです。

  1. 人間レビュー前のノイズ除去:lint・型・テスト失敗で止まるPRはレビューしない
  2. 依存追加・秘密情報・大量差分の検知:Claude Codeが勝手に増やしたものを機械的に弾く
  3. AIに自分のミスを見せる:失敗ログを依頼文に貼り直して再依頼する材料にする

最低限、次の4ジョブをPR時に実行します。

ジョブコマンド例落とす理由
lintnpm run lintスタイル違反・未使用変数
型チェックnpx tsc --noEmitTypeScriptの型崩れ
テストnpm testユニット・結合テスト失敗
ビルドnpm run build本番ビルドだけで出る型/import事故

PR運用全体の前段は「Claude Codeで安全にコミットとPRを作るワークフロー」を参照してください。

ステップ1:最小のCIワークフローを置く

.github/workflows/ci.ymlを次の形で始めます。Node.jsプロジェクトを前提にしますが、コマンドを差し替えれば他言語にも応用できます。

name: CI

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: "npm"
      - run: npm ci
      - run: npm run lint
      - run: npx tsc --noEmit
      - run: npm test
      - run: npm run build

ポイントは次のとおりです。

  • npm ciを使う(npm installpackage-lock.jsonを書き換えるためCIで使わない)
  • 各ステップは独立コマンドとして書く(失敗箇所がログでわかりやすい)
  • node-versionを固定する(AIが勝手にNodeバージョンを上げないため)

このYAML自体をClaude Codeに生成させるときは、依頼文に「lint・型チェック・テスト・ビルドの4ジョブをparallelではなくsequentialで実行する」「npm ciを使う」と明記します。AIは最適化しようとしてparallel構成にしがちですが、初手はsequentialのほうがログが読みやすくなります。

ステップ2:失敗を読みやすくする工夫

AIに「CI失敗ログを見て修正してください」と依頼するとき、ログが整理されていないとコンテキストを浪費します。次を仕込んでおくと効きます。

  • テスト出力に色を付けないFORCE_COLOR=0環境変数を設定。ANSIエスケープが混ざるとAIが読みにくい
  • lint・型チェック・テストを別ステップにする:合体させると失敗の特定に余計な情報がつく
  • ビルド成果物をartifactに保存しない:PR CIではディスクI/Oが増えるだけ。本番デプロイCIだけで保存する

actions/upload-artifactで「失敗時だけログを保存」を入れておくと、AIへの再依頼時にダウンロードして渡せます。

- name: Upload test logs on failure
  if: failure()
  uses: actions/upload-artifact@v4
  with:
    name: test-logs
    path: |
      npm-debug.log
      coverage/

ステップ3:依存追加と秘密情報のチェックを追加する

Claude Codeが勝手に依存を増やしたり、.envを誤コミットしたりする事故を防ぐため、専用ジョブを足します。

  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Detect new dependencies
        run: |
          git diff origin/main -- package.json | grep -E '^\+\s*"' && \
            echo "::warning::package.json に新しい依存が追加されています" || true
      - name: Run gitleaks
        uses: gitleaks/gitleaks-action@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

gitleaksは秘密情報の検出に使えるOSSです。誤コミット対策の3層防御は「Claude Codeに秘密情報を渡さないための実践ルール」で扱っています。

依存追加の検出を「warning」で止めず「error」にしたい場合は、exit 1を返すスクリプトに置き換えます。ただし、最初は警告だけにしてレビューで判断する運用が現実的です。

ステップ4:anthropics/claude-code-actionでAIに自動修正させる

公式のanthropics/claude-code-action(2025年8月リリースのv1)を導入すると、PRコメントに@claude 修正してくださいと書くだけでClaude CodeをGitHub Actions上で起動できます。

導入手順

  1. リポジトリ管理者権限でClaude GitHub Appをインストール
  2. Settings → Secrets and variables → ActionsでANTHROPIC_API_KEYまたはCLAUDE_CODE_OAUTH_TOKENを登録
  3. .github/workflows/claude.ymlを追加

CLAUDE_CODE_OAUTH_TOKENは、ローカルでclaude setup-tokenを実行して生成できる長期トークンで、Pro/Max/Team/Enterpriseプランで使えます。APIキー従量課金を避けたい場合はこちらが楽です。

Claude Code CLIから/install-github-appを実行すると、上記をガイド付きで進められます。

最小ワークフロー例

name: Claude Code

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]

jobs:
  claude:
    if: contains(github.event.comment.body, '@claude')
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
      id-token: write
    steps:
      - uses: actions/checkout@v4
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

PRやIssueのコメントに@claude このテストの失敗を直してくださいと書くと、Claude Codeが該当ブランチで作業し、差分をコミットしてプッシュします。

使いどころと注意

  • 使いどころ:CI失敗の小さな修正、テスト追加、コメント追記、issue triage
  • 使わないほうがいい場面:本番デプロイ系、依存大量追加、mainへの直接push(権限を絞る)
  • コスト:Action実行時間とAnthropic API呼び出しが課金対象。長時間ジョブのタイムアウトを設定する

外部コントリビューターからの@claudeを無条件で受け付けると、APIクレジットを枯らされる可能性があります。if条件にgithub.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER'を入れて、リポジトリメンバーだけに制限します。

ステップ5:失敗ログをローカルClaude Codeに食わせるフロー

@claudeをGitHub上で動かす運用は便利ですが、API課金やコンテキスト制御の柔軟性ではローカルClaude Codeのほうが上です。失敗時に手元で修正させる手順を整えておくと、状況に応じて使い分けられます。

依頼:直近のCI失敗を直してください。

## 失敗ログ
@gh-run-12345.log

## 制約
- 失敗テストだけを修正対象とする
- テストファイル自体は改変しない(実装側で直す)
- 依存は追加しない
- 型と lint も通ること

## 完了条件
- npm run lint, npx tsc --noEmit, npm test, npm run build がローカルですべて通る

GitHub CLIで失敗ログを引いてきて、ファイルとしてClaude Codeに渡します。

gh run view --log-failed > gh-run-12345.log

依頼文の骨格は「Claude Codeに伝わるプロンプトの基本構造」、完了条件の書き方は「Claude Codeの成功率を上げる制約条件と受け入れ条件の作り方」で扱っています。

ステップ6:マージ条件をCIに紐付ける

CIを整えたら、GitHubのBranch protection rulesで「verifyジョブの成功」をマージ条件に設定します。AIがgh pr mergeしようとしても、CIが通っていなければブロックされます。

  • Settings → Branches → Branch protection rules → Add rule
  • Branch name pattern: main
  • Require status checks to pass before merging:verifyを選択
  • Require branches to be up to date before merging:on
  • 管理者のbypassを許可しない(理想)

GitHub CLIを使ったgh pr mergeの運用ルールは「Claude Codeで安全にコミットとPRを作るワークフロー」で扱っています。

よくある失敗パターン

症状原因対処
ローカルで通るのにCIで落ちるNode・OS差・依存lockずれnode-version固定/npm ciactions/setup-nodecache: npm
AIが@claudeに過剰反応トリガー条件が広すぎるifcontains(comment.body, '@claude')に絞る/author_associationチェック
Actionが何度も同じ修正に失敗コンテキストが足りない/指示が曖昧ログを添付し直し、失敗テスト名を明示/2回失敗したらローカルで対応
Secretsがログに出るechoしてデバッグした残骸::add-mask::を使う/set -xを切る
CI実行時間が長いビルドキャッシュなし・テスト並列なしactions/cache/テストランナーの並列分割

チェックリスト

  • lint型チェックテストビルドの4ジョブをPR時に実行している
  • npm ciを使い、node-versionを固定している
  • 失敗時にログをartifactで保存している
  • gitleaks等で秘密情報スキャンを入れている
  • anthropics/claude-code-actionを導入する場合はANTHROPIC_API_KEYまたはCLAUDE_CODE_OAUTH_TOKENをSecretsに登録した
  • @claudeトリガーをリポジトリメンバーに制限している
  • Branch protection rulesでCI成功をマージ条件にしている
  • AIに失敗ログを渡して修正させる依頼文テンプレートを用意した

次に読むおすすめ記事: