🦔

【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の状態に依存せず常時動かすことができます。スケジュールに加えて、APIGitHub event(PR・リリース等) をトリガーにできます。
  • ローカル: 自分のマシン上で動きます。ローカルの環境変数やインストール済みコマンドをそのまま使える反面、トリガーは スケジュールのみで、PC が起動かつスリープしておらず、Claude Code Desktop が立ち上がっている間だけ実行されます

今回は ローカル で自作の Skill を定期的に動かしています。

レビュー Tips を社内ツールに自動投稿する仕組み

仕組みは大きく分けて2つの要素から構成されています。

  • Skill: 直近のレビュー内容を読み込み、整理して社内ツールに投稿する
  • Routines(ローカル): 上記 Skill を定期的に呼び出す

Skill の処理の流れ

ざっくりした流れは以下の通りです。

  1. レビューコメントの取得: gh コマンドで、自分が最近書いた PR レビューコメントを取得する
  2. コードの取得: 対象のコード(改善前後の差分や該当箇所)を併せて取得する
  3. 要約・整形: 内容を整理(重複した内容の削除等)し、Tips として読みやすい形式にまとめる
  4. 社内ツールへ投稿: まとめたテキストを社内ツールに投稿する

投稿される内容例

実際に投稿される内容は、以下のような形式です。


コードレビュー Tips(yyyy/mm/dd 分)

before_action で Find ロジックを DRY 化する

複数のアクション(editshowupdatedestroy)で同じ @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の定義は以下のようになっています。

SKILL.md
---
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 .../commentsgh 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