mcpField
V
vercel-react-best-practices

vercel-react-best-practices

公式
github.com/vercel-labs開発33.2k848.6k 回インストール1 日前に更新
リポジトリ

vercel-react-best-practices について

Vercel React Best Practices は、Vercel が管理する エージェントスキル で、React と Next.js 向けのパフォーマンスルール 70 件を影響度順の 8 カテゴリに分類しています。バンドルサイズや読み込み時間を改善したい開発者が、自動リファクタリングとコード生成の指針として利用できます。

主な機能

  1. 018 カテゴリにまたがる 70 件のパフォーマンスルール
  2. 02影響度(クリティカルから低)による優先順位付け
  3. 03ウォーターフォール、バンドルサイズ、データ取得の最適化
  4. 04誤りと正しい例を含む個別のルールファイル

活用シーン

  1. 01React や Next.js のコードにおけるパフォーマンス問題のレビュー
  2. 02自動リファクタリングとコード生成の指針としての利用
  3. 03バンドルサイズとページ読み込み時間の最適化

インストール

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

$npx skills add https://github.com/vercel-labs/agent-skills --skill vercel-react-best-practices

インストール後、Claude Code で/vercel-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 Best Practices

Vercel が管理する、React および Next.js アプリケーション向けの包括的なパフォーマンス最適化ガイドです。8 つのカテゴリにわたる 70 のルールを含み、自動リファクタリングやコード生成の指針となるよう影響度の高い順に優先度を付けています。

適用するタイミング

次のような場合にこのガイドラインを参照してください:

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

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

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

クイックリファレンス

1. ウォーターフォールの排除 (CRITICAL)
  • async-cheap-condition-before-await - フラグやリモートの値を await する前に、負荷の小さい同期条件を確認する
  • async-defer-await - await を実際に使用する分岐の中へ移動する
  • async-parallel - 独立した処理には Promise.all() を使用する
  • async-dependencies - 部分的な依存関係には better-all を使用する
  • async-api-routes - API ルートではプロミスを早めに開始し、遅めに 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 Actions の認証を行う
  • server-cache-react - リクエストごとの重複排除に React.cache() を使用する
  • server-cache-lru - リクエストをまたぐキャッシュに LRU キャッシュを使用する
  • server-dedup-props - RSC のプロップスで重複したシリアライズを避ける
  • 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 - プリミティブ以外のデフォルト prop をホイストする
  • rerender-dependencies - エフェクトではプリミティブな依存関係を使用する
  • rerender-derived-state - 生の値ではなく派生した真偽値を購読する
  • rerender-derived-state-no-effect - エフェクトではなくレンダリング中に状態を導出する
  • rerender-functional-setstate - 安定したコールバックのために関数形式の setState を使用する
  • rerender-lazy-state-init - 高コストな値には関数を useState に渡す
  • rerender-simple-expression-in-memo - 単純なプリミティブには 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 - ソートの代わりにループで min/max を求める
  • js-set-map-lookups - O(1) の検索には Set/Map を使用する
  • js-tosorted-immutable - 不変性のために toSorted() を使用する
  • js-flatmap-filter - flatMap を使って1回のパスで map と filter を行う
  • js-request-idle-callback - 重要度の低い処理はブラウザのアイドル時間に遅らせる
8. 高度なパターン (LOW)
  • advanced-effect-event-deps - useEffectEvent の結果をエフェクトの依存関係に入れない
  • advanced-event-handler-refs - イベントハンドラーを ref に格納する
  • advanced-init-once - アプリの初期化はアプリの読み込みごとに1回だけ行う
  • advanced-use-latest - 安定したコールバックの ref には useLatest を使用する

使い方

個々のルールファイルで、詳しい説明とコード例を確認してください:

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

各ルールファイルには次の内容が含まれています:

  • なぜ重要なのかの簡単な説明
  • 誤ったコード例とその説明
  • 正しいコード例とその説明
  • 追加のコンテキストと参考資料

コンパイル済みの完全なドキュメント

すべてのルールを展開した完全なガイドは AGENTS.md にあります。

コメント