「AIエージェントキャッチアップ #36 - Claude Code Action」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #36 - Claude Code Action」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

youtube.com

Claude Code Action

今回は、Claude CodeをGitHub Actionsで動かす「Claude Code Action」について、ドキュメントやソースコードを読んだりしてみました。

Claude Code ActionのGitHubリポジトリはこちらです。

github.com

今回のポイント

Claude Code Actionの概要

Claude Code ActionはAnthropicが公式に提供する、GitHub Actionsのアクションです。

以下のようなワークフローとして活用することができます。

  • IssueやPull Requestで@claudeとメンションされたときに、Claude Codeが応答する
  • Pull Requestを作成したときに、Claude Codeがレビューする

Claude Code Actionの基本的な使い方

Claude Code Actionの導入方法としては、Claude Codeで/install-github-appコマンドを実行するのが簡単です。

すると、GitHub Actionsの設定ファイルが作成されます。

設定が完了したら、IssueやPull Requestで@claudeとメンションすると、Claude Codeが応答します。

設定次第では、Amazon BedrockやGoogle Vertex AIを使用することもできます。

Claude Code Actionの内部実装

Claude Code Actionの内部では、generatePromptという関数でプロンプトが組み立てられます。

該当箇所: https://github.com/anthropics/claude-code-action/blob/41dd0aa695a06b94f18ce26fd851bfd6ed9d8760/src/create-prompt/index.ts#L350

プロンプトには、Claude Codeへの指示に加えて、該当のIssueやPull Requestの内容やコメント、Pull Requestの場合は変更されたファイルなどが含まれます。

公式で作成したプロンプトが公開されているのは参考になりますね。

custom_instructionsとdirect_promptの違い

Claude Code Actionのプロンプトの設定には、「custom_instructions」と「direct_prompt」という2つのパラメータがあります。 この2つの違いがよく分からなかったので、確認してみました。

custom_instructions

custom_instructionsは、システムプロンプトに追加のinstructionsを提供するためのパラメータです。 こちらはよくある設定なので分かりやすいですね。

direct_prompt

direct_promptは、ドキュメントで以下のように説明されています。

Direct prompt for Claude to execute automatically without needing a trigger (for automated workflows)

直訳すると「トリガーを必要とせずにClaudeが自動的に実行するための直接的なプロンプト(自動化されたワークフロー用)」ということになります。 よく分からないですね。

Claude Code Actionの使い方の1つは、IssueやPull Requestで@claudeとメンションされたことをトリガーとして実行することです。 その場合、Claude Codeへの指示はIssueやPull Requestに「@claude 〜してください」のように記載されているはずです。

一方で、「プルリクエストに対して自動でレビューさせたい」「ソースコードに対して自動でドキュメントを更新させたい」といった場合は、@claude 〜してください」という指示なしでClaude Codeを実行したいです。 このような場面でClaude Codeは何をするべきかという指示を設定するのがdirect_promptです。 たとえば、direct_promptに「プルリクエストをレビューしてください」といった指示を書くことになります。

direct_promptの使用例: https://github.com/anthropics/claude-code-action/blob/main/.github/workflows/claude-review.yml

Claude Code Base Action

Claude Code Actionは、Claude Code Base Actionの上に構築されています。

github.com

Claude Code Base Actionでは、spawn関数によってclaudeコマンドが実行されています。

  const claudeProcess = spawn("claude", config.claudeArgs, {
    stdio: ["pipe", "pipe", "inherit"],
    env: {
      ...process.env,
      ...config.env,
    },
  });

コード引用元:https://github.com/anthropics/claude-code-base-action/blob/d6c74411069c14b9c9f1d83fc4681037c57bd1aa/src/run-claude.ts#L148

Claude Code Base Actionの使用例としては、Issueのトリアージの設定があります。

github.com

BaseではないClaude Code Actionでは、IssueやPull Request、変更されたファイルなどがプロンプトに含まれるようになっています。 そのような情報を使わない場合は、Claude Code Base Actionを使う選択肢もある、ということですね。

次回のご案内

以上、今回は「Claude Code Action」をキャッチアップしました。

次回は「AIエージェントキャッチアップ #37 - Container Use / Dagger」ということで、コーディングエージェントにコンテナ環境を与える「Container Use」と、AIエージェントやCI/CDに活用可能なワークフローランタイム「Dagger」がテーマです!

generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!