find-mismatch について
fallow による静的解析とチェックリストを使い、リポジトリ全体の実行時バグを探すコードレビュー用スキルです。スタイル、パフォーマンス、ドキュメント、テストに関する提案は対象外です。
主な機能
- 01fallow による静的解析
- 02Git の状態に基づく検出結果の絞り込み
- 03対象となるステージ済み項目の自動修正
- 04境界をまたぐ契約の確認
- 05非同期処理、ロジック、言語固有のバグ確認
- 06指定形式での検出結果報告
活用シーン
- 01ステージ済み JavaScript または TypeScript 変更のレビュー
- 02API の引数や戻り値フィールドの不一致検出
- 03null アクセスや非同期処理のエラー確認
- 04実行時バグの構造化レポート作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ utarn/ engineer-skills --skill find-mismatchインストール後、Claude Code で/find-mismatchを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
不一致の検出
fallow を使用して静的解析を実行し、提案された問題を修正します。すべてのファイルを確認してください。実行時の失敗やバグだけに注目して修正してください。スタイル、フォーマット、パフォーマンスに関する提案、ドキュメントやテスト、「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 では、関数形式(
hsl(0 0% 100%))ではなく、生の HSL コンポーネント(0 0% 100%)を使用すると機能しません(v3 とは異なります)。 - インラインテーマ:循環参照やセレクターの不一致(クラスと data-theme)を確認します。
7. プレースホルダーとスタブコード
- 未使用の宣言/ファイル/依存関係、TODO コメント、空の catch ブロックを確認します。
3. 言語固有の落とし穴
- Python:実在しないライブラリメソッド(pandas、numpy、requests)、同期処理と asyncio の混同、可変デフォルト引数(
def f(x=[]))、インデントによる意図しない処理の欠落。 - JS/TS:バックエンド(Node)とフロントエンド(Browser)の API の混同、
anyの多用、型のみのインポートの不一致、バレルファイルの誤検出(本番では未使用だが、テスト/ライブラリでは使用されているエクスポート)。 - 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 の種類 | チェックリストのカテゴリ | 自動修正アクション |
|---|---|---|
unused_exports | プレースホルダーとスタブ | (ローカルで使用されている場合は)export を削除するか、宣言全体を削除します。 |
unused_files | プレースホルダーとスタブ | ファイルを削除します(先に動的インポートを確認してください)。 |
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 対応