スタディサプリ Product Team Blog

株式会社リクルートが開発するスタディサプリのプロダクトチームのブログです

Claude Code Action × AWS Bedrock × GitHub Actions self-hosted runnerでAIコーディングAgentを構築してみた

おっす!おら@_a0i!最近でびんだかかーそるだか色々でてくるな!追いつかねーだよ!

とかなんとか言ってる間に出ました、Claude Code Action。

github.com

Claude Code Actionとは?

ClaudeというChatGPTのような生成AIチャットツールがあります。

Claude CodeはClaudeをターミナル上で呼び出すことができ、さらにこのClaude CodeをGitHub Actions上で呼び出せるのがClaude Code Actionです。

Claude Code Actionを使うことでDevinのように自律的にコードを修正してPRを作ってくれるコーディングエージェントが使えるようになります。

具体的な使い方としては以下のようになります。

  • Issueに要件を書いておく
  • Issueコメントに@claudeメンションでコードを書いてもらうよう指示する
  • GitHub Actions(Claude Code Action)が動く

あとはClaude Code Actionが自律的にソースコードを検索・生成し、要件にあったコード修正を行なってくれます。便利!

私たちが普段開発に使っている環境の紹介

  • サービスの基盤のメインはAWSを使っている
  • CIには主にGitHub Actions self-hosted runner(on AWS)を使っている
    • 安い
  • Cursor / GitHub Copilot / Devin を使っている
    • ただし一部制約があり、1人が無制限に全てを使えるという状況ではない

セットアップ手順

公式ドキュメントが丁寧でわかりやすいです。公式ドキュメントにそいつつ、ハマったポイントを紹介します。

誰かの参考になればと思います。

AWSの準備

OIDCを利用する場合のマニフェストの書き方は公式ドキュメントを参照してください。

AWS Bedrockの利用ができるIAM Roleを用意し、GitHub Actionsのマニフェストに以下のように書くだけです。

      - uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: us-east-1
          role-to-assume: arn:aws:iam::11122233344:role/github-actions-bedrock-role

ハマったポイント

Claude Sonnet 4を使いたい!と設定を始めたのですが、以下のように色々と試行錯誤しました。

  • Claude Sonnet 4 を使うには cross-region inference が必要
  • Claude Sonnet 4 は APAC でも使える
  • 会社のセキュリティ基準で APAC はダメで US なら OK
  • Claude Sonnet 4 を US で使うことにした

USリージョンで使うことにしたものの、aws-regionを変えておらず動かない・・・とハマったりもしました。

Claude Code Actionsのセットアップ

公式ドキュメントにGitHub Actionsのマニフェストファイルのサンプルがあるので、参考にします。

name: Claude PR Action 

permissions:
  contents: write
  pull-requests: write
  issues: write
  id-token: write 

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  issues:
    types: [opened, assigned]

jobs:
  claude-pr:
    if: |
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))
    runs-on: ubuntu-latest
    env:
      AWS_REGION: us-west-2
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Generate GitHub App token
        id: app-token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      - name: Configure AWS Credentials (OIDC)
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
          aws-region: us-west-2

      - uses: ./.github/actions/claude-pr-action
        with:
          trigger_phrase: "@claude"
          timeout_minutes: "60"
          github_token: ${{ steps.app-token.outputs.token }}
          use_bedrock: "true"
          model: "us.anthropic.claude-3-7-sonnet-20250219-v1:0"

基本的にこれで問題ありませんが、ハマったところがあるので紹介します。

ハマったポイント①

Bedrock特有のバグ?にハマりました。以下のissueと同じ状況でした。

github.com

      - name: Run Claude PR Action
        uses: anthropics/claude-code-action@beta
        with:
          trigger_phrase: "@claude"
          timeout_minutes: "60"
          github_token: ${{ steps.app-token.outputs.token }}
          use_bedrock: "true"
          model: "us.anthropic.claude-sonnet-4-20250514-v1:0"
        env:
          ANTHROPIC_BEDROCK_BASE_URL: "https://bedrock-runtime.us-east-1.amazonaws.com"

このように ANTHROPIC_BEDROCK_BASE_URL: "https://bedrock-runtime.us-east-1.amazonaws.com" を追加すると動くようになりました。

ハマったポイント②

GitHub MCP Serverが動かずハマりました。

GitHub MCP Serverが動かないとどうなるかというと、Claude Code ActionがGitHubのIssue上にコメントを送ることができなくなります。

結果として↑のスクショのように、なんだかそっけないClaudeになってしまいます。

mcp serverが動かなかったのは私たちがself-hosted runnerで利用しているrunnerがarm64だったことが原因でした。

Claude Code Actionはデフォルトでanthropicがフォークしているgithub-mcp-serverをセットアップしているのですが、こちらのMCP Serverはarm64対応されていませんでした(本家はされています)。

amd64 runnerを利用することで無事動くようになりました。

実際に動かしてみた

おめでとうございます!動くようになりました!ということでこんな感じで動きます。

おわりに:Devinとどう違う?

私たちの特殊な開発環境において、Devinと比較してWebページにアクセスできなかったり開発環境のDBにアクセスできないなどの困りごとがあります。

簡単なセットアップしかしていないため起きている問題もあり、まだまだClaude Code Actionの活躍の幅は未知数といったところでしょうか!

ようやく産声をあげたClaude Code Action、これからみんなで育てていきたいと思います。