vercel-react-best-practices について
vercel-react-best-practices は、Vercel がメンテナンスする React と Next.js のパフォーマンス最適化ガイドです。アプリの実装、レビュー、リファクタリングを行う開発者向けに、影響度順のルールとコード例をまとめています。
主な機能
- 018 カテゴリーの最適化ルール
- 02影響度に基づく優先順位
- 03解説とコード例を掲載
- 04全ルールの統合ガイド
活用シーン
- 01React コンポーネントや Next.js ページの実装
- 02アプリのパフォーマンス問題のレビュー
- 03データ取得や描画処理のリファクタリング
- 04バンドルサイズや読み込み時間の最適化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ cherryhq/ cherry-studio --skill vercel-react-best-practicesインストール後、Claude Code で/vercel-react-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdREADME.mdrules/advanced-event-handler-refs.mdadvanced-init-once.mdadvanced-use-latest.mdasync-api-routes.mdasync-defer-await.mdasync-dependencies.mdasync-parallel.mdasync-suspense-boundaries.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.mdjs-early-exit.mdjs-flatmap-filter.mdjs-hoist-regexp.mdjs-index-maps.mdjs-length-check-first.mdjs-min-max-loop.md詳細
Vercel React ベストプラクティス
Vercel が管理する、React および Next.js アプリケーション向けの包括的なパフォーマンス最適化ガイドです。8 つのカテゴリにわたる 62 のルールを含み、影響度別に優先順位付けされており、自動リファクタリングとコード生成を支援します。
適用すべき場面
次のような場合にこれらのガイドラインを参照してください:
- 新しい 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-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-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-serialization- クライアントコンポーネントに渡すデータを最小限にするserver-parallel-fetching- コンポーネントを再構成してフェッチを並列化する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- コールバックでのみ使用される state を購読しないrerender-memo- コストの高い処理をメモ化されたコンポーネントに抽出するrerender-memo-with-default-value- デフォルトの非プリミティブなプロパティを巻き上げるrerender-dependencies- 副作用ではプリミティブな依存関係を使用するrerender-derived-state- 生の値ではなく派生した真偽値を購読するrerender-derived-state-no-effect- 副作用ではなくレンダリング中に state を導出するrerender-functional-setstate- 安定したコールバックのために関数型 setState を使用するrerender-lazy-state-init- コストの高い値には useState に関数を渡すrerender-simple-expression-in-memo- 単純なプリミティブには memo を避けるrerender-move-effect-to-event- インタラクションロジックをイベントハンドラーに配置するrerender-transitions- 緊急でない更新には startTransition を使用する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 には sort ではなくループを使用するjs-set-map-lookups- O(1) の検索には Set/Map を使用するjs-tosorted-immutable- イミュータビリティには toSorted() を使用するjs-flatmap-filter- map と filter を 1 回の処理で行うには flatMap を使用する
8. 高度なパターン (LOW)
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 対応