analyze-component-set-figma について
デザインシステムの実装者向けに、Figmaのコンポーネントセットのバリアントをコード生成用の設計図に変換するスキルです。状態軸とサイズ軸を分け、状態に対応するCSSセレクターとデフォルトとの差分を示します。
主な機能
- 01バリアント軸とコンポーネントプロパティの検出
- 02状態をCSS/ARIAセレクターに対応付け
- 03デフォルトとの差分の算出
- 04バインド変数からトークン名を解決
活用シーン
- 01ボタンのバリアントをCSSルールに変換
- 02コンポーネント状態の上書きスタイルを生成
MCP 対応
use_figma経由でFigmaスクリプトを実行します。READMEによると、ネイティブMCPのget_design_contextとget_metadataにはない、バリアントからCSS状態マシンへの変換を補います。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ southleft/ skills-for-figma --skill analyze-component-set-figmaインストール後、Claude Code で/analyze-component-set-figmaを入力して読み込まれたか確認します。
同梱ファイルscripts/analyze-component-set.js
詳細
analyze-component-set-figma — バリアントの状態機械 → 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(...)を使う、そしてエラーはアトミックに処理される(スクリプトが失敗すると何も適用されません。エラーを読み、修正して再試行してください)。- 完全な再帰ツリー(深さの制限なし、リアクション、インスタンス参照)には →
deep-component-figmaを使用してください。 - バリアントをラベル付きグリッドに並べ替えるには →
arrange-component-set-figmaを使用してください。 - プロパティ自体を追加/削除するには →
component-properties-figmaを使用してください。 - これはデザインシステム向けのコード生成機能です。ネイティブ MCP の
get_design_context/get_metadataでは提供されません。これらは生の構造を返すだけで、バリアントから CSS への状態機械は返しません。
ワークフロー
- COMPONENT_SET の ID を取得します。 ユーザーの選択(
figma_get_selection)、検索、またはユーザーが貼り付けたノード ID から取得します。個別のバリアントではなく、セットである必要があります。スクリプトが型を検証します。 scripts/analyze-component-set.jsをuse_figma経由で実行します(skillNames: "analyze-component-set-figma")。最初にconst COMPONENT_SET_IDを設定してください。- 結果を確認します。
variantAxes(各軸とそのオプション)、componentProps(VARIANT 以外の 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 対応