find-mismatch について
find-mismatchは、プロジェクト全体の実行時バグを調べるコードレビュースキルです。JS/TSのFallow静的解析と多言語の手動チェックリストを組み合わせ、定型形式で問題を報告します。
主な機能
- 01JS/TS向けFallow監査
- 02ステージ済み・未ステージ変更の判別
- 03境界をまたぐ契約の確認
- 04多言語の実行時バグ確認項目
- 05定型形式のバグ報告
活用シーン
- 01ステージ済みJS/TS変更の確認と安全な修正
- 02未ステージ変更の非変更レビュー
- 03シリアライズや非同期処理の不具合確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ utarn/ review-skill --skill find-mismatchインストール後、Claude Code で/find-mismatchを入力して読み込まれたか確認します。
詳細
不一致の検出
すべてのファイルを確認してください。実行時の失敗やバグだけに注目してください。スタイル、書式、パフォーマンスに関する提案、ドキュメントやテスト、「X の使用を検討してください」といった指摘は報告しないでください。
1. プロセス
- JS/TS(事前チェック):静的解析を実行します。
- インストール状況を確認します:
fallow --version。 - 未インストールの場合はグローバルにインストールします:
npm install -g fallow。 - 監査を実行します:
fallow audit --format json --quiet。 - Git の状態で検出結果を絞り込みます:
git diff --staged --name-only。 - ステージ済みの場合:安全に適用できる修正を自動適用し、監査を再実行して検証します。
- ステージされていない場合:報告のみ行い、変更は加えません。
- インストール状況を確認します:
- レビュー用チェックリスト:すべての変更にチェックリストを適用します。
- 報告:指定されたテンプレートを使用して検出結果をまとめます。
2. チェックリストのカテゴリ
1. 境界をまたぐ契約
- 呼び出しの不一致:RPC、HTTP、IPC、イベント名/サブジェクトが受信側と一致しているか確認します。
- パラメーター名/型:
userIdとuser_id、文字列と数値、フラット形式とラップ形式などを確認します。 - 戻り値の型:フィールドへのアクセス(
result.field)が戻り値のシグネチャと一致している必要があります。
2. シリアライズとデシリアライズ
- 大文字と小文字の形式:DB/バックエンドの
snake_caseと JSON/フロントエンドのcamelCaseを確認します。 - オプショナルな値:受信側が必要とするフィールドが、生成側ではオプショナルになっていないか確認します。
- 列挙型/判別子:判別フィールド(
type、kind)とバリアントが一致しているか確認します。 - Base64:エンコードが二重に行われていないか確認します。
3. ロジックのバグ
- 二重カウント:カウンターがループ内/分岐内とその外側の両方で増加していないか確認します。
- オフバイワン:インデックスやページネーションの境界(
page <= totalとpage < total)を確認します。 - 条件:冗長なフラグ、到達不能な文、シャドーイングされた変数を確認します。
4. プロパティとメソッドへのアクセス
- Null 参照:Null チェックや長さのチェックなしに、メソッドを呼び出したり配列インデックスにアクセスしたりしていないか確認します(
items[0].name)。 - オプショナルチェーン:チェックが途中で止まっていないか確認します(例:
user?.address.streetはaddressが null の場合、依然としてクラッシュします)。 - This のコンテキスト:クラス内のコールバックのバインドを確認します。
5. 非同期処理と並行処理
- 競合状態:共有可変状態や、調整なしで並列に実行されるファイルシステム操作を確認します。
awaitの不足:Promise が無視され、エラーが通知されない状態になっていないか確認します。- リーク:エラー発生時にファイル/DB/ネットワーク接続が閉じられない経路がないか確認します。
6. CSS とスタイリング
- HSL 変数:Tailwind v4 では(v3 とは異なり)、関数形式(
hsl(0 0% 100%))ではなく生の HSL 成分(0 0% 100%)を使うと失敗します。 - インラインテーマ:循環参照やセレクターの不一致(クラスと data-theme)を確認します。
7. プレースホルダーとスタブコード
- 未使用の宣言/ファイル/依存関係、TODO コメント、空の catch ブロックを確認します。
3. 言語固有の落とし穴
- Python:存在しないライブラリメソッド(pandas、numpy、requests)、同期処理と asyncio の混同、可変デフォルト引数(
def f(x=[]))、インデントの欠落による意図しない実行を確認します。 - JS/TS:バックエンド(Node)とフロントエンド(Browser)の API の混同、
anyの乱用、型のみの import の不一致、バレルファイルの誤検出(エクスポートされているが本番では未使用で、テストやライブラリで使用されているケース)を確認します。 - C++:生ポインターとスマートポインターの混同、標準ライブラリヘッダー
#includeの不足、未初期化変数、バッファーオーバーフローを確認します。 - Rust:借用チェッカーのライフタイムの過剰な複雑化、
None/Errに対するunwrap()、.awaitの中断ポイントをまたぐロックを確認します。 - Java / .NET:存在しないアノテーション/属性、LINQ の N+1 クエリ、Entity Framework のモデルスナップショットのずれ/マイグレーションの不足を確認します(
Entities/のモデル変更とMigrations/を比較します)。 - Go:WaitGroup/Channel のデッドロック、JSON での非公開構造体フィールド、ループ内の defer、マップへの並行アクセスを確認します。
- PHP:緩い型比較(
==と===)、配列とオブジェクトへのアクセスの混同、未定義のキーを確認します。
4. Fallow の検出結果の分類と修正
| Fallow Type | チェックリストのカテゴリ | 自動修正アクション |
|---|---|---|
unused_exports | プレースホルダーとスタブ | ローカルで使用されている場合は export を削除し、そうでなければ宣言全体を削除します。 |
unused_files | プレースホルダーとスタブ | ファイルを削除します(先に動的 import を確認してください)。 |
unused_dependencies | プレースホルダーとスタブ | package.json から依存関係を削除します。 |
circular_dependencies | 境界をまたぐ契約 | 手動レビューに回します(初期化時のバグを引き起こすため)。 |
complexity/duplication | ロジックのバグ | 手動レビューに回します。 |
5. 出力形式
## Review Summary ヘッダーを含めてください(JS/TS プロジェクトの場合のみ)。
## Review Summary
- **Manual review bugs found**: N
- **Fallow auto-fixed**: N findings (staged files only)
- **Fallow non-auto-fixable**: N findings
- **Fallow verdict**: pass / fail
個別の指摘事項の形式(fallow 由来のバグには [fallow] タグを追加してください):
## Bug #1
- **File**: <path>:<line>
- **Category**: <category>
- **What's wrong**: <description>
- **Runtime effect**: <effect>
- **Fix**: <code>
コメント
Markdown 対応