figma-analyze-component-set について
figma-analyze-component-setは、FigmaのコンポーネントセットをCSS生成用の設計図に変換するスキルです。バリアント軸を特定し、状態をCSSまたはARIAセレクターに対応付け、デザインシステム実装向けにデフォルトとの差分を示します。
主な機能
- 01バリアント軸とコンポーネントプロパティの抽出
- 02状態とCSS・ARIAセレクターの対応付け
- 03デフォルトからのバリアント差分の提示
- 04バインド変数からトークン名への解決
- 05CSSルール生成と検証のガイド
活用シーン
- 01FigmaのボタンバリアントをCSS状態に変換
- 02デザインシステムのセットからコンポーネントスタイルを作成
- 03生成ルールが全状態を網羅するか確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ southleft/ figma-console-mcp-skills --skill figma-analyze-component-setインストール後、Claude Code で/figma-analyze-component-setを入力して読み込まれたか確認します。
同梱ファイルscripts/analyze-component-set.js
詳細
figma-analyze-component-set — バリアント状態マシン → CSS
Figma の COMPONENT_SET(1 つのコンポーネントのすべてのバリアントを囲む紫色の破線コンテナー)を、コード生成の設計図に変換します。どのプロパティ軸が状態で、どの軸がサイズか、各状態をどの CSS 疑似クラスまたは ARIA 属性に対応させるか、そして各状態がデフォルトのバリアントに適用する最小限の見た目の差分を示します。これは、「Figma には 12 種類のボタンバリアントがある」から「.btn ルールを 1 つと、:hover/:disabled のオーバーライドを出力する」への橋渡しです。
スキルの適用範囲
use_figmaのルール — まず公式のfigma-useスキルを読み込んでください。これは Figma Plugin API の完全なリファレンスです。これらのスクリプトが前提とする重要事項は、トップレベルのawaitとreturnを使ったプレーンな JS(IIFE やfigma.closePlugin()は使わないこと。console.logは返されません)、各スクリプトの先頭で入力をconstとしてインライン化すること、色の値を 0~1 の範囲にすること、テキスト操作の前にフォントを読み込むこと、await figma.getNodeByIdAsync(...)を使うこと、そしてアトミックエラー(スクリプトが失敗すると何も適用されません。エラーを読み、修正して再試行してください)です。- 完全な再帰ツリー(深さ無制限、リアクション、インスタンス参照)→
figma-deep-componentを使用してください。 - バリアントをラベル付きグリッドに再編成する→
figma-arrange-component-setを使用してください。 - プロパティ自体を追加/削除する→
figma-component-propertiesを使用してください。 - これはデザインシステムのコード生成機能であり、ネイティブ MCP の
get_design_context/get_metadataでは提供されません。これらは生の構造を返すだけで、バリアントから CSS 状態マシンへの変換は行いません。
ワークフロー
- COMPONENT_SET の ID を取得します。 ユーザーの選択(
figma_get_selection)、検索、またはユーザーが貼り付けたノード ID から取得します。個別のバリアントではなく、セットである必要があります。スクリプトが型を検証します。 use_figmaを使ってscripts/analyze-component-set.jsを実行します (skillNames: "figma-analyze-component-set")。最初にconst COMPONENT_SET_IDを設定してください。- 結果を読みます。
variantAxes(各軸とその選択肢)、componentProps(バリアント以外の TEXT/BOOLEAN/INSTANCE_SWAP プロパティ → コードプロパティ)、cssMapping(状態名 → CSS セレクター)とdefaultSignatureを含むstateMachine、およびバリアントごとのdiffFromDefaultが返されます。 - コードを生成します。
defaultSignatureを使ってデフォルトのバリアントを実装し、次に各cssMappingエントリーについて、そのバリアントのdiffFromDefaultのみを適用するルールを 1 つ追加します。componentPropsをフレームワークのプロパティに対応付けます。BOOLEAN→ boolean、TEXT→ string、INSTANCE_SWAP→ ReactNode/スロット、VARIANT→ union。 - 検証します。
stateMachine.statesのすべての状態に CSS ルールがあること、および差分内のトークン名(例:Color/Brand/Primary)がエクスポート済みトークンに解決されることを照合します。
状態を CSS に対応付ける方法
スクリプトは状態軸の値を大文字小文字を区別せずに正規化し、セレクターに対応付けます。
| バリアントの値 | CSS/ARIA セレクター |
|---|---|
default | (ベースルール。セレクターなし) |
hover | :hover |
focus/focused/focus-visible | :focus-visible |
active/pressed | :active |
disabled | :disabled, [aria-disabled="true"] |
error/invalid | [aria-invalid="true"] |
selected | [aria-selected="true"] |
checked | :checked |
loading | [aria-busy="true"] |
open/closed | `[aria-expanded="true" |
filled | .has-value |
注意事項
- **差分はデフォルトのバリアントとの比較で計算されます。**そのため、状態の
diffFromDefaultには変更されたプロパティ(塗りのトークン、線、テキストの色、不透明度、エフェクト、子要素の表示)のみが含まれます。これらだけをオーバーライドとして出力し、変更されていないプロパティを再指定しないでください。 - スクリプトは
boundVariables(塗り/線)を、利用可能な場合はトークン名に解決し、利用できない場合は生の 16 進数値にフォールバックします。生成コードではトークン名を優先してください。 - 軸の検出はヒューリスティックです。
state/status/interactionという名前の軸は状態軸、size/scaleという名前の軸はサイズ軸として扱われます。セットで異なる軸名を使っている場合、cssMappingが空になることがあります。その場合はvariantAxesを読み、状態を手動で対応付けてください。
コメント
Markdown 対応