vercel-composition-patterns
真偽値の引数を足して部品を分岐させる書き方をやめさせ、組み合わせで作る React の部品の設計に寄せる。複合部品・状態の持ち上げ・文脈の型・明示的な派生など 8 つの規則を、悪い例と良い例で示す
npx skills add vercel-labs/agent-skills/vercel-composition-patterns入れる前にこのスキルがすること・注意点・SKILL.md の原文を確かめてください。解析は安全性の判定ではありません。
- インストール
- 430,647
- 実用度
- 37
- GitHub star
- 33,634
- 最終更新
- 2026/10/29
頼み方の例
そのままコピーして使えますvercel-composition-patternsスキルを使って、この Composer 部品の props を見直してください。真偽値の引数が増えている所と、状態が部品の中に閉じ込められている所を挙げ、どの規則に当たるかを示してください。書き換えはまだしないでください。
対象のファイルや状況は、ご自身の作業に合わせて置き換えてください。
このスキルがすること
SKILL.md の記述から機械的に抽出- 外部通信・シェル実行・ファイル操作の記述は見つかりませんでした
これは安全性の判定ではありません。 SKILL.md にそう書かれているという事実だけを並べています。実際に問題があるかは使い方と文脈で決まるため、当サイトでは断定しません。導入前に SKILL.md の原文を確認してください。
SKILL.md の規模
いつ使うか
React の部品に isThread isEditing のような真偽値の引数が増えてきたときに効くスキルです。引数で振る舞いを切り替える代わりに、小さな部品を組み合わせて作る形へ寄せます。
本文が挙げる場面は、真偽値の引数が多い部品の書き直し、使い回す部品集の作成、柔軟な部品の API の設計、部品の構成の見直しです。同じ公開元の vercel-react-best-practices が性能の規則なのに対し、こちらは部品の組み方の規則です。
- 規則(4 分類)
- 8 件
- 同梱ファイル(2026-10-23 時点)
- 13 件
- SKILL.md の大きさ(2026-10-23 時点)
- 2,886 バイト
- 全規則をまとめた AGENTS.md(2026-10-23 時点)
- 22,627 バイト
SKILL.md は目次で、中身は規則のファイル
SKILL.md には、規則の名前と 1 行の説明しかありません。悪い例と良い例のコードは rules/ の規則ごとのファイルにあり、全部を 1 枚にまとめた AGENTS.md もあります。
規則のファイルは、なぜ大事か、悪いコードの例、良いコードの例、補足、の順で書かれています。例はどれも、チャットの投稿欄(Composer)を題材にした続きものです。
8 つの規則
- 真偽値の引数を増やさない引数 1 つで状態の組み合わせが倍になる。組み合わせで作る
- 複合部品にする共有の文脈を持つ親と子の部品に分け、使う側が要る部品だけを並べる
- 状態の持ち方を UI から切り離す状態をどう管理するかを知るのは Provider だけ
- 文脈の型を決める文脈を state・actions・meta の 3 つに分けた共通の型にし、Provider を差し替えられるようにする
- 状態を Provider に持ち上げる枠の外にある部品からも状態と操作に届くようにする
- 明示的な派生を作る
ThreadComposerEditMessageComposerのように、用途ごとの部品を作る - renderX より children構造を組むなら children。親から値を渡すときだけ描画関数を使う
- React 19 の書き方
forwardRefを使わずrefを普通の引数に。useContextの代わりにuse()
分類と重みの付き方
SKILL.md の表では、部品の構成が「HIGH」、状態の管理・実装の型・React 19 が「MEDIUM」です。規則の数は、部品の構成 2、状態の管理 3、実装の型 2、React 19 が 1 です。
要の考え方は「見た目の入れ子ではなく Provider の範囲」
文脈の型の規則にある考え方が、全体を貫いています。状態を共有したい部品どうしは、見た目の上で入れ子になっている必要はなく、同じ Provider の内側にいればよい、というものです。
本文の例では、転送のダイアログの中で、投稿欄の外にあるプレビューと送信ボタンが、投稿欄の状態を読み、送信の操作を呼んでいます。Provider を差し替えれば、同じ UI が手元の状態でも、全体で同期する状態でも動きます。
状態の持ち上げで避ける 3 つの書き方
状態の持ち上げの規則は、悪い例を 3 つ挙げています。
部品の中に閉じ込める
枠の外のボタンやプレビューが状態に届かない
useEffect で親へ写す
変わるたびに写す処理が走る
ref で送信時に読む
送信の瞬間に ref から状態を抜き出す
3 つとも、Provider に状態を持ち上げる 1 つの形で置き換えます。
使わないほうがいいとき
性能を詰めたいとき
このスキルは部品の組み方を扱い、描画の回数や読み込みの速さは扱いません。性能なら vercel-react-best-practices です。
見た目や使い勝手を見直したいとき
画面の使い勝手や読みやすさの点検なら、同じ公開元の web-design-guidelines が合います。画面の移り変わりの動きなら vercel-react-view-transitions です。
小さな部品で、分岐が 1 つ 2 つのとき
規則は、分岐が増えて手に負えなくなった部品を前提にしています。引数が 1 つ増えただけの部品を複合部品に分けると、かえってファイルが増えます。どこまで分けるかは、使い回す範囲で決めてください。
注意点
解析で分かること
SKILL.md の解析では、外部通信・シェル実行・ファイル書き換えの記述は見つかっていません。同梱ファイルは 13 件で、規則のファイル 8 件、分類の定義と新しい規則の雛形、AGENTS.md、README.md、metadata.json です。スクリプトはありません(2026-10-23 時点)。
規則に沿って書き直させると、部品のファイルは分かれて増えます。直させる前に、どの部品まで触るかを決めてください。
React 19 の規則は版を確かめてから
重みの表記がファイルによって違う
SKILL.md と AGENTS.md は部品の構成を「HIGH」としていますが、規則のファイルでは、真偽値の引数の規則が「CRITICAL」です。README.md は分類を CRITICAL・HIGH・MEDIUM で書き、React 19 の分類を載せていません。
優先の順は、どれでも部品の構成が先頭です。表記の違いで迷ったら、規則のファイルの中身で判断してください。
例のコードは React Native 寄りの書き方を含む
例の部品は TextInput や onPress を使っていて、React Native の書き方に近い所があります。Web の React なら input と onChange に読み替えます。考え方はどちらでも同じです。
ライセンスは MIT
SKILL.md の frontmatter に MIT とあります。metadata.json は版を 1.0.0、日付を 2026 年 1 月とし、参照先に React の公式の文書を挙げています。
インストール数の推移
日次で記録9月18日 〜 11月7日(49日分)
インストール数と 1 日あたりの増加は Skillselion が に集計した値です。上流の更新は数日おきなので、前日比ではありません。GitHub star と最終更新は に GitHub から取得しました。
併用すると強いスキル
vercel-react-best-practices
React と Next.js の性能の規則 70 件。重みで並べ、待ち行列の解消を最上位に置く
vercel-react-view-transitions
React の View Transition(ViewTransition の部品)で、画面の切り替えにブラウザの遷移の動きを付けさせる。共通の要素のつなぎ、読み込み完了の表示、一覧の並べ替え、出入り、頁の移動の 5 つを優先の順に。安定版の React には無い機能を使う
web-design-guidelines
画面のコードを Vercel の基準で点検させる。基準は毎回取りに行くので手元に無い
よくある質問
真偽値の引数は 1 つも使ってはいけないのですか
本文は、振る舞いを切り替えるための真偽値の引数を足すな、としています。理由は、引数が 1 つ増えるたびに状態の組み合わせが倍になり、条件分岐が手に負えなくなるからです。用途ごとの部品に分ければ、それぞれが何を描くかがコードから読めます。
描画関数を渡す書き方(render props)は使えなくなりますか
使えます。規則は、親が子に値を渡す必要があるときは描画関数がよく合う、としています。本文の例は、一覧の各項目を renderItem で描く形です。構造を組むだけなら children を使え、という使い分けです。
状態管理のライブラリは何を使えばいいですか
決めていません。本文の立場は、Provider だけが状態の持ち方を知り、UI は文脈の型だけを見る、というものです。useState でも Zustand でもサーバーとの同期でも、Provider の中に閉じ込めれば UI は変わりません。
対応しているエージェントはどれですか
Claude Code です。リポジトリの根にある AGENTS.md が、Claude Code への手動の入れ方(~/.claude/skills/ への写し)を書いています(2026-10-23 確認)。同じ文書は claude.ai での使い方にも触れていますが、当サイトの表示は Claude Code だけです。