バイブコーディングがどこまでできるのか、実際にOSSを作りながら試し中です。
一度失敗したのですが、二度目はKiro風のフローで行っています。
- タスクをドキュメントで記載
- 記載した時点で
git push
→gh pr
でPR作成まで行なってもらう - ドキュメントベースでCodeRabbitにレビューしてもらう(自動)
- 指摘事項を反映
- 人(自分)がレビュー、修正
- コーディング
- 終わったら
git push
、自動でCodeRabbitがレビュー - 指摘事項を反映
- 人(自分)がレビュー、マージ
CodeRabbit は 🤖 Prompt for AI Agents
というコメントを付けてくれて、その内容をコーディングエージェントに渡すだけで適切な修正を行ってくれる機能があります。しかし、これを都度コピーしたり、コーディングエージェントに渡すのが手間です(4番、9番のところ)。
そこで、Claude CodeのコマンドでPRの内容を取得、反映するコマンドを作ってみました。
結果
以下の内容を .claude/commands/pr-fix.md
といったファイル名で作成すれば完了です。PR番号は、 2
の手順のときに出力されているので、それをメモしておきます(またはWebで確認)。
name: pr-fix
description: |
PRのレビューコメントから「Prompt for AI Agents」セクションを抽出し、
指摘された内容に従ってコードを修正して自動プッシュする
usage: pr-fix <PR番号>
examples:
- pr-fix 123
- pr-fix 456
prompt: |
PRのレビューコメントを解析して、AI Agents向けの指示に従ってコードを修正してください。
## 実行手順:
1. **PRコメント取得**
```bash
gh api repos/$(gh repo view --json owner,name --jq '.owner.login + "/" + .name')/pulls/{{args.0}}/comments
```
2. **AI Promptsを抽出**
- コメント内の `<summary>🤖 Prompt for AI Agents</summary>` セクションを見つける
- 各セクション内の指示内容を抽出する
- ファイルパスと修正内容をマッピングする
3. **修正計画チェックリスト表示**
見つかった修正指示を以下の形式でリスト表示:
```
📋 修正予定:
□ ファイルパス: 修正内容の概要
□ ファイルパス: 修正内容の概要
...
```
4. **コード修正実行**
各AI Promptの指示に従って該当ファイルを修正:
- ファイルを読み込み
- 指示内容を解析
- 適切な修正を適用
- ファイルを保存
5. **修正完了レポート**
実施した修正を以下の形式で報告:
```
📋 修正完了レポート:
✅ ファイルパス: 実施した修正内容
✅ ファイルパス: 実施した修正内容
❌ ファイルパス: 修正に失敗した理由(あれば)
```
6. **Git操作**
```bash
git add .
git commit -m "fix: PR #{{args.0}} のレビューコメントを反映
AI Agents prompts に基づく自動修正"
git push origin $(git rev-parse --abbrev-ref HEAD)
```
## 重要な制約:
- `<summary>🤖 Prompt for AI Agents</summary>` で始まるセクションのみを処理対象とする
- HTMLの `<details>` タグ内のコンテンツを正しく抽出する
- 複数ファイルの修正に対応する
- エラーが発生した場合も、可能な限り他の修正を続行する
- 実際にファイルを変更する前に、修正予定の概要を表示する
## 出力形式:
- 各ステップの進行状況を絵文字付きで分かりやすく表示
- 修正前にチェックリスト形式で確認
- 修正後に完了レポートを表示
- エラーがあっても処理を継続し、最終的に結果をまとめて報告
PRコメントの解析から修正・プッシュまでを一貫して実行してください。
args:
- name: pr_number
description: 処理対象のPR番号
required: true
dependencies:
- gh
- git
- jq
そうすると、こんな感じで実行できます。
$ pr-fix 109
> /pr-fix is running… 109
⏺ PR #109のレビューコメントを解析して、AI
Agents向けの指示に従って修正を実行します。
⏺ Update Todos
⎿ ☐ PR #109のレビューコメントを取得
☐ AI Promptsセクションを抽出・解析
☐ 修正計画チェックリストを表示
☐ コード修正を実行
☐ 修正完了レポートを表示
☐ Git操作(add, commit, push)
⏺ 📋 PR #109 レビューコメント修正開始
⏺ 🔍 Step 1: PRコメント取得
⏺ Bash(gh api repos/$(gh repo view --json owner,name --jq
'.owner.login + "/" + .name')/pulls/109/comments)
⎿ use v24.0.2
[
{
… +535 lines (ctrl+r to expand)
:
⏺ 📋 Step 3: 修正計画チェックリスト
検出されたAI Promptsに基づく修正予定:
□ .tmp/tasks/storages-openapi-documentation.md (行48-55):
z.instanceof(File) を DOM に依存しない形式に修正し、Node
環境でのランタイムエラーを防ぐ
□ .tmp/tasks/storages-openapi-documentation.md (行156-160): POST
ルートのパスを /v1/storages から /api/v1/storages
に修正してベースパスを統一
□ .tmp/tasks/storages-openapi-documentation.md (行226-229): DELETE
ルートのパスを /v1/storages/{id} から /api/v1/storages/{id}
に修正してベースパスを統一
⏺ Update Todos
⎿ ☒ PR #109のレビューコメントを取得
☒ AI Promptsセクションを抽出・解析
☒ 修正計画チェックリストを表示
☒ コード修正を実行
☐ 修正完了レポートを表示
☐ Git操作(add, commit, push)
⏺ 📋 Step 5: 修正完了レポート
修正が完了しました:
✅ .tmp/tasks/storages-openapi-documentation.md (行48-55):
z.instanceof(File) を z.string() に変更し、Node
環境でのDOMクラス依存を解決
✅ .tmp/tasks/storages-openapi-documentation.md (行156-160): POST
ルートのパスを /v1/storages から /api/v1/storages
に修正してAPIベースパスを統一
✅ .tmp/tasks/storages-openapi-documentation.md (行226-229): DELETE
ルートのパスを /v1/storages/{id} から /api/v1/storages/{id}
に修正してAPIベースパスを統一
⏺ Update Todos
⎿ ☒ PR #109のレビューコメントを取得
☒ AI Promptsセクションを抽出・解析
☒ 修正計画チェックリストを表示
☒ コード修正を実行
☒ 修正完了レポートを表示
☐ Git操作(add, commit, push)
⏺ 🚀 Step 6: Git操作
:
⏺ ✅ 完了
PR #109のレビューコメント修正が正常に完了しました!
実行されたタスク:
1. ✅ PR #109のレビューコメントを取得
2. ✅ AI Promptsセクションを抽出・解析
3. ✅ 修正計画チェックリストを表示
4. ✅ コード修正を実行(3件の修正)
5. ✅ 修正完了レポートを表示
6. ✅ Git操作(add, commit, push)
修正内容:
- DOM依存のz.instanceof(File)をz.string()に変更してNode環境のランタ
イムエラーを解決
- POST/DELETEルートのパスに/apiベースパスを追加してAPIスキーマの一
貫性を確保
変更が feature/storages-openapi-docs ブランチにプッシュされ、PR
#109に反映されました。
段階を踏む場合
CodeRabbitからの指摘をすべて自動反映というのが盲目的すぎるという場合や、事前に反映する内容をチェックする場合には、その指摘事項を .tmp/tasks
内に出力させて、精査した上で処理してもらうのが良いかと思います。
バイブコーディング、色々自動化できて良いんですが、暴走時に怖いので細かい制御が必要ですよね。
まとめ
CodeRabbitの 🤖 Prompt for AI Agents
は、AIエージェント向けに生成された文字列なので、割と適切に修正が行われるかと思います。コメント内容の解釈違いが起きるととんでもな修正に発展しそうですが、今のところなさそうです。
ということで、より自動化して楽するためにも、このコマンドを使ってみてください。