はじめに
最近、Claude Code Actionが話題になっています。
GitHub Actionsを使ってコードレビューを効率化できる便利なツールですが、同じ長いプロンプトを何度もコメント欄に書くと、重要な議論が埋もれてしまいます。
カスタムインストラクションを設定できることを以下の方の発信により知ることができました。
筆者もこの実装をやってみたいと感じており、
そこでこの記事では、以下のような問題を解決する方法をわかりやすく解説します。
- GitHubのコメントに毎回長い指示を書かなくてもいいようにする
- 一つのGitHub Actionで役割ごとに動作を切り替える(フロントエンド、バックエンド、QAなど)
具体的には、「@claude」だけでなく、「@claude_frontend」「@claude_backend」「@claude_qa」など呼び方を変えるだけで、動的にカスタムインストラクションを設定する方法を説明します。
この記事を読めば、コメント1行だけで簡単にレビューの種類を切り替えることができるようになります!
目次
背景とペルソナ
この記事は以下のような方を対象にしています。
項目 | 内容 |
---|---|
ターゲット読者 | GitHub Actionsを日常的に使うフルスタックエンジニア |
課題 | YAMLファイルが役割ごとに肥大化し、管理が難しい |
目的 | コメント1行でレビューの役割を切り替えられるようにする |
アーキテクチャ概要
以下は処理の流れを図で示したものです。
ポイント:
- GitHubの4種類のイベント(Issue、PR、コメント、レビュー)を監視します。
- 正規表現で役割を判定し、対応するプロンプトをMarkdownファイルから読み込みます。
- AWSのBedrock経由でClaudeを呼び出します。
ロジック解説
役割ごとに以下のように設定が変わります。
呼び名 | TRIGGER_PHRASE | CUSTOM_INSTRUCTIONS |
---|---|---|
@claude |
@claude |
なし(デフォルト動作) |
@claude_frontend |
@claude_frontend |
.github/instructions/frontend.md |
@claude_backend |
@claude_backend |
.github/instructions/backend.md |
@claude_qa |
@claude_qa |
.github/instructions/qa.md |
- カスタムインストラクションが空でもエラーにならないため、安全に運用可能です。
- 無駄な起動を防止するため、役割を検出した時だけ実行します。
最終形 YAML 全コード
# ------------------------------------------------------------
# .github/workflows/claude.yml
# Claude Code Action(Bedrock 経由)最終版
# - TRIGGER_PHRASE に応じて CUSTOM_INSTRUCTIONS を動的に切替
# - @claude : 既定の Claude(インストラクションなし)
# - @claude_frontend : フロントエンドレビュー用
# - @claude_backend : バックエンドレビュー用
# - @claude_qa : QA/テスト観点レビュー用
# ------------------------------------------------------------
name: Claude Assistant
################################################################################
# ❶ 対象イベント
################################################################################
on:
issue_comment: # イシュー/PR コメント
types: [created]
pull_request_review_comment: # PR 行内コメント
types: [created]
issues: # イシュー本文
types: [opened, assigned]
pull_request_review: # PR レビュー本文
types: [submitted]
################################################################################
# ❷ ジョブ定義
################################################################################
jobs:
claude-code-action:
# コメント/本文に「@claude」で始まる文字列が含まれる場合のみ実行
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 == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))
runs-on: ubuntu-latest
# ❸ 共通環境変数 ――― AWS / Bedrock
env:
AWS_REGION: ap-northeast-1
ANTHROPIC_BEDROCK_BASE_URL: "https://bedrock-runtime.ap-northeast-1.amazonaws.com"
permissions:
contents: read # ソース参照
pull-requests: read # PR 参照
issues: read # Issue 参照
id-token: write # OIDC 用
steps:
##########################################################################
# 1. ソース取得
##########################################################################
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1 # 履歴最小化で高速化
##########################################################################
# 2. AWS OIDC 認証
##########################################################################
- name: Configure AWS Credentials (OIDC)
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} # 🤫 GitHub Secrets
aws-region: ${{ env.AWS_REGION }}
role-duration-seconds: 3600
role-session-name: GitHubActions${{ github.run_id }}
mask-aws-account-id: true
##########################################################################
# 3. トリガー検出 & インストラクション判定
##########################################################################
- name: Detect trigger and instruction type
id: detect_trigger
shell: bash
env:
# すべてのイベントで「本文」を BODY に格納
BODY: |
${{ github.event.comment.body }}
${{ github.event.review.body }}
${{ github.event.issue.body }}
run: |
# デフォルト値を初期化
echo "HAS_TRIGGER=false" >> $GITHUB_OUTPUT
# @claude_xxx (xxx=frontend/backend/qa…)を抽出
if [[ "$BODY" =~ @claude_([a-zA-Z0-9]+) ]]; then
TYPE="${BASH_REMATCH[1]}"
echo "TRIGGER_PHRASE=@claude_${TYPE}" >> $GITHUB_ENV
echo "INSTRUCTION_PATH=.github/instructions/${TYPE}.md" >> $GITHUB_ENV
echo "HAS_TRIGGER=true" >> $GITHUB_OUTPUT
# プレーン @claude
elif echo "$BODY" | grep -q "@claude"; then
echo "TRIGGER_PHRASE=@claude" >> $GITHUB_ENV
echo "INSTRUCTION_PATH=" >> $GITHUB_ENV
echo "HAS_TRIGGER=true" >> $GITHUB_OUTPUT
fi
##########################################################################
# 4. カスタムインストラクションを環境変数へ取り込み
# - *.md に日本語で詳細プロンプトを記述しておく
##########################################################################
- name: Read custom instructions (if any)
if: steps.detect_trigger.outputs.HAS_TRIGGER == 'true' && env.INSTRUCTION_PATH != ''
shell: bash
run: |
{
echo "CUSTOM_INSTRUCTIONS<<EOF"
cat "$INSTRUCTION_PATH"
echo "EOF"
} >> "$GITHUB_ENV"
##########################################################################
# 5. Claude Code Action 起動
##########################################################################
- name: Run Claude Code Action
if: steps.detect_trigger.outputs.HAS_TRIGGER == 'true'
uses: anthropics/claude-code-action@beta
with:
model: "apac.anthropic.claude-sonnet-4-20250514-v1:0"
use_bedrock: "true"
trigger_phrase: ${{ env.TRIGGER_PHRASE }} # 例)@claude_backend
custom_instructions: ${{ env.CUSTOM_INSTRUCTIONS }} # 空でも OK
処理シーケンス図
実際の処理の流れは以下の通りです。
運用ベストプラクティス
- カスタムインストラクションをGit管理し、変更履歴を追跡。
- プルリクエストのテンプレートに呼び出し方を明記し、チームで共有。
- AWSやClaudeの設定をGitHub Secretsで安全に管理。
- 頻繁な呼び出しを避け、必要な範囲で活用して効率化。
まとめ
- コメント1行で簡単に役割を切り替えられるため、開発の効率が向上します。
- YAMLファイルもシンプルに管理でき、導入・運用が非常に簡単です。
- 空でも安全に運用できる設計なので、初めての方でも安心して導入できます。
ぜひClaude Code Actionを活用し、チームの開発体験を改善しましょう。
会社紹介
株式会社 Mosaica
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。
詳しくは 公式サイト までお気軽にご相談ください。
参考文献