fuzz について
ファジングハーネスでコード解析ルールを検査するスキルです。開発者向けに、対象を絞ったテストやコーパス全体のテスト、結果の調査、回帰ケースの保存、報告の手順を示します。
主な機能
- 01ルール別ファジングテストの実行
- 02タグ単位でのルール群テスト
- 03用意されたリポジトリコーパスの利用
- 04クラッシュと誤検知の調査
- 05回帰ケースの保存とシード再生
活用シーン
- 01個別テスト後のルール検査
- 02実際のリポジトリでのルール動作確認
- 03ファジング結果の再現と調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ millionco/ react-doctor --skill fuzzインストール後、Claude Code で/fuzzを入力して読み込まれたか確認します。
詳細
ファズルール
焦点を絞ったルールテストに合格したら、packages/fuzz を使用してください。ハーネスのアーキテクチャとコーパスの設定については、README.md をお読みください。
ハーネスを実行する
最初に対象ルールを実行します。
FUZZ_RULE=<rule-id> FUZZ_STRICT=1 FUZZ_ITERATIONS=500 nr fuzz
便利なバリエーション:
nr fuzz
FUZZ_RULE=<rule-id> FUZZ_SEED=42 nr fuzz
FUZZ_INVARIANTS=1 nr fuzz
FUZZ_CORPUS_DIR=<repository-directory> nr fuzz
FUZZ_RULE=<rule-id> FUZZ_PRINT_SILENT=1 nr fuzz
対象ルールが発火することを確認してください。何も出力しないルールでは、早期終了の処理しかテストできません。何も出力されない場合は、packages/fuzz/src/snippet-pools.ts にトリガーとなる構造を追加して、再実行してください。
レジストリ全体のコホートをテストするには、FUZZ_RULE の代わりに FUZZ_TAG=<tag> を使用してください。
推奨される全体スイープ(ルールバッチのリリース前など)では、実際のチェックアウトをコーパスとして指定してください。すぐに使えるコーパスはどのマシンでも利用できます。パッケージの README の「Canonical corpora」を参照してください。bun scripts/sync-fuzz-corpus.ts は固定された 48 リポジトリのサンプルを作成します(RDE キャッシュがあればシンボリックリンクを作成し、なければクローンします)。また、bun scripts/build-bench-corpus.ts は react-bench の診断密度の高い RD-health 対象ファイルを抽出します。
cd packages/fuzz
bun scripts/sync-fuzz-corpus.ts
FUZZ_INVARIANTS=1 FUZZ_ITERATIONS=100 FUZZ_CORPUS_DIR=tmp/corpus-repos nr fuzz
ルールの変更が一般的な構文に影響する場合は、直接的な誤検知チェックを実行してください。
cd packages/fuzz
bun scripts/hunt-false-positives.ts
検出結果をトリアージする
再現用データは packages/fuzz/tmp/fuzz-findings/ にあります。
- クラッシュ:プログラムを最小化し、例外を発生させない回帰テストを追加して、ルールを修正し、シードを再実行します
- 低速ケース:問題を引き起こす構造をプロファイルし、探索範囲に上限を設け、既存のしきい値を維持します
- 判定の変化:偶発的な構文に依存する検出を修正し、適切な場合は堅牢性ゲートにルールを追加します
- 不変条件違反:ルールが書き換えに反応すべきかを判断し、予期しない変更を修正してテストします
- 誤検知:有効なプログラムをルールテストとファズ回帰コーパスに追加します
検出結果を 1 件再実行します。
FUZZ_RULE=<rule-id> FUZZ_SEED=<seed> FUZZ_ITERATIONS=1 nr fuzz
誤検知を再発させない
誤検知が確認されるたびに、次の作業を行います。
- 最小限のフィクスチャを
packages/fuzz/corpus/regressions/<rule-id>--<slug>.tsxに追加します。 - フィクスチャのヘッダーに、ルール ID、弱点クラス、ソースを記載します。
- ルールテストスイートに、焦点を絞った有効なケースを追加します。
- 既存のプールで弱点を再現できない場合は、ジェネレーター用のスニペットを追加します。
nr -C packages/fuzz testを実行し、対象ルールを再実行します。
library-idiom、control-flow、wrapper-transparency、name-heuristic、alias-guard、cross-file、framework-gating、paren-shape、default-parameter、dynamic-computed、private-member、copy-tracking など、安定した弱点名を使用してください。
プロジェクトレベルのデッドコードや依存関係に関する検出結果は、ルールファザーではなくコアテストに含めてください。
結果を報告する
コマンド、対象ルールの発火回数、検出結果、再実行したシード、コーパスのフィクスチャ、ジェネレーターの変更を記録してください。実装上の問題だと確認された検出結果は rule-validate に渡してください。