Claude-skill-registry design-ssot
[デザイン] 1.(Figma起点)SSOT(tokens/components/context/assets)を生成
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/design-ssot" ~/.claude/skills/majiayu000-claude-skill-registry-design-ssot && rm -rf "$T"
manifest:
skills/data/design-ssot/SKILL.mdsource content
[デザイン] 1.(Figma起点)SSOT(tokens/components/context/assets)を生成
コマンド: /design-ssot $FIGMA_REFS
Figma MCPから設計情報を抽出し、AI/人間が参照するSSOTを作る。実装はしない。
いつ使う?(位置づけ)
- Figma(Dev Mode)を根拠に、後続でブレない SSOT(tokens/components/context/assets) を確立したいとき
- 会話起点なら
、Figma起点ならこの/design-mock
から始める/design-ssot
次に何をする?
- 実装に進む →
→/design-ui
→/design-components/design-assemble - ドキュメント/共有用の静的HTMLが欲しい →
(任意)/design-html
共通前提(参照)
- 口調・出力規約・差分出力の方針は
に従う。CLAUDE.md
を読み、該当するdoc/input/rdd.md
を適用して判断軸を揃える(例:.claude/skills/*
/ui-designer
)。usability-psychologist- 詳細運用(サンプル運用/依存評価補助/ADR-lite)は
を参照。doc/guide/ai_guidelines.md
見た目の基準(ビューポート)について
- まず
の「ターゲット表示環境(事実)」を参照し、そのビューポートを基準にSSOTを作るdoc/input/rdd.md - 未記入の場合は、以下を 推奨デフォルトとして仮置きし、出力やレビューの前提に明記する:
- desktop: 1440x900
- mobile: 390x844
- tablet: 834x1194
事前チェック(必須):Figma MCPが「使える」状態か
/design-ssot は Figma MCPが利用可能であることが前提。最初に必ず以下を確認してから進める。
1) Claude Code側:MCP登録の確認
を確認し、claude mcp list
が登録されていることfigma
2) 接続先:Figma MCP(Dev Mode)の到達確認
- Figma MCPのエンドポイント(通常
)に到達できることhttp://localhost:3845/mcp - 到達できない場合は、MCPが未起動/未設定/権限不足の可能性が高い(推測でSSOT生成を続けない)
3) うまくいかないとき(ユーザーにお願いする手順)
AI側で「MCPが無い/設定されていない」など見当違いな推測をしないために、まず以下をユーザーに依頼する:
0.
でFigmaの再接続を確認する(推奨)/mcp
を実行/mcp- 一覧から
ツールを選ぶfigma - Reconnect(再接続)を実行
- 再度
ツールを選んだときに "View tools" が表示されている状態になっていることを確認するfigma - 上記が満たせない場合は、以降の手順へ進まず停止(接続/権限/起動状態の問題の可能性が高い)
- Figma Desktop アプリで Dev Mode / MCP サーバーを有効化する(Figma公式手順に従う)
- それでもダメなら、ユーザーに以下を確認してもらう:
- 3845番ポートが開いているか(Figma側のMCPが起動しているか)
- URLが環境と合っているか(例:
)http://localhost:3845/mcp - 必要なら MCP登録をやり直す
4) Figma MCPの登録
- 前提
- Figma Desktop 側で Dev Mode / MCP サーバーが有効で、MCPが起動していること
- Claude Code(CLI)を実行する環境から、そのMCPのHTTPエンドポイントに到達できること
- 手順(最小)
を確認し、claude mcp list
が無ければ登録するfigma- 例:
claude mcp add --transport http figma "http://localhost:3845/mcp"
- 例:
- 到達できない場合は、ユーザーに「Figma側のMCP起動・権限・ポート・URL」を確認してもらう(推測で先に進めない)
入力
- $FIGMA_REFS: Figma参照(MCPが認識できる指定)
- 単一: これまで通り1つのFigma URL/参照を渡す
- 複数(推奨): 複数のフレーム/ページURLを「ページキー付き」で羅列する(複数ページでも再現性を落とさないため)
複数指定の書式(固定)
- 1行に1件:
{PageKey}={FIGMA_REF}- 例:
HomePage=https://... - 例:
PricingPage=https://...
- 例:
- 禁止: URLだけの羅列(ページキーが安定しないため)。複数指定時は必ず
を付けるPageKey=
PageKeyのルール(固定)
推奨(例:PascalCase
,HomePage
,PricingPage
)LoginPage- 既存の
に同名doc/input/design/design_context.json
がある場合は「追記/更新」扱いpages[].key - 同名キーで別画面を指す場合は 衝突として停止(推測でマージしない)
例
- 単一:
/design-ssot https://...
- 複数:
/design-ssot HomePage=https://... PricingPage=https://... LoginPage=https://...
出力(差分のみ)
- doc/input/design/design_context.json # 画面/レイアウト/constraints/resizing
- doc/input/design/design-tokens.json # 色/タイポ/spacing/半径/影/枠線/不透明度/breakpoints(単位明記)
- doc/input/design/components.json # 主要コンポーネント + variants(例: size/tone/state)
- doc/input/design/copy.json # 文字の文言(copyKey→文言)。一字一句固定(言い換え禁止)
- (スタック既定の置き場)/design-assets/ # 画像アセット(Figmaからexportして保存)
- doc/input/design/assets/assets.json # 画像アセットのmanifest(どの要素がどのファイルに対応するか)
ルール
- JSONは単位明記(px/%/unitless)
- tokens は「物理値」と「semantic(意味)」を混ぜない(例:
とcolor.gray.900
を分け、semanticは物理へ参照する)color.text.primary - variants は props/属性に落とせる粒度(例: { size:["sm","md","lg"] })
- 文字の文言は必ずSSOT化する(
)doc/input/design/copy.json
の text ノードは 必ずdesign_context.json
でcopyKey
を参照する(文言の直書き禁止)copy.json
に無いcopy.json
を参照してはいけない(不足時は生成を止め、ユーザーにcopyKey
再提示 or 文言提供を依頼する)FIGMA_REF
- CSSで指定できる見た目は可能な限りSSOT化する(後続の再現性を上げる)
- 例: background(塗り/グラデ)/ border(stroke: 色・太さ・style・位置)/ radius / shadow / opacity / blur / blend mode
- blur は filter(要素自体) と backdrop-filter(背景) を区別してSSOTに残す
- 取りこぼしやすい: 「枠線だけある」「背景だけある」「hoverだけ変わる」など
には、可能な限りcomponents.json
(background/border/radius/shadow/textColor など)を tokens 参照で残す(値の直書き禁止)styles- RDD遵守(doc/input/rdd.md のスタック/制約に反しない)
- 技術スタックの既定は
。このコマンドの出力(SSOT JSON)は可能な限りスタック非依存に保ち、後続(doc/input/rdd.md
//design-ui
)が/design-assemble
を参照して生成する。doc/input/rdd.md - SSOTの最低限スキーマは
を参照。doc/input/design/ssot_schema.md
の variants 命名規約はdoc/input/design/components.json
に従い、プロジェクト横断で揃える。doc/input/design/ssot_schema.md- 画像(アイコン/ロゴ/イラスト/写真など)で CSSだけでは再現できないものは、可能な限りFigmaからexportして「スタック既定の置き場」に保存し、
に対応関係を残すassets.json - 動画/アニメ(MP4/GIF/Lottie等)も同様に assetsとしてmanifest化する(取得できなければ
+status: failed
を必ず記録し、ユーザーに手順を依頼する)error - 複数入力のマージ規約(固定)
は 入力した PageKey の配列として統合するdesign_context.json.pages
のcopy.json
は 必ずページキーで名前空間を切る(例:copyKey
)homePage.hero.title
のassets.json
も ページ横断で一意にするassetKey- 同じ
が複数入力に現れた場合は、同一ファイル(同一内容)であることが確認できる場合のみOKassetKey - 内容が異なる場合は 衝突として停止し、ユーザーにキー命名の修正を依頼する
- 同じ
- tokensの整合(固定)
- 複数入力で tokens が矛盾する場合(例:
の参照先がページで違う)は 衝突として停止semantic.color.text.primary - 推測で片方に寄せたり、別名tokenを勝手に増やさない(必要ならユーザーと命名/設計を合意してから)
- 複数入力で tokens が矛盾する場合(例:
- ここで停止
ゲート
- tokens/variantsに未定義値なし
- design_context.json に constraints/resizing が含まれる
- components.json のvariantsが「実装の分岐」に落とせる粒度になっている
に未定義文言なし(参照されるcopy.json
の不足0件)copyKey- border/background/gradient/blur/blend/strokeAlign が存在する要素について、tokens と components の
参照に落ちている(取りこぼし0)styles - 画像アセットが必要な箇所(ロゴ/アイコン/イラスト/写真)が「スタック既定の置き場」 と
に落ちている(取りこぼし0)doc/input/design/assets/assets.json
にassets.json
が1件でもある場合は、必ずユーザーに失敗理由と次アクション(Figma Export設定/権限/再提示/手元提供)を明示して停止するstatus: "failed"
再現性(会話コンテキストがクリアでも再現するためのルール)
- 後続のdesign系コマンドは、
のSSOT(tokens/components/context/copy/assets)だけで再現できる状態を目標にするdoc/input/design/* - もしSSOTが不足/破損している場合は、推測で補わない。次のどちらかをユーザーに依頼する:
(Figma URL等)を再提示して、FIGMA_REF
を再実行する/design-ssot- 不足しているSSOT(例:
/copy.json
)の差分をユーザーに提供してもらうassets.json
画像アセットの扱い(重要)
アセットの保存先(スタック既定)
doc/input/rdd.md の技術スタックに合わせて、アセット実体は以下へ保存する(SSOTのmanifestは doc/ に残す):
-
Next.js / React / Astro:
public/design-assets/ -
SvelteKit:
static/design-assets/ -
(判定できない場合): まず
があればpublic/
、なければpublic/design-assets/static/design-assets/ -
優先形式
- アイコン/ロゴ: SVG(可能なら単色・パス化)
- 写真/ラスタ: WebP または PNG(透過が必要ならPNG)
- 複雑なイラスト: SVG優先、無理ならPNG
-
命名
またはpublic/design-assets/{kind}/{name}@{scale}.{ext}
を基本static/design-assets/{kind}/{name}@{scale}.{ext}- 例:
,icons/search@1x.svgimages/hero@2x.webp
- 例:
は英小文字 +name
(kebab-case)で安定させる-
ダウンロードできない場合(ユーザーにお願いする手順)
Figma側の状態によっては、MCPが画像を取り出せないことがあります。次をユーザーに確認・依頼する:
- 対象レイヤー/フレームを export 可能にする
- Figma右パネルの Export を追加し、形式(SVG/PNG等)と倍率(1x/2x等)を設定する
- 権限の確認
- そのFigmaファイルにアクセス権があるか(閲覧のみでexportが制限されていないか)
- 画像の代替入力
- どうしてもMCPで取得できない場合は、ユーザーに「SVG/PNG/WebPを手元からアップロード」または「アセットの配布方法(zip等)を提示」してもらい、
に配置してもらうdoc/input/design/assets/
- どうしてもMCPで取得できない場合は、ユーザーに「SVG/PNG/WebPを手元からアップロード」または「アセットの配布方法(zip等)を提示」してもらい、