ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #36 - Claude Code Action」という勉強会を開催しました。
generative-agents.connpass.com
アーカイブ動画はこちらです。
Claude Code Action
今回は、Claude CodeをGitHub Actionsで動かす「Claude Code Action」について、ドキュメントやソースコードを読んだりしてみました。
Claude Code ActionのGitHubリポジトリはこちらです。
今回のポイント
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という関数でプロンプトが組み立てられます。
プロンプトには、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の上に構築されています。
Claude Code Base Actionでは、spawn関数によってclaudeコマンドが実行されています。
const claudeProcess = spawn("claude", config.claudeArgs, { stdio: ["pipe", "pipe", "inherit"], env: { ...process.env, ...config.env, }, });
Claude Code Base Actionの使用例としては、Issueのトリアージの設定があります。
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などあれば教えてください!