Ralph は PRD(プロダクト要件定義)を渡すと、AIコーディングエージェント(Claude Code / Amp)を繰り返し起動して、すべてのユーザーストーリーが完了するまで自律的に実装を進めるバッシュスクリプトベースのループオーケストレーターである。
中核は ralph.sh という約150行のシェルスクリプトで、以下を繰り返す:
prd.json から passes: false の最優先ストーリーを1つ選び、実装prd.json の該当ストーリーを passes: true に更新し、progress.txt に学びを追記passes: true になったら <promise>COMPLETE</promise> を返して終了記憶の永続化は、gitの履歴・progress.txt・prd.json の状態によって実現される。各イテレーションは前回の学びを読んでから作業を開始するため、回を重ねるごとに精度が上がる仕組みになっている。
| 比較軸 | 素のClaude Code / Cursor | Devin等の自律エージェント | Ralph |
|---|---|---|---|
| タスク粒度の管理 | 人間が都度指示 | エージェント任せ(粒度ブレやすい) | PRDでストーリー分割済み→1ストーリー/1イテレーションで確実 |
| コンテキスト肥大化 | 長い会話で劣化 | 内部で管理(ブラックボックス) | 毎回フレッシュ起動+progress.txtで必要な学びだけ引き継ぐ |
| 進捗の透明性 | 会話ログに埋もれる | ダッシュボード依存 | prd.jsonのpasses/progress.txtでgit上に全記録 |
| 失敗時の復旧 | 手動やり直し | 再試行コスト高い | ストーリー単位で冪等。落ちても次のイテレーションで再開 |
| ツール非依存 | 特定エディタに縛られる | SaaS縛り | Claude Code / Amp どちらでも動く。シェルスクリプト1本 |
要するに、「AIに長いタスクを一気にやらせると途中で破綻する」問題を、PRDによるタスク分割+フレッシュ起動ループ+学習の蓄積という構造で解決している点が最大の利点である。
┌─────────────────────────────────────────────────┐
│ Phase 1: 準備 │
│ │
│ ① ralph.sh, CLAUDE.md 等をプロジェクトにコピー │
│ (または /plugin marketplace add snarktank/ralph)│
│ │
│ ② /prd スキルで PRD(Markdown)を作成 │
│ → tasks/prd-feature-name.md が生成される │
│ │
│ ③ /ralph スキルで prd.json に変換 │
│ → ストーリーごとに priority, passes: false が付く│
└───────────────────────┬─────────────────────────┘
▼
┌─────────────────────────────────────────────────┐
│ Phase 2: 実行 │
│ │
│ $ ./ralph.sh --tool claude 20 │
│ │
│ → 最大20回のイテレーションが自動で回る │
│ → 各回で1ストーリーを実装→テスト→コミット │
│ → progress.txt に学びが蓄積されていく │
│ → 全ストーリー完了で自動停止 │
└───────────────────────┬─────────────────────────┘
▼
┌─────────────────────────────────────────────────┐
│ Phase 3: 確認 │
│ │
│ ・ブランチ上に機能実装済みのコミット列が並ぶ │
│ ・progress.txt でどのストーリーで何を学んだか確認 │
│ ・通常通り PR を作成してレビュー・マージ │
└─────────────────────────────────────────────────┘
ストーリーの書き方が成否を分ける。「ダッシュボード全体を作れ」は大きすぎて失敗する。「既存ページにフィルタードロップダウンを追加」くらいの粒度が適切。依存関係順(スキーマ→バックエンド→UI)に priority を振ることも重要である。