vercel-react-best-practices について
Vercel が管理する React と Next.js のパフォーマンスガイドです。最適化ルールを影響度別に整理し、実装、レビュー、リファクタリング、コード生成に役立ちます。
主な機能
- 018 分野にわたる最適化ルール
- 02性能への影響度に基づく優先順位
- 03データ取得とウォーターフォールの指針
- 04バンドルとサーバー性能の指針
- 05レンダリングと再レンダリングの手法
活用シーン
- 01新しいコンポーネントへの性能指針の適用
- 02React または Next.js コードのボトルネック確認
- 03既存アプリケーションコードのリファクタリング
- 04バンドルと読み込み動作の最適化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ millionco/ expect --skill vercel-react-best-practicesインストール後、Claude Code で/vercel-react-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonREADME.mdrules/_sections.md_template.mdadvanced-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-hoist-regexp.mdjs-index-maps.md詳細
Vercel React ベストプラクティス
Vercel が管理する、React および Next.js アプリケーション向けの包括的なパフォーマンス最適化ガイドです。影響度に基づいて優先順位付けされた 8 カテゴリ、58 のルールが含まれており、自動リファクタリングやコード生成の指針となります。
適用する場面
次のような場合に、これらのガイドラインを参照してください。
- 新しい 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 の props で重複したシリアライズを避ける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- コールバック内でのみ使用する状態を購読しない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- 単純なプリミティブ値には memo を使わないrerender-move-effect-to-event- インタラクションのロジックはイベントハンドラーに記述するrerender-transitions- 緊急性の低い更新には startTransition を使用するrerender-use-ref-transient-values- 頻繁に変化する一時的な値には ref を使用する
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 を優先します
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() を使用します
8. 高度なパターン(LOW)
advanced-event-handler-refs- イベントハンドラーを ref に保存しますadvanced-init-once- アプリの読み込みごとにアプリを一度だけ初期化しますadvanced-use-latest- 安定したコールバック ref には useLatest を使用します
9. React パターン(PROJECT)
no-use-effect- useEffect を直接呼び出さず、派生状態、イベントハンドラー、または useMountEffect を使用します
使用方法
詳しい説明とコード例については、各ルールファイルを参照してください。
rules/async-parallel.md
rules/bundle-barrel-imports.md
各ルールファイルには、次の内容が含まれます。
- 重要である理由の簡単な説明
- 説明付きの誤ったコード例
- 説明付きの正しいコード例
- 追加のコンテキストと参考資料
コンパイル済みドキュメント全文
すべてのルールを展開した完全なガイドについては、AGENTS.md を参照してください。
コメント
Markdown 対応