React/Next.jsのプロジェクトで、UI=計算モデル(コンポーネント/状態/レンダリング)を軸に、設計・実装・レビュー・性能改善の判断を整理する。doc/input/rdd.md に「技術スタック React」または「技術スタック Next.js」があるリポジトリ、あるいはReactの状態管理/レンダリング/Server Components/SSR/Streaming/バンドル/パフォーマンス相談で使う。
Scanned 5/31/2026
Install via CLI
openskills install diegosouzapw/awesome-omni-skill---
name: react
category: tech
user-invocable: false
description: React/Next.jsのプロジェクトで、UI=計算モデル(コンポーネント/状態/レンダリング)を軸に、設計・実装・レビュー・性能改善の判断を整理する。doc/input/rdd.md に「技術スタック React」または「技術スタック Next.js」があるリポジトリ、あるいはReactの状態管理/レンダリング/Server Components/SSR/Streaming/バンドル/パフォーマンス相談で使う。
---
# React UI Computation Skill
## 公式情報
- [React](https://react.dev)
- [React Docs](https://react.dev/learn)
- [Next.js](https://nextjs.org)
- [Next.js Docs](https://nextjs.org/docs)
## 発火条件(リポジトリ判定)
- まず `doc/input/rdd.md` を確認し、`技術スタック React` または `技術スタック Next.js` があれば、このSkillの方針をデフォルト採用する。
- 記載がなくても、依頼がReact/Next/コンポーネント設計/状態管理/レンダリング/SSR/パフォーマンス最適化なら適用する。
## このSkillの基本方針(まえちゃん向けの“整理軸”)
- 基本方針: UIは「状態→描画」の計算。コンポーネントは計算単位として設計する。
- レンダリング: SSR/CSR/SSG/Streamingは“いつUIを完成させるか”の設計。要件(SEO/速度/更新頻度)から選ぶ。
- 境界: 「クライアントに送るJS」と「サーバーに置く処理」の境界を意識する。送らない最適化は強い。
- パフォーマンス: 体感(LCP/INP/CLS)に効く順に当てる。JS送信量・画像・フォント・3rd partyを疑う。
- 参考: [React](https://react.dev) / [Next.js](https://nextjs.org)
## 思想(判断ルール)
1. コンポーネントは「UI部品」ではなく「UI計算の単位」。責務と境界を小さく保つ。
2. stateは最小に。stateの置き場所は“依存する範囲の最小の上”に置く(持ち上げすぎない/分散しすぎない)。
3. 再レンダリングは悪ではないが、無意味な再計算は避ける。計算コスト/DOMコスト/ネットワークコストを分けて見る。
4. “どこまでクライアントに送るか”は設計。初期表示と操作体験の優先順位で決める。
5. Next.js(App Router)文脈では、Server/Clientの境界(RSC/Client Component)を「責務分離」として扱う。魔法ではなく制約の設計。
## 進め方(質問テンプレ)
最初に必ず以下を確認してから提案する:
- これは「サイト」寄り?「アプリ」寄り?(状態・操作が多いか)
- 重要なのは初期表示?操作体験?SEO?(優先順位)
- データはどこから?更新頻度は?(キャッシュ可能性)
- 速度の課題は何?(LCP/INP/CLS/TTFB のどれ)
- ルーティング/フォーム/認証はある?(責務分離の必要性)
## 出力フォーマット(必ずこの順)
1. 推奨方針(1〜3行)
2. 理由(Web制約 / DX / 保守性 / 性能)
3. 設計案(コンポーネント境界 / state配置 / データ取得 / レンダリング戦略 / バンドル・資産 / キャッシュ)
4. チェックリスト(実装前に確認)
5. 落とし穴(避けるべき)
6. 次アクション(小さく試す順)
## チェックリスト(設計/実装レビュー用)
### コンポーネント境界
- [ ] コンポーネントの責務が大きすぎないか(表示・状態・副作用・データ取得が混ざりすぎてないか)
- [ ] propsの受け渡しが深すぎないか(必要ならContextや分割を検討)
- [ ] 再利用のための抽象化が早すぎないか(読みにくさが勝ってないか)
### state・副作用
- [ ] stateが最小か(derived stateを持ってないか)
- [ ] effectは「同期の穴埋め」になっていないか(まずデータフローを疑う)
- [ ] 非同期処理の責務(ロード/エラー/リトライ)がUIと分離できているか
### レンダリング・配信
- [ ] SSR/CSR/SSG/Streamingの選択理由が説明できるか
- [ ] クライアントに送るJS量を説明できるか(“送らない”選択肢を検討したか)
- [ ] 画像/フォント/3rd partyが体感を壊していないか
### Next.js(該当時)
- [ ] Server/Client境界が妥当か(Clientに寄せすぎてないか)
- [ ] データ取得をUIの近くに置きつつ、秘密情報がクライアントに漏れないか
- [ ] キャッシュ方針(更新頻度/再生成/無効化)が言語化できるか
## よくある落とし穴
- 「とりあえず全部Client」にして送信量が膨らみ、初期表示とINPが悪化する
- stateが持ち上がりすぎて、少しの変更で全体が再レンダリングされる設計になる
- derived stateを増やして、同期ズレ・バグ・複雑性が増える
- useEffectで辻褄合わせを始めて、原因(データフロー/責務)が見えなくなる
- パフォーマンス改善が“メモ化の儀式”になり、真因(画像/3rd party/通信)が放置される
No comments yet. Be the first to comment!