mcpField
R
react-best-practices

react-best-practices

github.com/laguagu開発72257 回インストール2 日前に更新
リポジトリ

react-best-practices について

Vercelがメンテナンスする、ReactとNext.jsのパフォーマンス指針です。アプリの開発、レビュー、リファクタリングに取り組む開発者向けで、影響度順の70ルールを8カテゴリに整理し、個別ファイルに例と解説を収録しています。

主な機能

  1. 018カテゴリにわたる70のルール
  2. 02影響度に基づく優先順位
  3. 03データ取得とバンドルの指針
  4. 04サーバー、クライアント、描画の指針
  5. 05ルールごとの解説とコード例

活用シーン

  1. 01ReactやNext.jsの性能レビュー
  2. 02データ取得を見直してウォーターフォールを削減
  3. 03バンドルサイズと読み込み時間の改善

インストール

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

$npx skills add https://github.com/laguagu/claude-code-nextjs-skills --skill react-best-practices

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

同梱ファイル

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

AGENTS.md
metadata.json
README.md
rules/
_sections.md
_template.md
advanced-effect-event-deps.md
advanced-event-handler-refs.md
advanced-init-once.md
advanced-use-latest.md
async-api-routes.md
async-cheap-condition-before-await.md
async-defer-await.md
async-dependencies.md
async-parallel.md
async-suspense-boundaries.md
bundle-analyzable-paths.md
bundle-barrel-imports.md
bundle-conditional.md
bundle-defer-third-party.md
bundle-dynamic-imports.md
bundle-preload.md
client-event-listeners.md
client-localstorage-schema.md
client-passive-event-listeners.md
client-swr-dedup.md
js-batch-dom-css.md
js-cache-function-results.md
js-cache-property-access.md
js-cache-storage.md
js-combine-iterations.md

詳細

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

Vercel が管理する、React および Next.js アプリケーション向けの包括的なパフォーマンス最適化ガイドです。影響度の高い順に並べた 8 カテゴリ、70 のルールが掲載されており、自動リファクタリングやコード生成の指針として活用できます。

バージョンの互換性

機能最小バージョン
コアとなるパフォーマンスルール(async、bundle、js)React 18 + Next.js 14
React.cache()(server-cache-react)React 19
<Activity>(rendering-activity)React 19.2
useEffectEvent(advanced-effect-event-deps、advanced-use-latest、advanced-event-handler-refs)React 19.2
after()(server-after-nonblocking)Next.js 15.1
use()、非同期トランジション、リソースヒント(async-suspense-boundaries、rendering-usetransition-loading、rendering-resource-hints)React 19
React Compiler(rerender-* ルールに影響)React 17/18/19。古いバージョンでは、対応するターゲットとランタイムが必要です
use cache ディレクティブ(cache-components スキルを参照)Next.js 16

適用する場面

以下の場合は、これらのガイドラインを参照してください。

  • 新しい React コンポーネントや Next.js ページを作成するとき
  • データ取得(クライアント側またはサーバー側)を実装するとき
  • パフォーマンス上の問題についてコードをレビューするとき
  • 既存の React/Next.js コードをリファクタリングするとき
  • バンドルサイズや読み込み時間を最適化するとき

優先度別のルールカテゴリ

優先度カテゴリ影響度プレフィックス
1ウォーターフォールの解消CRITICALasync-
2バンドルサイズの最適化CRITICALbundle-
3サーバー側のパフォーマンスHIGHserver-
4クライアント側のデータ取得MEDIUM-HIGHclient-
5再レンダリングの最適化MEDIUMrerender-
6レンダリングのパフォーマンスMEDIUMrendering-
7JavaScript のパフォーマンスLOW-MEDIUMjs-
8高度なパターンLOWadvanced-

低レベルの JavaScript ルールを適用する前に、プロファイリングを行ってください。これらは計測によって特定したホットパスに適用する候補であり、読みやすいコードを書き換えるためのチェックリストではありません。React Compiler が有効な場合は、手動でメモ化を追加する前に、その適用範囲を確認してください。

クイックリファレンス

1. ウォーターフォールの解消(CRITICAL)
  • async-cheap-condition-before-await - フラグやリモート値を await する前に、低コストの同期条件を確認する
  • async-defer-await - 実際に使用する分岐の中に await を移動する
  • async-parallel - 独立した処理には Promise.all() を使用する
  • async-dependencies - 部分的な依存関係には better-all を使用する
  • async-api-routes - API ルートでは Promise を早めに開始し、await を遅らせる
  • async-suspense-boundaries - Suspense を使用してコンテンツをストリーミングする
2. バンドルサイズの最適化(CRITICAL)
  • bundle-barrel-imports - 直接インポートし、バレルファイルを避ける
  • bundle-analyzable-paths - 広範なバンドルやトレースを避けるため、静的に解析可能なインポートパスとファイルシステムパスを優先する
  • bundle-dynamic-imports - 重いコンポーネントには next/dynamic を使用する
  • bundle-defer-third-party - ハイドレーション後に分析やログ記録を読み込む
  • bundle-conditional - 機能が有効になったときだけモジュールを読み込む
  • bundle-preload - 体感速度を高めるため、ホバーやフォーカス時にプリロードする
3. サーバー側のパフォーマンス(HIGH)
  • server-auth-actions - API ルートと同様に、サーバーアクションを認証する
  • server-cache-react - リクエストごとの重複排除に React.cache() を使用する
  • server-cache-lru - リクエストをまたぐキャッシュには LRU キャッシュを使用する
  • server-dedup-props - RSC props 内での重複したシリアライズを避ける
  • server-hoist-static-io - 静的 I/O(フォント、ロゴ)をモジュールレベルに移動する
  • server-no-shared-module-state - RSC/SSR で、モジュールレベルの可変なリクエスト状態を避ける
  • server-serialization - クライアントコンポーネントに渡すデータを最小限にする
  • server-parallel-fetching - フェッチを並列化できるようにコンポーネントを再構成する
  • server-parallel-nested-fetching - Promise.all 内でアイテムごとにネストされたフェッチを連鎖させる
  • server-after-nonblocking - ノンブロッキング処理には after() を使用する
4. クライアント側のデータ取得(MEDIUM-HIGH)
  • client-swr-dedup - SWR を使用してリクエストを自動的に重複排除する
  • client-event-listeners - グローバルイベントリスナーを重複排除する
  • client-passive-event-listeners - スクロールにはパッシブリスナーを使用する
  • client-localstorage-schema - localStorage のデータにバージョンを付け、最小限に抑える
5. 再レンダリングの最適化(MEDIUM)
  • rerender-defer-reads - コールバック内でのみ使用する状態を購読しない
  • rerender-memo - 負荷の高い処理をメモ化したコンポーネントに切り出す
  • rerender-memo-with-default-value - プリミティブでないデフォルトの props をコンポーネントの外に置く
  • rerender-dependencies - エフェクトではプリミティブな依存値を使用する
  • rerender-derived-state - 生の値ではなく、派生した真偽値を購読する
  • rerender-derived-state-no-effect - エフェクトではなく、レンダー中に状態を導出する
  • rerender-functional-setstate - 安定したコールバックには関数形式の setState を使用する
  • rerender-lazy-state-init - 負荷の高い値には useState に関数を渡す
  • rerender-simple-expression-in-memo - 単純なプリミティブ値にはメモ化を避ける
  • rerender-split-combined-hooks - 依存関係が独立しているフックを分割する
  • rerender-move-effect-to-event - インタラクションのロジックをイベントハンドラーに記述する
  • rerender-transitions - 緊急性の低い更新には startTransition を使用する
  • rerender-use-deferred-value - 入力の応答性を保つため、負荷の高いレンダーを遅延する
  • rerender-use-ref-transient-values - 頻繁に変わる一時的な値には ref を使用する
  • rerender-no-inline-components - コンポーネント内でコンポーネントを定義しない
6. レンダリングパフォーマンス(MEDIUM)
  • rendering-animate-svg-wrapper - SVG 要素ではなく、ラッパーの div をアニメーションさせる
  • rendering-content-visibility - 長いリストには content-visibility を使用する
  • rendering-hoist-jsx - 静的な JSX をコンポーネントの外に切り出す
  • rendering-svg-precision - SVG 座標の精度を下げる
  • rendering-hydration-no-flicker - クライアント側のみのデータにはインラインスクリプトを使用する
  • rendering-hydration-suppress-warning - 想定される不一致の警告を抑制する
  • rendering-activity - 表示/非表示には Activity コンポーネントを使用する
  • rendering-conditional-render - 条件分岐には && ではなく三項演算子を使用する
  • rendering-usetransition-loading - 読み込み状態には useTransition を優先する
  • rendering-resource-hints - プリロードには React DOM のリソースヒントを使用する
  • rendering-script-defer-async - script タグで defer または async を使用する
7. JavaScript のパフォーマンス(LOW-MEDIUM)
  • js-batch-dom-css - クラスまたは cssText で CSS の変更をまとめる
  • js-index-maps - 繰り返し検索する場合は Map を作成する
  • js-cache-property-access - ループ内ではオブジェクトのプロパティをキャッシュする
  • js-cache-function-results - モジュールレベルの Map に関数の結果をキャッシュする
  • js-cache-storage - localStorage/sessionStorage の読み取り結果をキャッシュする
  • js-combine-iterations - 複数の filter/map を 1 つのループにまとめる
  • js-length-check-first - 負荷の高い比較の前に配列の長さを確認する
  • js-early-exit - 関数から早期に return する
  • js-hoist-regexp - ループの外で RegExp を作成する
  • js-min-max-loop - 最小値/最大値の取得には sort ではなくループを使用する
  • js-set-map-lookups - O(1) の検索には Set/Map を使用する
  • js-tosorted-immutable - 不変性を保つために toSorted() を使用する
  • js-flatmap-filter - 1 回の処理でマッピングとフィルタリングを行うには flatMap を使用する
  • js-request-idle-callback - 重要度の低い処理をブラウザーのアイドル時間まで遅らせる
8. 高度なパターン(LOW)
  • advanced-effect-event-deps - useEffectEvent の結果をエフェクトの依存配列に含めない
  • advanced-event-handler-refs - イベントハンドラーを ref に保存する
  • advanced-init-once - アプリの読み込みごとにアプリを一度だけ初期化する
  • advanced-use-latest - コールバックの ref を安定させるには useLatest を使用する

使用方法

詳しい説明とコード例については、各ルールのファイルを参照してください。

rules/async-parallel.md
rules/bundle-barrel-imports.md

各ルールのファイルには、以下が含まれています。

  • 重要な理由についての簡潔な説明
  • 誤ったコード例とその説明
  • 正しいコード例とその説明
  • 追加の背景情報と参考資料

コンパイル済みドキュメント全文

すべてのルールを詳しく説明した完全なガイド:AGENTS.md

コメント