vercel-react-best-practices について
Vercel React Best Practices は、Vercel が管理する エージェントスキル で、React と Next.js 向けのパフォーマンスルール 70 件を影響度順の 8 カテゴリに分類しています。バンドルサイズや読み込み時間を改善したい開発者が、自動リファクタリングとコード生成の指針として利用できます。
主な機能
- 018 カテゴリにまたがる 70 件のパフォーマンスルール
- 02影響度(クリティカルから低)による優先順位付け
- 03ウォーターフォール、バンドルサイズ、データ取得の最適化
- 04誤りと正しい例を含む個別のルールファイル
活用シーン
- 01React や Next.js のコードにおけるパフォーマンス問題のレビュー
- 02自動リファクタリングとコード生成の指針としての利用
- 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.mdmetadata.jsonREADME.mdrules/_sections.md_template.mdadvanced-effect-event-deps.mdadvanced-event-handler-refs.mdadvanced-init-once.mdadvanced-use-latest.mdasync-api-routes.mdasync-cheap-condition-before-await.mdasync-defer-await.mdasync-dependencies.mdasync-parallel.mdasync-suspense-boundaries.mdbundle-analyzable-paths.mdbundle-barrel-imports.mdbundle-conditional.mdbundle-defer-third-party.mdbundle-dynamic-imports.mdbundle-preload.mdclient-event-listeners.mdclient-localstorage-schema.mdclient-passive-event-listeners.mdclient-swr-dedup.mdjs-batch-dom-css.mdjs-cache-function-results.mdjs-cache-property-access.mdjs-cache-storage.mdjs-combine-iterations.md詳細
Vercel React Best Practices
Vercel が管理する、React および Next.js アプリケーション向けの包括的なパフォーマンス最適化ガイドです。8 つのカテゴリにわたる 70 のルールを含み、自動リファクタリングやコード生成の指針となるよう影響度の高い順に優先度を付けています。
適用するタイミング
次のような場合にこのガイドラインを参照してください:
- 新しい React コンポーネントや Next.js ページを作成するとき
- データフェッチ(クライアント側またはサーバー側)を実装するとき
- パフォーマンスの問題がないかコードをレビューするとき
- 既存の React/Next.js コードをリファクタリングするとき
- バンドルサイズや読み込み時間を最適化するとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | ウォーターフォールの排除 | CRITICAL | async- |
| 2 | バンドルサイズの最適化 | CRITICAL | bundle- |
| 3 | サーバーサイドのパフォーマンス | HIGH | server- |
| 4 | クライアントサイドのデータフェッチ | MEDIUM-HIGH | client- |
| 5 | 再レンダリングの最適化 | MEDIUM | rerender- |
| 6 | レンダリングのパフォーマンス | MEDIUM | rendering- |
| 7 | JavaScript のパフォーマンス | LOW-MEDIUM | js- |
| 8 | 高度なパターン | LOW | advanced- |
クイックリファレンス
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 にあります。
コメント
Markdown 対応