react について
Vercel のガイドに基づく、開発者向けの React パフォーマンス最適化スキルです。Next.js、Remix、Vite などのフレームワークに依存せず、非同期処理、バンドル、レンダリング、高度なパターンを分類して紹介します。
主な機能
- 01フレームワーク非依存の React ガイド
- 027 カテゴリーに整理したルール
- 03非同期ウォーターフォールとバンドルの最適化
- 04レンダリングと再レンダリングの実践
- 05詳細ルールと例への参照
活用シーン
- 01React コードの性能上の問題を確認
- 02不要な非同期ウォーターフォールを削減
- 03レンダリングとバンドルの改善
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dalestudy/ skills --skill reactインストール後、Claude Code で/reactを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced-closure-scope.mdadvanced-event-handler-refs.mdadvanced-init-once.mdadvanced-use-latest.mdasync-defer-await.mdasync-dependencies.mdasync-parallel.mdasync-suspense-boundaries.mdbundle-barrel-imports.mdbundle-conditional.mdbundle-defer-third-party.mdbundle-lazy.mdbundle-preload.mdclient-abort-redundant-work.mdclient-data-dedup.mdclient-event-listeners.mdclient-localstorage-schema.mdclient-passive-event-listeners.mdclient-sync-external-store.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.mdjs-iterator-helpers.mdjs-length-check-first.mdjs-min-max-loop.md詳細
React
Vercel 가이드 기반 React 성능 최적화 베스트 프랙티스. 프레임워크 비종속(Next.js, Remix, Vite 등 무관).
각 규칙의 상세 설명과 코드 예제는 references/ 참고. 원본 Vercel 가이드의 전체 규칙(Next.js/SSR 포함)은 vercel-react-best-practices 참고.
규칙 카테고리
| 우선순위 | 카테고리 | 영향도 | 접두사 |
|---|---|---|---|
| 1 | 비동기 워터폴 제거 | CRITICAL | async- |
| 2 | 번들 사이즈 최적화 | CRITICAL | bundle- |
| 3 | 리렌더링 최적화 | MEDIUM | rerender- |
| 4 | 렌더링 성능 | MEDIUM | rendering- |
| 5 | 클라이언트 데이터/이벤트 | MEDIUM | client- |
| 6 | JavaScript 성능 | LOW-MEDIUM | js- |
| 7 | 고급 패턴 | LOW | advanced- |
빠른 참조
1. 비동기 워터폴 제거 (CRITICAL)
async-parallel-Promise.all()로 독립 작업 병렬화async-defer-await- 불필요한 경로에서 await 지연async-suspense-boundaries- Suspense로 부분 렌더링async-dependencies- 부분 의존성 있는 작업의 최대 병렬화
2. 번들 사이즈 최적화 (CRITICAL)
bundle-barrel-imports- barrel file 직접 import 지양bundle-lazy-React.lazy로 코드 스플리팅bundle-preload- hover/focus 시 프리로드bundle-conditional- 기능 활성화 시에만 모듈 로드bundle-defer-third-party- 비필수 서드파티 하이드레이션 후 로드
3. 리렌더링 최적화 (MEDIUM)
rerender-functional-setstate- 함수형 setState로 안정적 콜백rerender-lazy-state-init- 비용 큰 초기값 지연 초기화rerender-derived-state- 파생 boolean 구독rerender-dependencies- Effect 의존성 좁히기rerender-memo- memo로 비용 큰 작업 분리rerender-transitions- startTransition으로 UI 반응성 유지rerender-ref-callbacks- ref callback으로 DOM 접근 (useRef+useEffect 대체)rerender-avoid-usestate- useState 대체 패턴 판단 가이드rerender-url-state- URL 검색 매개변수로 상태 관리rerender-form-libraries- 폼 라이브러리로 useState 제거rerender-discriminated-union- discriminated union으로 불가능한 상태 방지rerender-use-reducer- useReducer로 복잡한 상태 전이rerender-derived-state-no-effect- 파생 상태를 렌더링 중 계산rerender-defer-reads- 상태 읽기를 사용 시점으로 지연rerender-memo-with-default-value- memo 컴포넌트 기본값 상수 추출rerender-move-effect-to-event- 인터랙션 로직을 이벤트 핸들러로 이동rerender-simple-expression-in-memo- 단순 표현식에 useMemo 사용 금지rerender-use-ref-transient-values- 일시적 값에 useRef 사용rerender-simplify-useeffect- useEffect를 커스텀 훅으로 단순화
4. レンダリングパフォーマンス(MEDIUM)
rendering-animate-svg-wrapper- SVG ラッパーで GPU アクセラレーションrendering-content-visibility- 長いリストの画面外要素を最適化rendering-hoist-jsx- 静的 JSX のホイスティングrendering-conditional-render- 三項演算子で falsy バグを防止rendering-hydration-no-flicker- ハイドレーションの不一致を起こさずにちらつきを防止rendering-activity- Activity/CSS で状態/DOM を保持rendering-svg-precision- SVG 座標の精度を下げる(SVGO)rendering-usetransition-loading- useTransition で手動のローディング状態を置き換えrendering-inp-css-feedback- CSS :active + yield で INP を改善rendering-composition-vs-early-return- Composition と Early Return の選択基準
5. クライアントデータ/イベント(MEDIUM)
client-passive-event-listeners- passive でスクロールの遅延を解消client-localstorage-schema- localStorage のバージョン管理client-sync-external-store- useSyncExternalStore でブラウザー API/外部ストアを購読client-event-listeners- グローバルイベントリスナーの重複を解消client-data-dedup- TanStack Query/SWR でデータ取得の重複を解消client-abort-redundant-work- AbortController で不要な非同期処理をキャンセル
6. JavaScript パフォーマンス(LOW-MEDIUM)
js-index-maps- Map で O(1) の検索js-tosorted-immutable- toSorted() で不変性を維持js-set-map-lookups- Set で O(1) のメンバーシップ検査js-early-exit- 早期リターンで不要な処理を防止js-batch-dom-css- DOM の読み取り/書き込みを分離してレイアウトスラッシングを防止js-cache-function-results- 繰り返し呼び出す関数の結果をモジュールレベルでキャッシュjs-cache-property-access- ループ内のプロパティアクセスをキャッシュjs-cache-storage- localStorage/cookie の読み取りをメモリにキャッシュjs-combine-iterations- 複数の配列走査を単一のループにまとめるjs-hoist-regexp- RegExp をモジュールスコープにホイストjs-length-check-first- 配列を比較する際は先に長さを確認js-min-max-loop- ソートの代わりに単一ループで min/max を求めるjs-iterator-helpers- Iterator Helper で遅延処理
7. 高度なパターン(LOW)
advanced-event-handler-refs- イベントハンドラーを ref に保存(再購読を防止)advanced-use-latest- useEffectEvent/useLatest で安定したコールバック ref を使用advanced-init-once- アプリの初期化をコンポーネントではなくモジュールレベルで行うadvanced-closure-scope- クロージャースコープを分離してメモリーリークを防止
Vercel の元ガイドに追加のルール
このスキルにはフレームワークに依存しないルールのみが含まれています。Next.js/SSR 専用のルールは元ガイドを参照してください。
| ルール | 影響度 | 説明 |
|---|---|---|
server-cache-react | MEDIUM | React.cache() でリクエスト内の重複を排除 |
server-cache-lru | HIGH | LRU キャッシュでリクエスト間をキャッシュ |
server-serialization | HIGH | RSC 境界でのシリアライズを最小限に抑える |
server-parallel-fetching | CRITICAL | コンポーネント構成によるサーバーデータの並列フェッチ |
server-after-nonblocking | MEDIUM | after() によるノンブロッキング後処理 |
server-auth-actions | MEDIUM | サーバーアクションの認証検証 |
server-dedup-props | LOW | 重複する props を削除 |
bundle-dynamic-imports | CRITICAL | next/dynamic による動的インポート |
rendering-hydration-suppress-warning | LOW | suppressHydrationWarning の使用 |
async-api-routes | MEDIUM | API ルートの非同期パターン |
元のドキュメント全体:vercel-labs/agent-skills: react-best-practices
参考資料
- React 公式ドキュメント
- React Compiler - 使用時は
memo()、useMemo()を手動で適用する必要はありません - Vercel: ダッシュボードを 2 倍高速化した方法
- Vercel: パッケージインポートを最適化した方法
コメント
Markdown 対応