mcpField
B
bulletproof-react-components

bulletproof-react-components

github.com/codewithshreyans開発043 回インストール6 週間前に更新
リポジトリ

bulletproof-react-components について

SSR、水和、レンダリング、ポータル、状態の安定性などを扱う9つのパターンで、再利用可能な React コンポーネントの作成とレビューを支援するスキルです。ルール、チェックリスト、詳しい例を含みます。

主な機能

  1. 01React の堅牢性を高める9パターン
  2. 02クイックルールと出荷前チェックリスト
  3. 03patterns.md の詳しい例
  4. 04固定形式の表によるレビュー結果

活用シーン

  1. 01リリース前の再利用可能なコンポーネントのレビュー
  2. 02サーバーレンダリング中のブラウザー API 呼び出しの回避
  3. 03コンポーネント間の ID と状態の確認

インストール

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

$npx skills add https://github.com/codewithshreyans/skills --skill bulletproof-react-components

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

同梱ファイルreferences/patterns.md

詳細

堅牢な React コンポーネント

ハッピーパス以外の実環境でも React コンポーネントが機能するようにする 9 つのパターンです。SSR、ハイドレーション、並行レンダリング、ポータルなどに対応します。

ソース:shud.in/thoughts/build-bulletproof-react-components

仕組み

  1. 再利用可能な React コンポーネントを作成またはレビューする際は、以下のクイックルールを参照します
  2. コード例と詳しい説明については、./references/patterns.md を読みます
  3. リリース前にチェックリストを確認します

クイックルール

#パターンルール
1サーバー対応レンダリング中にブラウザー API(localStorage、window、document)を呼び出してはいけません。useEffect を使用します。
2ハイドレーション対応React のハイドレーション前にクライアント依存の値を設定するため、同期インライン <script> を挿入します。
3インスタンス対応生成する ID にはすべて useId() を使用します。再利用可能なコンポーネントで ID をハードコードしてはいけません。
4並行処理対応リクエストごとの呼び出しを重複排除するため、サーバーのデータ取得を React.cache() でラップします。
5コンポジション対応React.cloneElement() の代わりに Context を使用します。cloneElement は Server Components、lazy、memo で問題を引き起こします。
6ポータル対応イベントリスナーにはグローバルな window ではなく、ref.current?.ownerDocument.defaultView || window を使用します。
7トランジション対応View Transition API のアニメーションを有効にするため、状態更新を startTransition() でラップします。
8Activity 対応<Activity> によって非表示になったときに DOM の副作用(例:<style> タグ)を無効にするには、useLayoutEffect を使用します。
9将来対応安定した同一性には useState(() => value) を使用します。useMemo はパフォーマンス上のヒントにすぎず、React が破棄する可能性があります。

チェックリスト

再利用可能な React コンポーネントを作成する際に、次の点を確認します。

  • レンダリング中にブラウザー API を呼び出していない(サーバー対応)
  • クライアントストレージの値がハイドレーション時に一瞬ちらつかない(ハイドレーション対応)
  • ID をハードコードせず、useId() を使用している(インスタンス対応)
  • サーバーのデータ取得を cache() でラップしている(並行処理対応)
  • cloneElement の代わりに Context を使用している(コンポジション対応)
  • イベントリスナーに ownerDocument.defaultView を使用している(ポータル対応)
  • 必要な箇所で状態更新を startTransition() でラップしている(トランジション対応)
  • DOM の副作用が <Activity> の表示状態に従っている(Activity 対応)
  • 安定した値に useMemo ではなく useState の初期化関数を使用している(将来対応)

結果をユーザーに提示する

これらのパターンに照らしてコンポーネントをレビューする際は、次の形式にします。

**Bulletproof Check: `<ComponentName>`**

| Pattern | Status | Notes |
|---------|--------|-------|
| Server-Proof | PASS/FAIL | ... |
| ... | ... | ... |

**Suggested fixes:**
1. ...

参考資料

  • ./references/patterns.md — 9 つすべてのパターンについて、詳細なコード例(悪い例/良い例)を掲載

コメント