mcpField
R
react-best-practices

react-best-practices

github.com/itallstartedwithaidea開発4477 回インストール29 週間前に更新
リポジトリ

react-best-practices について

react-best-practicesは、Reactコードの作成やレビューを行うエージェント向けのスキルです。ネットワークのウォーターフォールやバンドルサイズからコンポーネント最適化まで、影響度順に実行可能なルールを整理します。

主な機能

  1. 018カテゴリにわたる40以上のルール
  2. 02重要度とコード例を提示
  3. 03性能への影響順に修正を優先
  4. 04データ取得、バンドル、レンダリングの指針

活用シーン

  1. 01Reactコードの性能問題をレビュー
  2. 02遅いページ読み込みや操作を調査
  3. 03JavaScriptバンドルサイズを削減
  4. 04Core Web Vitalsを改善

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill react-best-practices

インストール後、Claude Code で/react-best-practicesを入力して読み込まれたか確認します。

詳細

React ベストプラクティス

googleadsagent.ai™ による Agent Skills™ の一部です。

説明

React Best Practices では、クリティカル(ウォーターフォールの排除、バンドルサイズの削減)から低〜中程度(JavaScript のマイクロ最適化)まで、8 つの優先度カテゴリにわたる 40 以上のルールを体系化しています。各ルールは実行可能な内容で、重要度の評価とコードの修正前後の例を含みます。エージェントは React コードの作成時やレビュー時に、これらのルールを自動的に適用します。

ルールは実装の容易さではなく、影響度の順に並んでいます。クライアントとサーバー間のウォーターフォールを排除し、バンドルサイズを削減することが、最も大きなパフォーマンス向上につながるため、クリティカルに分類されています。次に、サーバーサイドレンダリングのパフォーマンスと、クライアントでのデータフェッチパターンが続きます。開発者が真っ先に取り組みがちな再レンダリングの最適化は、ネットワークやバンドルの問題と比べてユーザーが体感するパフォーマンスに測定可能な問題を引き起こすことはまれなため、中程度に分類されています。

このスキルでは、React のパフォーマンスをコンポーネントの特性ではなく、システム全体の特性として捉えます。最も効果の高い最適化は、データの取得場所、バンドルの分割方法、採用するレンダリング戦略といった、アーキテクチャレベルで行われます。コンポーネントレベルの最適化(メモ化、キーの安定性)も含まれていますが、適切に優先度を下げています。

使用する場面

  • 新しい React コンポーネントやページを作成するとき
  • React コードのパフォーマンス上の問題をレビューするとき
  • ページの読み込みが遅い、または操作の反応が鈍い問題をデバッグするとき
  • Core Web Vitals(LCP、FID、CLS)を最適化するとき
  • クライアントサイドレンダリングからサーバーサイドレンダリングに移行するとき
  • JavaScript バンドルサイズを削減するとき

動作の仕組み

graph TD
    A[React Code Change] --> B{Priority Scan}
    B --> C["🔴 Critical: Waterfalls"]
    B --> D["🔴 Critical: Bundle Size"]
    B --> E["🟠 High: Server Perf"]
    B --> F["🟡 Med-High: Client Fetch"]
    B --> G["🟡 Medium: Re-renders"]
    B --> H["🟡 Medium: Render Perf"]
    B --> I["🔵 Low-Med: Micro-opts"]
    C --> J[Apply Fixes by Priority]
    D --> J
    E --> J
    F --> J
    G --> J
    H --> J
    I --> J

ルールは優先度の高い順に評価されます。クリティカルな問題はブロッカーとして指摘され、優先度の低い項目は提案として記載されます。エージェントは最も影響度の高い修正から適用します。

実装

クリティカル:クライアントとサーバー間のウォーターフォールを排除する
// BAD: Sequential fetches create waterfalls
function Dashboard() {
  const user = use(fetchUser());         // 200ms
  const posts = use(fetchPosts(user.id)); // 200ms after user resolves
  const stats = use(fetchStats(user.id)); // 200ms after user resolves
  // Total: 600ms sequential
}

// GOOD: Parallel fetches with server components
async function Dashboard() {
  const user = await fetchUser();
  const [posts, stats] = await Promise.all([
    fetchPosts(user.id),
    fetchStats(user.id),
  ]);
  // Total: 400ms (user + parallel posts/stats)
}
クリティカル:バンドルサイズを削減する
// BAD: Import entire library
import { format } from "date-fns";

// GOOD: Tree-shakeable import
import { format } from "date-fns/format";

// BAD: Eager loading heavy components
import { HeavyChart } from "./HeavyChart";

// GOOD: Lazy loading with Suspense
const HeavyChart = lazy(() => import("./HeavyChart"));
中程度:再レンダリングを最適化する
// BAD: New object reference every render
<UserContext.Provider value={{ user, theme, locale }}>

// GOOD: Stable reference with useMemo
const contextValue = useMemo(
  () => ({ user, theme, locale }),
  [user, theme, locale]
);
<UserContext.Provider value={contextValue}>

ベストプラクティス

  • 中程度または低優先度の項目を最適化する前に、クリティカルな問題を解決してください
  • 最適化の前に測定してください。React DevTools Profiler と Lighthouse を使用します
  • データフェッチにはサーバーコンポーネントを優先し、クライアントコンポーネントはインタラクティブな機能に限定してください
  • 初期ビューポートに表示されないコンポーネントには、dynamic(() => import(...)) を使用してください
  • 早まって useMemo/useCallback を使わないでください。まずプロファイリングを行い、再レンダリングにコストがかかっていることを確認してください
  • ハイドレーションのコストを最小限に抑えるため、クライアントコンポーネントの境界はできるだけ狭くしてください

プラットフォームの互換性

プラットフォームサポート備考
Cursor完全Lint とレビューの統合
VS Code完全ESLint プラグインをサポート
Windsurf完全React を考慮した分析
Claude Code完全コードレビューへの適用
Cline完全ルールベースのレビュー
aider部分的ルールを手動で適用

関連スキル

キーワード

react performance best-practices bundle-size waterfall-elimination server-components re-render-optimization core-web-vitals


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

コメント