mcpField
R
react

react

github.com/pproenca開発220494 回インストール11 週間前に更新
リポジトリ

react について

AIエージェント向けのReact 19ベストプラクティススキルです。9カテゴリ49ルールで、コンポーネントの指針と体系的なコードベース監査を扱います。

主な機能

  1. 019カテゴリ49ルール
  2. 02React 19のパターンとAPI
  3. 03パターン認識の例
  4. 04体系的な複数ファイルレビュー手順
  5. 05コードベース衛生チェック

活用シーン

  1. 01Reactコンポーネントの作成やリファクタリング
  2. 02React 18からReact 19への移行
  3. 03Reactリポジトリの性能や設計上の問題の監査

インストール

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

$npx skills add https://github.com/pproenca/dot-skills --skill react

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

同梱ファイル

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

AGENTS.md
metadata.json
assets/templates/
_template.md
references/
_review-algorithm.md
_sections.md
conc-activity-component.md
conc-automatic-batching.md
conc-concurrent-safe.md
conc-suspense-fallback.md
conc-use-deferred-value.md
conc-use-transition.md
cross-boundary-coherence.md
cross-component-consolidation.md
cross-dead-code.md
cross-extract-shared-logic.md
cross-prop-shape-drift.md
data-cache-deduplication.md
data-document-metadata.md
data-error-boundaries.md
data-parallel-fetching.md
data-resource-hints.md
data-suspense-data-fetching.md
data-use-hook.md
effect-avoid-unnecessary.md
effect-cleanup.md
effect-object-dependencies.md
effect-use-effect-event.md
effect-use-sync-external-store.md
form-actions.md
form-use-action-state.md

詳細

React 19 のベストプラクティス

AI エージェント向けの、React 19/19.2 に関する包括的なベストプラクティスガイドです。影響度の高いもの(並行レンダリング、サーバーコンポーネント)から、コードベース全体に関わる整備(重複排除、デッドコード、境界の一貫性)まで、優先度順に並べた 9 カテゴリ・49 個のルールを収録しています。React 19 の主な変更点である、通常のプロパティとしての ref(forwardRef は非推奨)、ネイティブのドキュメントメタデータ、リソースのプリロード API、useActionState、useOptimistic、use() フック、プロバイダーとしての <Context> を反映しています。

各ルールファイルでは、API 名ではなく パターンの形を説明し、同じ問題がどのような構文上の形で現れるかを 2~4 個挙げた 「認識すべきパターン」 セクションから始まります。特に価値の高いルール(実際のコードベースでよく見られる形の問題を扱うもの。フォームアクション、プロパティとしての ref、派生状態、コンテキスト、use() フック、useCallback/memo の組み合わせなど)には、grep で見つけやすいケースだけでなくパターン検出を学べるよう、具体的な 「別の形で現れる例」 の誤った例/正しい例のペアも追加されています。

適用する場面

  • 新しい React コンポーネントを作成するとき、または既存のコンポーネントをリファクタリングするとき
  • ディレクトリ、PR、リポジトリ全体を監査または最新化するとき(必須の手順については references/_review-algorithm.md を参照)
  • React 18 から React 19 に移行するとき(forwardRef → プロパティとしての ref、<Context.Provider> → <Context>、useFormState → useActionState)
  • 再レンダーのパフォーマンスやバンドルサイズを最適化するとき
  • 並行機能(useTransition、useDeferredValue、Activity)を使用するとき
  • サーバーコンポーネントやサーバー/クライアント境界を設定するとき
  • フォームアクション、楽観的更新、データ取得を実装するとき
  • 自動メモ化のために React Compiler を設定するとき
  • React コードをレビューし、よくあるアンチパターンや古い React 18 の慣用表現を確認するとき
  • 単一ファイルのルールでは見つけられない、コードベース全体に関わる問題(ファイル間のロジックの重複、よく似たコンポーネント、デッドコード、クライアントである必要のない 'use client' ファイル、プロパティ形状の不整合など)を見つけるとき(カテゴリ 9 を参照)

コードベースをレビューまたはリファクタリングする方法

ユーザーから React コード(単一ファイルでもリポジトリ全体でも)のレビュー、リファクタリング、最新化、監査を依頼された場合は、references/_review-algorithm.md に従ってください。独自のやり方で進めないでください。

このドキュメントに記載された、必ず守るべき 4 つの事項:

  1. 2 つのモードを使い分ける。リポジトリ全体の監査を拒否しない。 モード A(対象を絞る。約 20 ファイル以下)または モード B(ツリー全体:一覧作成、対象を絞った横断調査、カテゴリ 9 全体の確認)を選択します。800 ファイルをコンテキストに詰め込まずに「コードベースを監査して」という依頼に対応する方法は、このアルゴリズムで定められています。
  2. grep よりも判断を優先する。 各ルールでは、構文上の目印ではなく パターンの形を定義しています。調査を始める前に、各ルールの 「認識すべきパターン」 セクションを読んでください。grep で見つかるのは簡単な違反であり、価値の高い問題(forwardRef を避けるためにコールバック ref を手作業で段階的に渡しているケース、useActionState の役割を果たす onSubmit、派生状態のような形になっている useState+useEffect、取得処理の一連の流れを隠しているカスタムフックなど)は見落とします。grep は きっかけであり、判定ではありません。
  3. ファイル単位ではなくカテゴリ単位で進め、確認を徹底する。 優先度順(CRITICAL → … → CROSS-CUTTING)に、対象となるすべてのファイルをカテゴリごとに調査します。このアルゴリズムでは、対象範囲の宣言、カテゴリごとの進捗行、最後に 網羅状況の表(category × file、セルの値は {clean, N findings, n/a} のいずれか)が必須です。出力にカテゴリが欠けていれば、すぐに分かります。
  4. コードベース全体に関わる問題はカテゴリ 9 から見つける。 単一ファイルのルールだけでは、「この 2 つのコンポーネントは統合すべき」や「このフックは使われていない」とは判断できません。カテゴリ 9(コードベースの整備)では最後に一覧全体を調査し、削除/重複排除/再利用/統合に関する指摘をまとめます。

単一ファイルに関する個別の質問(「このフックは問題ないですか?」など)は、該当するルールを直接参照できます。このアルゴリズムは、複数ファイルやリポジトリ全体を対象とする場合のためにあります。

ルールのカテゴリ

#カテゴリ影響度ルール数主なトピック
1並行レンダリングCRITICAL6useTransition、useDeferredValue、Activity、バッチ処理、レンダーの純粋性
2サーバーコンポーネントCRITICAL6RSC の境界、データ取得、ストリーミング、シリアライズ可能な props
3アクションとフォームHIGH5フォームアクション、宣言的なフォーム状態、useOptimistic、サーバー側の検証
4データ取得HIGH7use() フック、cache()、Suspense、ドキュメントメタデータ、リソースヒント
5状態管理MEDIUM-HIGH5派生値、コンテキストの分割、関数型更新、reducer
6メモ化とパフォーマンスMEDIUM5React Compiler、useMemo、useCallback、React.memo
7エフェクトとイベントMEDIUM5useEffectEvent、クリーンアップ、外部ストア、派生状態のアンチパターン
8コンポーネントパターンLOW-MEDIUM5ref を prop として渡す、コンポジション、制御コンポーネントと非制御コンポーネント、key によるリセット
9コードベースの健全性横断的5重複排除、統合、不要なコード、境界の一貫性、prop の形状のばらつき

クイックリファレンス

重要なパターン — まずこれらを正しく適用してください。

  • クライアントコンポーネントではなく、サーバーコンポーネントでデータを取得する
  • 'use client' の境界は可能な限り下位に配置する
  • 時間のかかるノンブロッキング更新には startTransition を使う
  • タブやページの切り替えをまたいで状態を保持するには <Activity> を使う

React 19 の最新イディオム(React 18 のパターンは生成しないでください):

  • function C({ ref, ...props }) — forwardRef でラップしない
  • <MyContext value={v}> — <MyContext.Provider> を使わない
  • useActionState — useFormState を使わない
  • useRef<T>(null) — 必ず初期値を渡す
  • <title>、<meta>、<link> をインラインでレンダーする — react-helmet を使わない
  • react-dom の preload/preconnect — <link rel="preload"> を手動でレンダーしない

よくある単一ファイルの誤り — こうしたアンチパターンを避けてください。

  • クライアントコンポーネント内で use() 用のプロミスを作成する(無限ループの原因になります)
  • すべてをメモ化する(代わりに React Compiler v1.0+ を使う)
  • 派生状態、ミューテーション、親への通知、アプリの初期化にエフェクトを使う
  • コンポーネントツリー内の高すぎる位置に 'use client' を配置する

コードベースレベルのパターン — カテゴリ 9 の一斉チェックで次の点を確認してください。

  • インポート元が 0 件のコンポーネント/フック/ユーティリティ — 削除する
  • 同じエフェクト/状態の形状を持つファイルが 2 つ以上ある — 共有フックを抽出する
  • ラベル/アイコンにばらつきのある構造上同一のコンポーネントが 2 つ以上ある — バリアントまたはコンポジションを使って統合する
  • フックの使用にクライアント側での実行が必要ない 'use client' ファイル — サーバーコンポーネントに降格する(またはサーバー側の親コンポーネントとクライアント側のアイランドに分割する)
  • コンポーネント間で異なる名前が使われている、同じ概念を表す prop — 正式な名前に統一する

目次

  1. 並行レンダリング — CRITICAL
  2. サーバーコンポーネント — CRITICAL
  3. アクションとフォーム — HIGH
  4. データ取得 — HIGH
  5. 状態管理 — MEDIUM-HIGH
  6. メモ化とパフォーマンス — MEDIUM
  7. エフェクトとイベント — MEDIUM
  8. コンポーネントのパターン — LOW-MEDIUM
  9. コードベースの整理 — CROSS-CUTTING(複数ファイルにまたがる指摘。リポジトリ全体の監査に必要)

参考資料

  1. https://react.dev
  2. https://react.dev/blog/2024/04/25/react-19-upgrade-guide
  3. https://react.dev/blog/2024/12/05/react-19
  4. https://react.dev/blog/2025/10/01/react-19-2
  5. https://react.dev/blog/2025/10/07/react-compiler-1
  6. https://react.dev/learn/you-might-not-need-an-effect
  7. https://github.com/facebook/react

関連スキル

  • Next.js 16 App Router については、nextjs-16-app-router スキルを参照してください
  • クライアント側のフォーム処理については、react-hook-form スキルを参照してください
  • TanStack Query を使ったデータのキャッシュについては、tanstack-query スキルを参照してください

コメント