RepoRipple について
RepoRippleは、エンジニアやコーディングエージェント向けのローカル優先型変更影響分析ツールです。リポジトリの依存関係をたどってGitの変更範囲や関連テストを示し、決定論的な分析結果をレビュー用レポートにまとめます。
主な機能
- 01ソースと設定の依存グラフを作成
- 02変更の逆依存関係を追跡
- 03関連テストを推奨しリスクを評価
- 04MarkdownまたはJSONレポートを生成
- 05CLIとGitHub Actionを提供
活用シーン
- 01マージ前に変更の影響を評価
- 02CIでリスク基準を設定
- 03コーディングエージェントに構造化情報を渡す
MCP 対応
ローカルの読み取り専用MCPサーバーとして、提案された編集を調べる`forecast_change`と、実際のGit変更を調べる`analyze_worktree`を提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| max_depth | integer | いいえ | 逆依存関係をたどる最大深度。 |
| repository | string | いいえ | サーバーで許可されたルートからの相対パスで指定するリポジトリディレクトリ。絶対パスは、そのルート内に収まる場合にのみ受け付けられます。 |
| changed_files | array | はい | 変更が見込まれるリポジトリ相対パスのファイル。 |
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
RepoRipple
マージする前に、コード変更が何に影響するかを把握しましょう。
RepoRipple は、エンジニアやコーディングエージェント向けのローカルファーストな変更影響分析ツールです。リポジトリから軽量な依存関係グラフを構築し、現在の Git 差分を読み取り、逆方向の依存関係をたどって関連するテストを推奨し、レビューにすぐ使える Markdown または JSON レポートを生成します。
決定論的な分析には、API キー、ホステッドサービス、ソースコードのアップロード、フレームワークとの統合は必要ありません。明示的に要求した場合は、オプションの OpenRouter による説明機能で、匿名化された根拠を短い説明文にまとめられます。基礎となる分析結果は変わりません。
PyPI · ポートフォリオの事例紹介 · MCP のセットアップ · v0.4.0 リリース

RepoRipple を使う理由
コードグラフは、リポジトリ内のつながりを説明します。RepoRipple は、そのグラフを目の前の変更に適用します。
- 変更したコードに依存しているファイルはどれですか?
- 影響範囲はどこまで広がりますか?
- 特に関連性の高いテストはどれですか?
- 認証、決済、デプロイなど、機密性の高い領域に手を加えましたか?
- 追加レビューのために、このプルリクエストをブロックすべきですか?
- コーディングエージェントにどのような構造化コンテキストを渡すべきですか?
インストールと実行
pip install reporipple
# Analyze staged, unstaged, and untracked changes.
reporipple .
# Compare a feature branch with main.
reporipple . --base origin/main
# Generate machine-readable context for an agent or automation.
reporipple . --base origin/main --format json --output impact.json
# Fail CI when a change reaches high risk.
reporipple . --base origin/main --fail-on high
# Audit the exact anonymized OpenRouter request without sending it.
reporipple . --base origin/main --explain-preview
インストールせずに一度実行するには、次のとおりです。
uvx reporipple . --base origin/main
3 つの提供形態
| 提供形態 | 最適な用途 | 出力 |
|---|---|---|
| CLI | ローカルレビュー、スクリプト、CI ゲート | Markdown または JSON の影響レポート |
| GitHub Action | プルリクエストの根拠資料とリスクしきい値 | ジョブのサマリー、アーティファクト、オプションの固定 PR コメント |
| MCP サーバー | Codex、OpenCode、Cursor、Claude Code、VS Code | 型付きの forecast_change ツールと analyze_worktree ツール |
GitHub Action
RepoRipple をプルリクエストのワークフローに追加すると、Markdown と JSON の影響レポートを生成し、Markdown レポートを GitHub のジョブサマリーに追記できます。
name: RepoRipple
on:
pull_request:
permissions:
contents: read
jobs:
impact:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
fetch-depth: 0
persist-credentials: false
- id: reporipple
uses: adiarora06/RepoRipple@6253b03f91e46c2f38fb2e05958dbc174d6a08d7 # v0.4.0
with:
base: ${{ github.event.pull_request.base.sha }}
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: reporipple-impact
path: |
${{ steps.reporipple.outputs.markdown-report }}
${{ steps.reporipple.outputs.json-report }}
この Action は path、base、max-depth、fail-on、reports-directory を受け付けます。markdown-report、json-report、risk-level を出力します。再現可能なビルドにするには、RepoRipple をリリースコミット SHA に固定し、指定したベースリビジョンを利用できるように fetch-depth: 0 を使用してください。
このリポジトリ独自のプルリクエストワークフローでは、フォークに対応したコメント設計を示しています。分析は読み取り専用のコンテンツ権限で実行されます。別のジョブが、同じリポジトリ内のブランチに限り、固定の RepoRipple コメントを 1 件更新します。フォークからのプルリクエストでは、書き込み権限のあるトークンを付与せず、レポートをジョブサマリーとダウンロード可能なアーティファクトに保存します。
コーディングエージェント向けツール(MCP)
RepoRipple は、ローカルの読み取り専用 MCP サーバーを介して、同じ決定論的な分析を Codex、OpenCode、Cursor、 Claude Code、VS Code に公開できます。ソースのチェックアウトから実行するには、次のようにします。
uv run reporipple mcp --root /path/to/allowed/workspace
クローンせずに公開済みパッケージを起動するには、次のようにします。
uvx reporipple mcp --root /path/to/allowed/workspace
サーバーは、変更案向けの forecast_change と、実際の Git 変更向けの analyze_worktree を提供します。
クライアントごとのコマンドと設定については、
MCP セットアップガイドを参照してください。
アーキテクチャガイドでは、CLI、GitHub Action、 MCP サーバー、オプションの説明レイヤーが、1 つの決定論的な分析エンジンをどのように共有しているかを説明しています。
レポートの例
# RepoRipple impact report: checkout-service
**Risk:** `high` · **Graph:** 84 files / 137 dependency edges
## Changed files
- `src/billing/store.py`
## Impacted files
- `src/billing/service.py` — distance 1 via `store.py` → `service.py`
- `src/api/checkout.py` — distance 2 via `store.py` → `service.py` → `checkout.py`
## Suggested verification
- `tests/test_billing_service.py`
- `tests/test_checkout.py`
仕組み
- Python、JavaScript、TypeScript のソースファイルを検出します。
- 標準ライブラリの AST を使って Python のインポートを抽出し、専用パーサーを使って JS/TS のインポートを抽出します。
- JS/TS の依存関係を決定論的な順序で解決します。相対パス、最も近い
tsconfig.jsonまたはjsconfig.jsonのpathsマッピング、そのbaseUrl、最後にルートのpackage.jsonで宣言された npm/Yarn ワークスペースパッケージの順です。 - 順方向および逆方向の依存関係を構築します。
- 明示的なベースリビジョンまたはローカルのワークツリーから、追加、変更、削除、名前変更されたファイルを取得します。
- 削除および名前変更されたファイルについて、変更前のソースを保持し、残りの依存元を引き続き追跡できるようにします。
- 設定可能な深さまで依存元をたどります。
- テストの推奨事項、ドキュメントのリマインダー、決定論的なリスクシグナルを追加します。
ワークスペースの解決はローカルで行われ、ソースを考慮します。RepoRipple は、明示的に宣言された
package.json ワークスペースをパッケージ名で照合し、公開エクスポートの境界を尊重し、リポジトリ内のソースファイルに解決されるエントリーポイントをたどります。ワークスペースのグロブは、再帰パターン、上限付きの波括弧による選択肢や範囲、除外をサポートします。条件付きエクスポートでは ES モジュールと CommonJS のエントリーポイントを区別します。.mts/.mjs は import プロファイルを、.cts/.cjs は require プロファイルを使用し、どちらとも判別できない TypeScript/JavaScript ファイルでは、両方を保守的に調べます。また RepoRipple は、構文や default のフォールバックより前に宣言された、該当するカスタム条件も保持するため、ブラウザー、プラットフォーム、ソース専用の依存関係エッジを見落としません。
カスタム条件は、特定のランタイム条件セットを前提とせずに評価されます。そのため、ネストまたは繰り返されたカスタム条件によって、単一のランタイムでは選択されない余分なエッジが保守的に生じる場合があります。影響分析では、依存元を黙って見落とすよりも、このように明示される過剰な近似を優先します。
RepoRipple は、インストール済みの node_modules を調べたり、レジストリに接続したり、パッケージマネージャーを実行したりしません。
pnpm-workspace.yaml、外部パッケージ、無視対象または存在しないビルド出力にしか存在しないワークスペースのエントリーポイントは、現時点では解決されません。ワークスペースのグロブセットが極端で、リゾルバーの固定された安全上限を超える場合、無制限にスキャン時間を費やさないよう、解決は失敗として処理されます。現在の上限は、有効なパターンが 512 個、重複のないパターン全体でパス構成要素が合計 2,048 個、生のパターンが 64 KiB、波括弧展開後が 256 KiB です。この場合はスキャン警告で通知されます。
tsconfig.json、jsconfig.json、パッケージマニフェストへの変更は設定リスクとして検出されますが、これらのメタデータファイル自体はグラフノードではないため、メタデータだけの変更では、影響を受けるすべてのインポーターをまだ列挙しません。
コアでは意図的に LLM によるスコアリングを避けています。結果の再現性、プライバシー、高速性が保たれ、CI でも利用できます。正確性をモデルに依存させることなく、オプションの AI による説明を JSON 出力に重ねることができます。
OpenRouter による任意の説明
AI による説明はデフォルトで無効で、--explain を指定した場合にのみ有効になります。OpenRouter が利用できない場合や無効な応答を返した場合でも、決定的に判定されたリスクレベル、証拠、レポート、および --fail-on の終了ステータスが優先されます。
まず、キーを含まない、マシンから送信されるリクエスト本文を確認してください。
reporipple /path/to/repository --base main --explain-preview
プレビューでは API キーを読み取らず、ネットワークリクエストも行いません。ペイロードに問題がないことを確認したら、環境変数でキーを指定し、説明を明示的にリクエストしてください。
export OPENROUTER_API_KEY="your-key"
reporipple /path/to/repository --base main --explain
コマンドラインでキーを指定するオプションはなく、RepoRipple はファイルからキーを読み取りません。この連携では Python 標準ライブラリのみを使用し、すべてのリクエストに次の制御を適用します。
- リポジトリ名、パス、ソース、差分、スキャナーの警告テキスト、ユーザー識別子は送信されません。
- ファイルとリスクシグナルは
E001などの不透明な証拠 ID に変換され、返された ID はスキーマ検証されたうえで、ローカルでラベルに対応付けられます。 - 応答は厳格な JSON Schema を満たす必要があり、未知の証拠 ID や余分なフィールドは拒否されます。
- OpenRouter のルーティングでは、ゼロデータ保持(
zdr: true)を必須とし、データ収集を拒否したうえで、要求されたすべてのパラメーターに対応するプロバイダーのみを選択します。 - プロバイダーの料金は、入力トークン 100 万個あたり $0.25、出力トークン 100 万個あたり $1 を上限とし、応答は 450 トークンに制限されます。
- リクエストのタイムアウトは 10 秒です。明示的に再試行可能な HTTP 応答を受け取った場合に限り、最大 1 回再試行します。ネットワークタイムアウトが発生して結果が不明な場合は、再試行しません。
- トークン使用量と報告されたリクエスト費用は、Markdown と JSON の出力に含まれます。
デフォルトで固定されているモデルは openai/gpt-6-luna です。--explain-model または
REPORIPPLE_OPENROUTER_MODEL で上書きできますが、プライバシー、スキーマ、料金に関する制御は引き続き必須です。プライバシーフィルターによって利用可能なプロバイダーが制限される場合があり、条件を満たすプロバイダーがない場合、リクエストは安全側に倒して失敗します。OpenRouter の ZDR ポリシーにより、条件を満たすプロバイダーは処理後にプロンプトと応答を保持できません。ただし、リクエストがマシン内にとどまるという意味ではありません。OpenRouter の
構造化出力、
ZDR 制御、および
プロバイダールーティング制御をご覧ください。
CLI リファレンス
reporipple [PATH]
--version show the installed RepoRipple version and exit
--base REVISION compare REVISION...HEAD
--changed PATH analyze an explicit path; repeat as needed
--max-depth N reverse dependency traversal depth (default: 4)
--format markdown|json
--output FILE
--fail-on medium|high
--explain request an optional privacy-filtered OpenRouter explanation
--explain-preview show the exact sanitized request without sending it
--explain-model NAME use a pinned provider/model slug for either explanation mode
reporipple mcp
--root PATH restrict tool access to PATH and its descendants
ベースまたは明示的なパスが指定されていない場合、RepoRipple はステージ済み、未ステージ、および未追跡のファイルを分析します。クリーンなチェックアウトでは、最新のコミットを対象にします。
--explain と --explain-preview は同時に指定できません。JSON 出力でいずれかのフラグを指定すると、deterministic_report と説明またはプレビューを含むラッパーが返されます。通常の JSON 出力に変更はありません。
サポート対象の分析
| 機能 | 状態 |
|---|---|
| Python の絶対インポートと相対インポート | サポート対象 |
| JavaScript/TypeScript の相対インポート | サポート対象 |
JavaScript/TypeScript の paths および baseUrl エイリアス | サポート対象 |
npm/Yarn の package.json ワークスペースパッケージのインポート | サポート対象 |
| 削除および名前変更されたソースファイル | サポート対象 |
| 逆依存関係のパス | サポート対象 |
| テストファイルの推奨 | サポート対象 |
| Markdown および JSON レポート | サポート対象 |
| リスクベースの CI 終了コード | サポート対象 |
| コーディングエージェント向け MCP ツール | サポート対象 |
| プライバシーフィルターを適用した OpenRouter による説明 | 任意 |
pnpm-workspace.yaml および外部パッケージの解決 | 非対応 |
| Go、Rust、Java のインポート | 開発予定 |
| GitHub のプルリクエストレポートとコメント | サポート対象 |
開発
uv venv --python 3.12
uv pip install --python .venv/bin/python -e ".[dev]"
.venv/bin/ruff check .
.venv/bin/pytest
uv build
プライバシーとセキュリティ
RepoRipple の決定論的な解析はローカルで実行され、リポジトリの内容を送信しません。
シェルではなく引数配列を使って Git を呼び出し、一般的な生成物や依存関係のディレクトリを除く、対応対象のシンボリックリンクではないソースファイルのみを読み取ります。MCP サーバーは、リポジトリに関するすべてのリクエストを設定済みの --root 内に制限し、読み取り専用のツールのみを公開します。
ネットワークアクセスが発生するのは --explain が指定された場合のみです。--explain-preview は完全にローカルで実行されるため、送信内容を事前に監査できます。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。