react-best-practices について
React 開発者向けのパフォーマンス最適化スキルです。バンドル、レンダリング、非同期処理、ブラウザー動作に関する 29 のルールを、カテゴリと影響度で整理しています。
主な機能
- 01カテゴリと影響度で整理した 29 のルール
- 02バンドルサイズ最適化の指針
- 03再レンダリング防止のパターン
- 04レンダリングと非同期処理の推奨事項
- 05JavaScript とブラウザーの実践方法
活用シーン
- 01コンポーネントの再レンダリング調査
- 02バンドルサイズの削減
- 03useEffect と useMemo の使い方の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ redpanda-data/ console --skill react-best-practicesインストール後、Claude Code で/react-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
rules/advanced-event-handler-refs.mdadvanced-use-latest.mdasync-defer-await.mdasync-dependencies.mdasync-suspense-boundaries.mdbundle-barrel-imports.mdbundle-code-splitting.mdbundle-preload.mdclient-event-listeners.mdclient-passive-event-listeners.mdjs-batch-dom-css.mdjs-caching-patterns.mdjs-index-maps.mdjs-length-check-first.mdjs-tosorted-immutable.mdrendering-activity.mdrendering-animate-svg-wrapper.mdrendering-conditional-render.mdrendering-content-visibility.mdrendering-hoist-jsx.mdrendering-svg-precision.mdrerender-defer-reads.mdrerender-dependencies.mdrerender-derived-state.mdrerender-functional-setstate.mdrerender-lazy-state-init.mdrerender-memo.mdrerender-simple-expression-in-memo.mdrerender-transitions.mduse-effect.md詳細
React のベストプラクティス
Cloud UI 向けのクライアントサイド React 最適化パターンです。カテゴリと影響度別に整理された 29 のルールを紹介します。
適用条件
- パフォーマンス最適化タスク
- コンポーネントの再レンダリングに関する問題
- バンドルサイズに関する懸念
- useEffect/useMemo のパターン
カテゴリ別のルール
バンドルの最適化(CRITICAL)
| ルール | 要点 |
|---|---|
bundle-barrel-imports | バレルの index.ts ではなく、ソースファイルからインポートします |
bundle-code-splitting | 大きなコンポーネント、条件付き読み込み、遅延読み込みするサードパーティーライブラリには React.lazy + Suspense を使います |
bundle-preload | 重要なリソースをプリロードします |
再レンダリングの防止(HIGH)
| ルール | 要点 |
|---|---|
rerender-memo | コストの高い計算をメモ化します |
rerender-dependencies | フックの依存配列を最小限にします |
rerender-derived-state | エフェクト内ではなく、レンダリング中に計算します |
rerender-functional-setstate | 古いクロージャーを避けるために setState(prev => ...) を使います |
rerender-lazy-state-init | useState(expensive()) ではなく useState(() => expensive()) を使います |
rerender-simple-expression-in-memo | 単純な式はメモ化しません |
rerender-transitions | 緊急性の低い更新には useTransition を使います |
rerender-defer-reads | URL パラメーターやストレージはレンダリング時ではなく、コールバック内で読み取ります |
レンダリング(MEDIUM)
| ルール | 要点 |
|---|---|
rendering-conditional-render | && / 三項演算子で短絡評価し、エフェクト内でのレンダリングは避けます |
rendering-hoist-jsx | 静的な JSX をコンポーネントの外に移動します |
rendering-content-visibility | 画面外の要素には CSS content-visibility: auto を使います |
rendering-activity | 非表示の UI には React <Activity> を使います |
rendering-animate-svg-wrapper | アニメーションする SVG をラップして、再レンダリングを分離します |
rendering-svg-precision | SVG 座標の精度を抑えます |
非同期処理(MEDIUM)
| ルール | 要点 |
|---|---|
async-suspense-boundaries | 粒度の細かい <Suspense> 境界を設けます |
async-defer-await | ブロックしない処理は await しません |
async-dependencies | 依存関係は順次ではなく、並列で読み込みます |
JavaScript(MEDIUM)
| ルール | 要点 |
|---|---|
js-caching-patterns | 繰り返し呼び出しやストレージ読み取りには、モジュールレベルの Map キャッシュを使います |
js-batch-dom-css | レイアウトスラッシングを避けるため、DOM の読み取りと書き込みをまとめて行います |
js-index-maps | 配列を事前に Map へインデックス化し、O(1) で検索できるようにします |
js-length-check-first | コストの高い操作の前に .length を確認します |
js-tosorted-immutable | 不変の変換には .toSorted() / .toReversed() を使います |
正規表現の巻き上げは Biome(useTopLevelRegex)によって適用されます。
ブラウザー(MEDIUM)
| ルール | 要点 |
|---|---|
client-event-listeners | useEffect の戻り値でイベントリスナーをクリーンアップします |
client-passive-event-listeners | スクロールやタッチのハンドラーには { passive: true } を指定します |
高度なテクニック(LOW)
| ルール | 要点 |
|---|---|
advanced-event-handler-refs | 子コンポーネントの再レンダリングを避けるため、安定したコールバック ref を使います |
advanced-use-latest | コールバック内で常に最新の値を使うには、useLatest パターンを使います |
コメント
Markdown 対応