mcpField
R
react-router-code-review

react-router-code-review

github.com/existential-birdsテスト・品質85196 回インストール11 週間前に更新
リポジトリ

react-router-code-review について

react-router-code-reviewは、React Routerプロジェクト向けのコードレビュースキルです。データ読み込みや変更処理、エラーバウンダリー、ナビゲーションを確認し、根拠に基づく報告を求めます。

主な機能

  1. 01loaderによるデータ確認
  2. 02Formとactionパターンのチェック
  3. 03エラーバウンダリーの指針
  4. 04ナビゲーションと保留状態の確認
  5. 05証拠確認と検証ゲート

活用シーン

  1. 01React Routerのルート変更レビュー
  2. 02データ読み込みと変更処理の確認
  3. 03エラー処理とナビゲーションの検証

インストール

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

$npx skills add https://github.com/existential-birds/beagle --skill react-router-code-review

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
data-loading.md
error-handling.md
mutations.md
navigation.md

詳細

React Router コードレビュー

クイックリファレンス

問題の種類リファレンス
データ取得に useEffect を使用、ローダーがない、パラメーターの問題references/data-loading.md
Form と useFetcher の使い分け、アクションのパターンreferences/mutations.md
エラーバウンダリーがない、errorElementreferences/error-handling.md
navigate() と Link の使い分け、保留中の状態references/navigation.md

レビューチェックリスト

  • データを useEffect ではなく loader で読み込んでいる
  • ルートパラメーターを型安全に検証してからアクセスしている
  • 適切な場合に、並列データ取得に defer() を使用している
  • ミューテーションに手動の fetch ではなく <Form> または useFetcher を使用している
  • アクションが成功時とエラー時の両方を処理している
  • ルートに errorElement を使ったエラーバウンダリーがある
  • エラーの種類を確認するために isRouteErrorResponse() を使用している
  • 可能な場合、ナビゲーションに navigate() ではなく <Link> を使用している
  • useNavigation() または fetcher.state を使って保留中の状態を表示している
  • レンダリング中にナビゲーションしていない(エフェクトまたはハンドラー内でのみ実行している)

有効なパターン(問題として報告しない)

以下は React Router の正しい使用パターンです。問題として報告しないでください。

  • クライアント専用データに対する useEffect - ローダーはサーバー側で実行されます。localStorage、ウィンドウのサイズ、ブラウザー API には useEffect を使用する必要があります
  • イベントハンドラー内の navigate() - Link は宣言的なナビゲーションに使用します。コールバック/ハンドラー内で命令的にナビゲーションする場合は navigate() が適切です
  • ローダーデータへの型注釈 - useLoaderData<typeof loader>() は型注釈であり、型アサーションではありません
  • ルートレベルで空の errorElement - ルートが意図的に親のエラーバウンダリーに依存している場合があります
  • action プロパティのない Form - 規約に従い現在の URL に送信します。action の明示は任意です
  • null を返す loader - データが存在しない場合に有効です。null は正当なローダーの戻り値です
  • fetcher.state を確認せずに fetcher.data を使用する - 再検証中に古いデータを許容する場合は、意図的なことがあります

コンテキストに応じたルール

具体的な状況に該当する場合のみ、以下の問題を指摘してください。

問題次の場合にのみ指摘
ローダーがないデータがサーバー側で利用可能な場合(クライアント専用ではない)
データ取得に useEffect を使用データがクライアント専用ではない場合(localStorage、ブラウザー API、ウィンドウサイズではない)
errorElement がない階層内の親ルートにエラーバウンダリーがない場合
Link の代わりに navigate() を使用イベントハンドラーや条件付きロジックによってナビゲーションが実行されるのではない場合

ゲート(問題を報告する前に実施)

順番に実行してください。直感だけに頼らず、根拠(パス、行番号、またはコードからの一行引用)を示して各ゲートを通過してください。

ゲート 1 — ルートの範囲を特定する

通過条件: レビュー対象の動作を担うルートモジュール、routes 設定項目、またはレイアウトのリポジトリパスを特定していること(問題を指摘する前にメモに記載してください)。

ゲート 2 — コンテキストに応じた条件の確認

通過条件: コンテキストに応じたルールに該当するすべての問題について、コードに結び付いた一行の根拠で 次の場合にのみ指摘 の条件を満たしていること。それ以外のチェックリスト項目については、具体的なコードの引用(パスと行番号、または短い抜粋)があること。

ゲート 3 — 問題ではないパターン

通過条件: その動作が、該当するカテゴリの**有効なパターン(問題として報告しない)**に含まれていないこと。

ゲート 4 — 検証プロトコル

review-verification-protocol を読み、従ってください。通過条件: 出力する各指摘について、報告前チェックリスト(および該当する問題の種類別サブセクション)を完了していること。

リファレンスを読み込むタイミング

  • データ取得コードをレビューする → data-loading.md
  • フォームまたはミューテーションをレビューする → mutations.md
  • エラーハンドリングをレビューする → error-handling.md
  • ナビゲーションロジックをレビューする → navigation.md

レビューの質問

  1. データの読み込みには、エフェクトではなくローダーが使われていますか?
  2. ミューテーションにはフォーム/アクションパターンが使われていますか?
  3. 適切なルート階層にエラーバウンダリーが設置されていますか?
  4. ナビゲーションは Link コンポーネントを使って宣言的に行われていますか?
  5. 処理中の状態は適切に扱われていますか?

コメント