vercel-react-best-practices
Vercelエンジニアリングによる、ReactとNext.jsのパフォーマンス最適化ガイドラインです。React/Next.jsコードの記述、レビュー、リファクタリングの際に、最適なパフォーマンスパターンを実現するために活用できます。Reactコンポーネント、Next.jsページ、データ取得、バンドルの最適化、またはパフォーマンス改善に関するタスクで自動的に起動します。
description の原文を見る
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
SKILL.md 本文
Vercel React Best Practices
Vercel によって保守されている React と Next.js アプリケーションの包括的なパフォーマンス最適化ガイド。8 つのカテゴリにわたる 69 のルールを含んでおり、自動リファクタリングとコード生成をガイドするため、影響度によって優先順位付けされています。
適用する場合
以下の場合にこれらのガイドラインを参照してください:
- 新しい 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 ルート内で early に Promise を開始し、late に awaitasync-suspense-boundaries- Suspense を使用してコンテンツをストリーミング
2. バンドルサイズ最適化(CRITICAL)
bundle-barrel-imports- barrel ファイルを避け、直接インポート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 プロップの重複シリアライゼーションを回避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- デフォルト以外のプリミティブプロップをホイスト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- 入力の応答性を保つために高コストなレンダーを deferrerender-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- スクリプトタグで 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- 関数から早期に returnjs-hoist-regexp- ループの外に RegExp 作成をホイストjs-min-max-loop- ソートではなく min/max にループを使用js-set-map-lookups- O(1) ルックアップに Set/Map を使用js-tosorted-immutable- イミュータビリティに toSorted() を使用js-flatmap-filter- map と filter を1つのパスで実行するために flatMap を使用js-request-idle-callback- 非クリティカルな処理をブラウザのアイドル時に defer
8. 高度なパターン(LOW)
advanced-effect-event-deps- エフェクト 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
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- adryanev
- リポジトリ
- adryanev/.dotfiles
- ライセンス
- MIT
- 最終更新
- 2026/4/24
Source: https://github.com/adryanev/.dotfiles / ライセンス: MIT