mcpField
B
blast-radius

blast-radius

github.com/atholaテスト・品質34383 回インストール4 日前に更新
リポジトリ

blast-radius について

Blast Radius Analysisは、コード変更の影響を評価するスキルです。gauntletのグラフを利用し、利用できない場合はsemまたは手動追跡に切り替え、テスト不足やセキュリティ上の懸念を含めて影響箇所をリスク順に整理します。

主な機能

  1. 01コードグラフによる変更影響の分析
  2. 02semまたは手動追跡への切り替え
  3. 03影響を受けるノードのリスク順表示
  4. 04影響を受ける未テスト関数の特定
  5. 05全体リスクと推奨アクションの提示

活用シーン

  1. 01コード変更のマージ前に影響を評価
  2. 02差分の影響を受ける未テスト関数の特定
  3. 03セキュリティ関連の変更を優先的にレビュー

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/athola/claude-night-market --skill blast-radius

インストール後、Claude Code で/blast-radiusを入力して読み込まれたか確認します。

詳細

影響範囲分析

コードナレッジグラフを使用して、現在のコード変更の影響を分析します。

使用しない場合

  • 変更されたコードの欠陥を確認する場合(pensive:bug-review を使用)
  • コードグラフが存在しない、または古い場合(gauntlet:graph-build を使用)

前提条件

このスキルでは、グラフデータに gauntlet プラグインが必要です。利用可能かどうかを確認してください。

GRAPH_QUERY=$(find ~/.claude/plugins -name "graph_query.py" -path "*/gauntlet/*" 2>/dev/null | head -1)

gauntlet がインストールされていない場合(GRAPH_QUERY が空の場合): git diff と grep を使用してインポートと呼び出し箇所を追跡し、手動で影響を分析します。グラフを使う手順は省略し、手動モードでステップ 3 に進みます。

gauntlet はインストールされているが、graph.db が存在しない場合: ユーザーに「まず /gauntlet-graph build を実行してください」と伝えます。

手順

  1. 現在の変更を表示する:git diff --stat を実行し、変更されたファイルをユーザーに示します。

  2. 影響分析を実行する(gauntlet が必要です):

    python3 "$GRAPH_QUERY" \
        --action impact --base-ref HEAD --depth 2
    

    フォールバック第 1 段階(sem は利用可能、gauntlet はなし): ファイル間の依存関係を追跡するには、sem を使用します。

    if command -v sem &>/dev/null; then
      sem impact --json <changed-file>
    fi
    

    これにより、ファイル名の照合ではなく、実際の関数レベルの依存関係を追跡します。検出パターンについては、leyline:sem-integration を参照してください。

    フォールバック第 2 段階(sem も gauntlet もなし):変更された関数の呼び出し元を rg(または grep)で追跡します。

    # Prefer rg for speed; fall back to grep
    if command -v rg &>/dev/null; then
      git diff --name-only HEAD | while read f; do
        stem="${f%.*}"; stem="${stem##*/}"
        [ -z "$stem" ] && continue  # skip dotfiles (.gitignore etc.)
        rg -l "$stem" . 2>/dev/null
      done | sort -u
    else
      git diff --name-only HEAD | while read f; do
        stem="${f%.*}"; stem="${stem##*/}"
        [ -z "$stem" ] && continue  # skip dotfiles (.gitignore etc.)
        grep -rl "$stem" . 2>/dev/null
      done | sort -u
    fi
    

    注:これはすべてのファイル形式を検索します。Python のみを使用するプロジェクトでは、誤検出を減らすため、rg に --type py を追加するか、grep に --include="*.py" を追加してください。

  3. 結果を優先度順に表示する:

    出力を次の表形式にします。

    Risk  | Node                    | File          | Anchor                          | Reason
    0.85  | auth.py::verify_token   | auth.py:45    | `def verify_token(token):`      | untested, security
    0.62  | db.py::execute_query    | db.py:112     | `cursor.execute(query, params)` | high fan-in
    0.41  | api.py::handle_request  | api.py:78     | `def handle_request(req):`      | flow participant
    

    Anchor 列には、引用した行にあるソーステキストがそのまま記載されます。 これにより、レビュー担当者はツールを再実行せずに指摘内容を確認できます。

  4. テストされていない関数を強調表示する:テストカバレッジがない(TESTED_BY エッジがない)影響対象の関数を一覧表示します。

  5. 全体的なリスクを表示する:最大リスクスコアに基づいて、全体的なリスクレベル(low/medium/high)を表示します。

  6. 対応策を提案する:

    • 高リスクノードの場合:「マージ前にテストの追加を検討してください」
    • セキュリティ上重要なノードの場合:「認証および認可のロジックを慎重に確認してください」
    • ファンインが多いノードの場合:「この変更は多くの呼び出し元に影響します。後方互換性を確認してください」
指摘内容の根拠を確認する(blast-radius:findings-verified)

指摘内容を .review/findings.json に書き込み、引用検証ツール(Skill(imbue:review-core) のステップ 5)を実行します。検証ツールが却下したものは削除するか、UNVERIFIED とラベル付けしてください。

完了条件

  • 結果の表に、影響を受けるすべてのノードと File(file:line)、およびソーステキストそのままの Anchor 列が記載されている。
  • 最大リスクスコアに基づく全体的なリスクレベル(low/medium/high)が表示されている。
  • 報告されたすべての指摘に、citation_verifier.py(終了コード 0)で確認済みの Location とソーステキストそのままの Anchor が付いているか、未検証の指摘が削除または UNVERIFIED とラベル付けされている。

リスクスコアリングモデル

5 つの加重要因(合計の上限は 1.0):

要因重み意味
テスト不足0.30テストカバレッジがない
セキュリティ0.20認証/暗号/SQL のキーワード
フローへの関与0.25実行フローの一部である
モジュール間依存0.15他のモジュールから呼び出されている
呼び出し元の数0.10ファンインの多い関数

コメント