YassLab チーム用の Claude Code カスタムアクションです。
» デフォルト設定を見る
» レビュー利用例を見る
» 関連リポジトリを見る
.github/workflows/claude-review.ymlname: Claude Review
on:
issues:
types: [opened]
issue_comment:
types: [created]
pull_request:
types: [opened, synchronize]
pull_request_review:
types: [submitted]
pull_request_review_comment:
types: [created]
jobs:
claude-review:
if: |
(github.event_name == 'issues' && contains(github.event.issue.body, '@claude')) ||
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request' && contains(github.event.pull_request.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude'))
runs-on: ubuntu-latest
# 推奨: 最小限の権限のみ付与
permissions:
contents: read # Repository 内の権限
actions: read # Actionsログへの権限
issues: write # Issueコメントの権限 (id-token で昇格されるため明確化)
pull-requests: write # PR 内コメントの権限 (id-token で昇格されるため明確化)
id-token: write # Claude Code Actions の実行に必要 (昇格する権限を持つ)
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Claude Review
uses: yasslab/claude_review_action@main
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}次の 両方 を満たす場合のみ Claude が動きます。いずれかを満たさない場合は、 コメント等を投稿せずに終了します(Actions のログには警告が残ります)。
- イベントを起こした人が名簿に載っていて、GitHub の数値 ID が一致すること
- 対象の Issue / PR を作成した人が名簿に載っていて ID が一致すること (Dependabot だけは例外。後述)
名簿は action.yml の MEMBER_IDS です。ここが唯一の認可の根拠で、
外部サイトへの問い合わせはありません。
名前ではなく数値 ID で照合しているのは、GitHub のユーザー名が改名なら即座に、退会なら 90 日後に解放され、第三者が取得できるためです。名前だけで判定していると、解放された 名前を取得した第三者が通過してしまいます。数値 ID は不変で再利用されないため、同じ 名前でも ID が違えば別人と判定できます。
2 を課しているのは、この Action が PR のブランチ(fork からの PR を含む)を runner に
チェックアウトし、レビュー中に bundle install などの Ruby コマンドを実行しうるためです。
作成者を確認しないと、メンバーがレビューを依頼した時点で、非メンバーが書いたコードが
runner 上で実行されてしまいます。実行を伴うツールを追加する際は、この前提が
崩れていないか確認してください。
そのため、外部コントリビュータからの PR はレビュー対象外になります。
メンバーが Dependabot の PR にレビューを依頼する運用があるため、作成者としてのみ
許可しています(ID 49699333 も照合)。一方、Dependabot 自身が Claude を起動する
使い方は想定していないため、イベントを起こした人としては拒否されます。
action.yml の MEMBER_IDS に 1 行追加してください。
gh api users/<username> --jq .id大文字小文字は GitHub の正式表記に合わせてください(完全一致で照合します)。 未登録のユーザーは実行できません。 これは意図的な設計で、追加漏れを「動かない」 という形で必ず発覚させるためです。エラーメッセージに追加方法が出ます。
名簿から外すときも、同じく MEMBER_IDS の該当行を編集してください。
なお、Claude が読み込むコメントはメンバーと Dependabot が書いたものだけに絞っています。 非メンバーのコメントが混ざると、そこに書かれた文章を指示として解釈してしまう余地が 残るためです(プロンプトインジェクション)。
@claude に具体的な指示を書けば、その指示に従います。
@claude この PR の N+1 問題を洗い出して、修正案を提示してください
指示を書かずにメンションした場合は、既定のコードレビューを行います。
@claude
@claude review this
いずれの場合も、日本語で回答し、レビューは <details> の折りたたみで整理されます。
コミット・push はできません。 ローカルでファイルを編集して動作を確かめることは できますが、変更はコメント内に差分として提示されます。実装を取り込む場合は、 その差分を手元で適用してください。
Copyright © YassLab.