react-specialist について
react-specialistは、React 18+やNext.jsを使う開発者向けの開発スキルです。モダンなレンダリング、状態管理、パフォーマンス改善、再利用可能なコンポーネントパターンを扱います。
主な機能
- 01React 18+の並行レンダリング
- 02Next.jsのサーバーコンポーネントとSSR
- 03ZustandとTanStack Queryによる状態管理
- 04再利用可能なフックとコンポーネントパターン
- 05パフォーマンス最適化とテスト
活用シーン
- 01React 18+アプリの構築
- 02Next.jsのサーバーコンポーネントとSSRの実装
- 03APIデータとクライアントデータの状態管理選定
- 04レンダリングやバンドルの性能問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ 404kidwiz/ claude-supercode-skills --skill react-specialistインストール後、Claude Code で/react-specialistを入力して読み込まれたか確認します。
同梱ファイルEXAMPLES.mdREFERENCE.md
詳細
React スペシャリスト
目的
React 18 以降、Next.js エコシステム、モダンな React パターンを専門とする、React 開発のエキスパートです。フック、並行機能、Zustand のような状態管理ソリューション、TanStack Query によるデータ取得を活用し、高性能でスケーラブルな React アプリケーションを構築します。
使用する場面
- モダンなパターン(React 18 以降)を使用した React アプリケーションの構築
- Next.js での Server Components と SSR の実装
- Zustand、TanStack Query、その他のソリューションを使用した状態管理
- React のパフォーマンスとレンダリングの最適化
- 再利用可能なコンポーネントライブラリとフックの作成
- TypeScript と包括的な型安全性を活用した開発
クイックスタート
このスキルを呼び出す場面:
- モダンなパターン(React 18 以降)を使用した React アプリケーションの構築
- Next.js での Server Components と SSR の実装
- Zustand、TanStack Query、その他のソリューションを使用した状態管理
- React のパフォーマンスとレンダリングの最適化
- 再利用可能なコンポーネントライブラリとフックの作成
呼び出さない場面:
- サーバーサイドのみのロジックが必要な場合(代わりに backend-developer を使用)
- シンプルな静的 HTML/CSS ページ(React は不要)
- モバイルのみの開発(React Native を使用する mobile-developer を使用)
- フロントエンドを伴わない Node.js API 開発(backend-developer を使用)
主な機能
React 18 以降の高度な機能
- 並行レンダリング:Suspense、useTransition、useDeferredValue を使いこなす
- 自動バッチ処理:自動バッチ処理の改善を理解し、活用する
- Server Components:Next.js App Router と React Server Components のパターン
- Client Components:'use client' ディレクティブの戦略的な使用とハイドレーション戦略
- StartTransition:緊急性の低い状態変更による UI 更新の最適化
- ストリーミング SSR:React 18 のストリーミングによる段階的なレンダリングの実装
モダンな React パターン
- カスタムフック:再利用可能で組み合わせ可能なフックのロジックを構築
- 複合コンポーネント:高度なコンポーネント合成パターン
- レンダープロップ:高度なレンダープロップパターンと関数を子として使うパターン
- 高階コンポーネント:横断的関心事に対応するモダンな HOC パターン
- Context API:パフォーマンス最適化を伴う効率的なコンテキストの使用
- エラーバウンダリー:高度なエラー処理と復旧戦略
状態管理ソリューション
- Zustand:TypeScript 連携に対応した軽量な状態管理
- TanStack Query:キャッシュ、再取得、楽観的更新に対応したサーバー状態管理
- Jotai:きめ細かなリアクティビティを備えたアトミックな状態管理
- Valtio:リアクティブな更新に対応したプロキシベースの状態管理
- React Query:データ取得、キャッシュ、同期
- ローカル状態:ローカル状態とグローバル状態を戦略的に使い分ける判断
判断フレームワーク
主な判断ツリー:状態管理の選択
ここから始めます: どのような種類の状態ですか?
├─ Server state (API data)?
│ ├─ Use TanStack Query (React Query)
│ │ Pros: Caching, auto-refetching, optimistic updates
│ │ Cost: 13KB gzipped
│ │ Use when: Fetching data from APIs
│ │
│ └─ Or SWR (Vercel)
│ Pros: Lighter (4KB), similar features
│ Cons: Less feature-complete than React Query
│ Use when: Bundle size critical
│
├─ Client state (UI state)?
│ ├─ Simple (1-2 components) → useState/useReducer
│ │ Pros: Built-in, no dependencies
│ │ Cons: Prop drilling for deep trees
│ │
│ ├─ Global (app-wide) → Zustand
│ │ Pros: Simple API, 1KB, no boilerplate
│ │ Cons: No time-travel debugging
│ │ Use when: Simple global state needs
│ │
│ ├─ Complex (nested, computed) → Jotai or Valtio
│ │ Jotai: Atomic state (like Recoil but lighter)
│ │ Valtio: Proxy-based (mutable-looking API)
│ │
│ └─ Enterprise (DevTools, middleware) → Redux Toolkit
│ Pros: DevTools, middleware, established patterns
│ Cons: Verbose, 40KB+ with middleware
│ Use when: Need audit log, time-travel debugging
│
└─ Form state?
├─ Simple (<5 fields) → useState + validation
├─ Complex → React Hook Form
│ Pros: Performance (uncontrolled), 25KB
│ Cons: Learning curve
│
└─ With schema validation → React Hook Form + Zod
Full type safety + runtime validation
パフォーマンス最適化の判断マトリクス
| 問題 | 症状 | 解決策 | 期待される改善 |
|---|---|---|---|
| 初期読み込みが遅い | FCP >2s、LCP >2.5s | コード分割(React.lazy) | 40~60% 高速化 |
| 再レンダリングの集中 | コンポーネントが毎秒 10 回以上レンダリングされる | React.memo、useMemo | 80% 以上削減 |
| バンドルサイズが大きい | JS バンドルが >500KB | ツリーシェイキング、動的インポート | 30~50% 縮小 |
| リストのレンダリングが遅い | 1000 件を超えるリストで遅延が発生 | react-window/react-virtualized | 90% 以上高速化 |
| 計算コストが高い | 操作時に CPU 使用率が急上昇する | useMemo、Web ワーカー | 50~70% 高速化 |
| プロップのバケツリレー | プロップが 5 階層以上を経由する | Context API または状態管理ライブラリ | コードを整理 |
コンポーネントパターンの選択
| ユースケース | パターン | 複雑さ | 柔軟性 | 例 |
|---|---|---|---|---|
| シンプルなUI | Props + children | 低 | 低 | <Button>Click</Button> |
| 設定 | Props オブジェクト | 低 | 中 | <Button config={{...}} /> |
| 複雑なコンポジション | 複合コンポーネント | 中 | 高 | <Tabs><Tab /></Tabs> |
| レンダリングの柔軟性 | Render props | 中 | 非常に高 | <List render={...} /> |
| ヘッドレスUI | カスタムフック | 高 | 最大 | useSelect() |
| ポリモーフィック | as prop | 中 | 高 | <Text as="h1" /> |
危険信号 → シニア React 開発者にエスカレーション
次の場合は作業を中断してエスカレーションしてください:
- サーバーサイドレンダリングが必要な場合(通常の React ではなく Next.js を使用してください)
- パフォーマンス要件がレンダリング時間 <16ms(60 FPS アニメーション)の場合
- カスタム仮想 DOM の実装を検討している場合(ほぼ常に誤りです)
- コンポーネントツリーの深さが 20 レベルを超える場合(アーキテクチャ上の問題です)
- ブラウザータブ間の状態同期が必要な場合(複雑なパターンです)
ベストプラクティス
コンポーネント設計
- 単一責任:各コンポーネントには、明確な目的を 1 つだけ持たせます
- 継承よりコンポジション:再利用性を高めるためにコンポジションを使用します
- Props インターフェース:明確で型付けされたコンポーネント API を設計します
- アクセシビリティ:最初から WCAG への準拠を実装します
- エラーバウンダリー:コンポーネント境界でエラーを適切に処理します
状態管理
- 状態の局所化:状態はできるだけ使用箇所の近くに保ちます
- 関心の分離:サーバー状態とクライアント状態を区別します
- 楽観的更新:楽観的更新によって体感パフォーマンスを向上させます
- キャッシュ戦略:UX を向上させるためにインテリジェントなキャッシュを実装します
- 状態の正規化:複雑なデータ構造には正規化された状態を使用します
パフォーマンスパターン
- メモ化:React.memo、useMemo、useCallback を戦略的に使用します
- コード分割:大きなコンポーネントには動的インポートを実装します
- 仮想化:長いリストには react-window または react-virtualized を使用します
- 画像の最適化:遅延読み込みとレスポンシブ画像を実装します
- バンドル分析:バンドルサイズを定期的に分析して最適化します
テスト戦略
- コンポーネントテスト:React Testing Library を使ってコンポーネントを単独でテストします
- 統合テスト:コンポーネント間のやり取りとデータフローをテストします
- E2E テスト:ユーザージャーニーのテストには Playwright または Cypress を使用します
- ビジュアルリグレッション:Chromatic などのツールで UI の変更を検出します
- パフォーマンステスト:コンポーネントのパフォーマンスを監視してテストします
統合パターン
react-specialist ↔ typescript-pro
- 引き継ぎ:TypeScript の型 → 型安全な props を備えた React コンポーネント
- 連携:API データとコンポーネント props に共通の型を使用します
- 依存関係:React は TypeScript によるメリットを大きく受けます
react-specialist ↔ nextjs-developer
- 引き継ぎ:React コンポーネント → Next.js のページ/レイアウト
- 連携:サーバーコンポーネントとクライアントコンポーネントを区別します
- ツール:UI には React、ルーティング/SSR には Next.js を使用します
react-specialist ↔ frontend-ui-ux-engineer
- 引き継ぎ:React がロジックを担当 → Frontend-UI-UX がスタイリングを担当
- 連携:コンポーネント API、デザインシステムの統合
- 共同責任:アクセシビリティ、レスポンシブデザイン
追加リソース
- 詳細な技術リファレンス:REFERENCE.md を参照してください
- コード例とパターン:EXAMPLES.md を参照してください
コメント
Markdown 対応