[デザイン] 1.(Figma起点)SSOT(tokens/components/context/assets)を生成
Scanned 2/12/2026
Install to Claude Code
npx -y skills add mae616/ai-template --skill design-ssot --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Design Ssot?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/mae616-design-ssot)More formats (shields.io, HTML) on the badges page.
---
user-invocable: true
description: "[デザイン] 1.(Figma起点)SSOT(tokens/components/context/assets)を生成"
---
# [デザイン] 1.(Figma起点)SSOT(tokens/components/context/assets)を生成
## コマンド: /design-ssot $FIGMA_REFS
Figma MCPから設計情報を抽出し、AI/人間が参照するSSOTを作る。**実装はしない**。
## いつ使う?(位置づけ)
- Figma(Dev Mode)を根拠に、後続でブレない **SSOT(tokens/components/context/assets)** を確立したいとき
- 会話起点なら `/design-mock`、Figma起点ならこの `/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` を参照。
## 見た目の基準(ビューポート)について
- まず `doc/input/rdd.md` の「ターゲット表示環境(事実)」を参照し、**そのビューポートを基準**にSSOTを作る
- 未記入の場合は、以下を **推奨デフォルト**として仮置きし、出力やレビューの前提に明記する:
- 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. **`/mcp` でFigmaの再接続を確認する(推奨)**
- `/mcp` を実行
- 一覧から **`figma` ツール**を選ぶ
- **Reconnect**(再接続)を実行
- 再度 `figma` ツールを選んだときに **"View tools" が表示されている状態**になっていることを確認する
- 上記が満たせない場合は、以降の手順へ進まず停止(接続/権限/起動状態の問題の可能性が高い)
1. **Figma Desktop アプリで Dev Mode / MCP サーバーを有効化**する(Figma公式手順に従う)
2. それでもダメなら、ユーザーに以下を確認してもらう:
- 3845番ポートが開いているか(Figma側のMCPが起動しているか)
- URLが環境と合っているか(例: `http://localhost:3845/mcp`)
- 必要なら MCP登録をやり直す
### 4) Figma MCPの登録
- **前提**
- Figma Desktop 側で Dev Mode / MCP サーバーが有効で、MCPが起動していること
- Claude Code(CLI)を実行する環境から、そのMCPのHTTPエンドポイントに到達できること
- **手順(最小)**
1. `claude mcp list` を確認し、`figma` が無ければ登録する
- 例: `claude mcp add --transport http figma "http://localhost:3845/mcp"`
2. 到達できない場合は、ユーザーに「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` と `color.text.primary` を分け、semanticは物理へ参照する)
- variants は **props/属性に落とせる粒度**(例: { size:["sm","md","lg"] })
- **文字の文言は必ずSSOT化**する(`doc/input/design/copy.json`)
- `design_context.json` の text ノードは **必ず `copyKey` で `copy.json` を参照**する(文言の直書き禁止)
- `copy.json` に無い `copyKey` を参照してはいけない(不足時は生成を止め、ユーザーに `FIGMA_REF` 再提示 or 文言提供を依頼する)
- **CSSで指定できる見た目は可能な限りSSOT化する**(後続の再現性を上げる)
- 例: background(塗り/グラデ)/ border(stroke: 色・太さ・style・位置)/ radius / shadow / opacity / blur / blend mode
- blur は **filter(要素自体)** と **backdrop-filter(背景)** を区別してSSOTに残す
- 取りこぼしやすい: 「枠線だけある」「背景だけある」「hoverだけ変わる」など
- `components.json` には、可能な限り `styles`(background/border/radius/shadow/textColor など)を tokens 参照で残す(値の直書き禁止)
- **RDD遵守**(doc/input/rdd.md のスタック/制約に反しない)
- 技術スタックの既定は `doc/input/rdd.md`。このコマンドの出力(SSOT JSON)は可能な限りスタック非依存に保ち、後続(`/design-ui` / `/design-assemble`)が `doc/input/rdd.md` を参照して生成する。
- SSOTの最低限スキーマは `doc/input/design/ssot_schema.md` を参照。
- `doc/input/design/components.json` の variants 命名規約は `doc/input/design/ssot_schema.md` に従い、プロジェクト横断で揃える。
- 画像(アイコン/ロゴ/イラスト/写真など)で **CSSだけでは再現できないもの**は、可能な限りFigmaからexportして「スタック既定の置き場」に保存し、`assets.json` に対応関係を残す
- 動画/アニメ(MP4/GIF/Lottie等)も同様に **assetsとしてmanifest化**する(取得できなければ `status: failed` + `error` を必ず記録し、ユーザーに手順を依頼する)
- **複数入力のマージ規約(固定)**
- `design_context.json.pages` は **入力した PageKey の配列**として統合する
- `copy.json` の `copyKey` は **必ずページキーで名前空間を切る**(例: `homePage.hero.title`)
- `assets.json` の `assetKey` も **ページ横断で一意**にする
- 同じ `assetKey` が複数入力に現れた場合は、同一ファイル(同一内容)であることが確認できる場合のみOK
- 内容が異なる場合は **衝突**として停止し、ユーザーにキー命名の修正を依頼する
- **tokensの整合(固定)**
- 複数入力で tokens が矛盾する場合(例: `semantic.color.text.primary` の参照先がページで違う)は **衝突**として停止
- 推測で片方に寄せたり、別名tokenを勝手に増やさない(必要ならユーザーと命名/設計を合意してから)
- ここで停止
### ゲート
- tokens/variantsに未定義値なし
- design_context.json に constraints/resizing が含まれる
- components.json のvariantsが「実装の分岐」に落とせる粒度になっている
- `copy.json` に未定義文言なし(参照される `copyKey` の不足0件)
- border/background/gradient/blur/blend/strokeAlign が存在する要素について、tokens と components の `styles` 参照に落ちている(取りこぼし0)
- 画像アセットが必要な箇所(ロゴ/アイコン/イラスト/写真)が「スタック既定の置き場」 と `doc/input/design/assets/assets.json` に落ちている(取りこぼし0)
- `assets.json` に `status: "failed"` が1件でもある場合は、**必ずユーザーに失敗理由と次アクション**(Figma Export設定/権限/再提示/手元提供)を明示して停止する
### 再現性(会話コンテキストがクリアでも再現するためのルール)
- 後続のdesign系コマンドは、`doc/input/design/*` のSSOT(tokens/components/context/copy/assets)だけで再現できる状態を目標にする
- もしSSOTが不足/破損している場合は、**推測で補わない**。次のどちらかをユーザーに依頼する:
- `FIGMA_REF`(Figma URL等)を再提示して、`/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.svg`, `images/hero@2x.webp`
- `name` は英小文字 + `-`(kebab-case)で安定させる
### ダウンロードできない場合(ユーザーにお願いする手順)
Figma側の状態によっては、MCPが画像を取り出せないことがあります。次をユーザーに確認・依頼する:
1. **対象レイヤー/フレームを export 可能にする**
- Figma右パネルの **Export** を追加し、形式(SVG/PNG等)と倍率(1x/2x等)を設定する
2. **権限の確認**
- そのFigmaファイルにアクセス権があるか(閲覧のみでexportが制限されていないか)
3. **画像の代替入力**
- どうしてもMCPで取得できない場合は、ユーザーに「SVG/PNG/WebPを手元からアップロード」または「アセットの配布方法(zip等)を提示」してもらい、`doc/input/design/assets/` に配置してもらう
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!