CodeRabbitはAIコードレビューサービスです。コードレビューサービス専門として、コードレビュー品質の高さと多数のカスタマイズ設定が特徴です。
CodeRabbit CLIでは、各種コーディングエージェントと連携してレビュー内容を自動反映できます。しかし、よりコンテキストの多いコードレビューを実行しようと思うと、PRレビューが欠かせません。
そこで、PRのレビューについても自動反映できるコマンドを作ってみました。
コマンドについて
コマンドはこちらのGistで公開しています。
curl -o get_comment.sh https://gist.githubusercontent.com/goofmint/a0815db03c5855e02480cb6531a20437/raw/90e95bace229d761e83483dfc8be902828bc2aea/get_comment.sh
このファイルをパスの通った場所に置いて、実行権限を付与します。
mv get_comment.sh ~/.local/bin/get_comment.sh
chmod +x ~/.local/bin/get_comment.sh
必要なもの
中で使っているのは、以下のコマンドです。
-
ghCLI
GitHubのCLIです。PRコメントの取得に使います。
https://cli.github.com/ -
jq
JSON処理ツールです。PRコメントの解析に使います。
https://stedolan.github.io/jq/
使い方
下準備
PRのコメントを確認し、反映したいものを残します。不要なレビューについては Resolve Conversation をクリックして解決済みにしてください。
コーディングエージェントでの実行
codexやClaude Codeなどのコーディングエージェントで、以下のように実行します。 PRのID には、反映したいPRのIDを指定してください。
PRのレビューコメントを解析して、AI Agents向けの指示に従ってコードを修正してください。
## 引数
PRのIDは 7
## 実行手順:
1. **PRコメント取得**
対象は現在のリポジトリです。get_comment.shのパスはwhichコマンドで確認してください。
```bash
get_comment.sh (PRのID)
```
2. **修正計画チェックリスト表示**
見つかった修正指示を以下の形式でリスト表示:
```
📋 修正予定:
□ ファイルパス: 修正内容の概要
□ ファイルパス: 修正内容の概要
...
```
3. **コード修正実行**
各AI Promptの指示に従って該当ファイルを修正:
- ファイルを読み込み
- 指示内容を解析
- 適切な修正を適用
- ファイルを保存
4. **修正完了レポート**
実施した修正を以下の形式で報告:
```
📋 修正完了レポート:
✅ ファイルパス: 実施した修正内容
✅ ファイルパス: 実施した修正内容
❌ ファイルパス: 修正に失敗した理由(あれば)
```
5. **Git操作**
```bash
git add .
git commit -m "fix: PR #{{PRのID}} のレビューコメントを反映
AI Agents prompts に基づく自動修正"
git push origin $(git rev-parse --abbrev-ref HEAD)
```
6. 不要な作業ファイルを削除 作成した $OUT ファイルは削除して
## 重要な制約:
- 複数ファイルの修正に対応する
- エラーが発生した場合も、可能な限り他の修正を続行する
- 実際にファイルを変更する前に、修正予定の概要を表示する
## 出力形式:
- 各ステップの進行状況を絵文字付きで分かりやすく表示
- 修正前にチェックリスト形式で確認
- 修正後に完了レポートを表示
- エラーがあっても処理を継続し、最終的に結果をまとめて報告
PRコメントの解析から修正・プッシュまでを一貫して実行してください。
get_comment.shの処理
get_comment.shは、 gh CLIを使ってPRコメントを取得し、CodeRabbitのレビューコメントだけを抽出して表示します。実行しているのは、以下のようなGraphQLクエリです。
query($owner:String!, $name:String!, $number:Int!, $cursor:String) {
repository(owner:$owner, name:$name) {
pullRequest(number:$number) {
reviewThreads(first:100, after:$cursor) {
pageInfo { hasNextPage endCursor }
nodes {
isResolved
comments(first:1) {
nodes { url path body }
}
}
}
}
}
}
そして、取得したコメントの中から未解決のものだけを抽出し、CodeRabbitのレビューコメント( <summary>🤖 Prompt for AI Agents</summary> )だけを取得しています。
jq -r '
(.data.repository.pullRequest.reviewThreads.nodes // [])
| map(select(.isResolved == false and (.comments.nodes | length > 0)))
| map(.comments.nodes[0])
| map(select(.body | contains("<summary>🤖 Prompt for AI Agents</summary>")))
| .[]
| [
.url,
(.path // "-"),
(
.body
| (try capture("(?s)<details>\\s*<summary>🤖 Prompt for AI Agents</summary>\\s*(?<content>.*?)\\s*</details>") catch {content:""})
| .content
| gsub("```"; "")
| sub("^\\s+"; "")
| sub("\\s+$"; "")
| gsub("\r";" ")
| gsub("\n";" ")
| gsub("\t";" ")
)
]
| @tsv
実際に実行すると、以下のような出力が得られます。
https://github.com/goofmint/CommunityBook/pull/7#discussion_r2554641015 stamp_book/lib/config/app_config.dart In stamp_book/lib/config/app_config.dart around lines 21 to 36, the current getters return generic store homepages which degrades UX if env vars are missing; change the getters to return nullable String (String?) and return dotenv.env['APP_STORE_URL'] and dotenv.env['GOOGLE_PLAY_URL'] directly (no fallback), then update any callers/UI to handle null (hide or disable download buttons) or validate at startup; this ensures missing configuration is surfaced and prevents sending users to generic store pages.
この出力をAIエージェントに渡すことで、PRレビューコメントに基づいたコード修正が可能になります。
まとめ
今回のスクリプトを用意しておくと、CodeRabbitのPRレビューコメントを自動的にコーディングエージェントに渡して修正できます。都度コピペしなくて済むので、手間が省けます。
ぜひ試してみてください。