【Claude Code】Routinesで自動でコードレビューTipsを投稿する
この記事は Claude on SonicGarden の記事です。ソニックガーデンのプログラマが、Claude Codeの活用について書いています。#claude_on_sonicgarden
はじめに
新年度になり、新メンバー達の課題のPRレビューをする機会が増えました。レビューはレビュー対象の本人だけでなく他のメンバーにとっても有用なはずですが、PRコメントに書かれた内容は、マージされてしまえば見返されることはほとんどありません。別のメンバーが似た場面に遭遇したときも、同じ指摘を繰り返すことになりがちです。
そこで、Claude Code Desktop の機能を使って、レビューで書いた内容を要約し社内ツールに流す仕組みを作りました。
Routines とは
Routines はスケジュール・API・GitHub event をトリガーに実行できる機能です。Claude Code が扱える処理(プロンプト、Bash コマンド、ファイル編集、Skill の呼び出し、MCP コネクタの利用など)をテンプレート化して、決まった時刻や条件で動かせます。
作成時に実行環境として ローカル と リモート を選択します。
- リモート: クラウド上で動きます。自分のPCの状態に依存せず常時動かすことができます。スケジュールに加えて、APIや GitHub event(PR・リリース等) をトリガーにできます。
- ローカル: 自分のマシン上で動きます。ローカルの環境変数やインストール済みコマンドをそのまま使える反面、トリガーは スケジュールのみで、PC が起動かつスリープしておらず、Claude Code Desktop が立ち上がっている間だけ実行されます。
今回は ローカル で自作の Skill を定期的に動かしています。
レビュー Tips を社内ツールに自動投稿する仕組み
仕組みは大きく分けて2つの要素から構成されています。
- Skill: 直近のレビュー内容を読み込み、整理して社内ツールに投稿する
- Routines(ローカル): 上記 Skill を定期的に呼び出す
Skill の処理の流れ
ざっくりした流れは以下の通りです。
-
レビューコメントの取得:
ghコマンドで、自分が最近書いた PR レビューコメントを取得する - コードの取得: 対象のコード(改善前後の差分や該当箇所)を併せて取得する
- 要約・整形: 内容を整理(重複した内容の削除等)し、Tips として読みやすい形式にまとめる
- 社内ツールへ投稿: まとめたテキストを社内ツールに投稿する
投稿される内容例
実際に投稿される内容は、以下のような形式です。
コードレビュー Tips(yyyy/mm/dd 分)
before_action で Find ロジックを DRY 化する
複数のアクション(edit、show、update、destroy)で同じ @article = Article.find(params[:id]) を書くと重複が生まれます。before_action でまとめると、find の条件を変えたいときに 1 箇所だけ修正すれば済むようになります。
before_action にまとめようか
改善前:
def edit
@article = Article.find(params[:id])
end
def show
@article = Article.find(params[:id])
end
def update
@article = Article.find(params[:id])
# ...
end
改善後:
before_action :set_article, only: %i[edit show update destroy]
def edit; end
def show; end
private
def set_article
@article = Article.find(params[:id])
end
リンク: 当該リポジトリの PR へのリンク
Skill の内容
(一部省略・変更している箇所があります)
Skillの定義は以下のようになっています。
---
name: review-tips-poster
description: PRレビューコメントを収集・分析し、Tipsとして社内ツールに投稿する。
allowed-tools: Bash(gh *), Bash(curl *), Read, Grep
---
# PR レビューコメント Tips 投稿
PR に対し、対象期間(前日。月曜実行時のみ前週金〜日)に書かれたレビューコメントを収集・分析し、本質的に同じ指摘を統合したうえでTipsとして投稿する
引数のシンタックスは↓です。
/review-tips-poster --orgs <Org1,Org2,...> \
--users <User1,User2,...> \
[auto]
orgsでOrganizationを、usersで対象ユーザーを指定しています。また、auto フラグで投稿時の確認の有無を切り替えています。
処理は 4 フェーズ構成です。
- Phase 0: 引数パースと対象コメント期間の決定。基本的には前日分、月曜実行時のみ「金〜日」の3日分
-
Phase 1:
gh search prsで対象ユーザーの 過去14日間のPRを取得 →gh api .../commentsとgh api .../reviewsでレビューコメントとレビュー本文を取得し、Phase 0で決定した対象期間で絞り込み -
Phase 2: 本質的に同じコメントを1 tip にまとめ、
diff_hunkから Before/After のコード例を抽出 - Phase 3: Markdown 整形。
-
Phase 4:
autoフラグ時はユーザー確認を省略し、社内ツールに投稿
Routines の設定
Claude Code Desktop 内で以下のように設定しています。
| 項目 | 設定値 |
|---|---|
| 名前 | review-tips-post |
| 説明 | レビュー Tips を社内ツールにポスト |
| 指示 | 下記コードブロック参照 |
| 権限モード | 自動モード |
| モデル | Claude Sonnet 4.6 |
| フォルダ | (Skill のあるディレクトリ) |
| スケジュール | 平日 14:00 |
今回はただSkillを実行したいだけなので、「指示」欄の中身は↓のみです。
/review-tips-poster スキルを以下の引数で実行する
--orgs <YourOrg1>,<YourOrg2>
--users <member1>,<member2>,<member3>
auto
ローカルを選んだ理由
今回はRoutinesの実行環境に リモート ではなく ローカル を選びました。理由は次の通りです。
gh コマンドが使える
レビュー内容の収集に gh コマンドを使っており、ローカルなら普段の認証済み状態のままそのまま動きます。リモートで動かす場合は別途認証情報を用意する必要があり、その手間を省けるのは大きいです。
環境変数を渡せる
投稿先のトークンや設定値などを、ローカルの環境変数からそのまま渡せます。シークレット管理の仕組みを別途用意しなくて済むのでハードルが下がります。
ローカルの場合の制約とコツ
起動条件
- PC・Claude Code Desktop が起動していないと動かない: PC が起動していて、かつ Claude Code Desktop が起動している間のみ実行されます。PC がスリープ中も実行されません。なお、起動時に 過去 7 日以内の動かなかったものがあれば、最新の 1 回だけ実行してくれます。
パーミッション
- 定期実行の際 Ask モードだと許可待ちで止まってしまいます。今回の場合は自動モードで確認なしで動くよう設定しています。
まとめ
Routines を初めて触ってみましたが、気軽に作れて使用感が良かったです。
同じノリで効率化できるものが他にもありそうなので、色々試してみようと思っています。
Discussion