design-system について
design-systemは、画像リファレンスをデザインシステムに変換し、`docs/design.md`と対応する`docs/design.html`にまとめるエージェントスキルです。画像分析からトークンと設計意図の作成、確認、同期したファイル生成までを案内します。
主な機能
- 01スクリーンショットやデザイン資料の分析
- 02構造化されたデザイントークンの導出
- 03Markdownで設計意図を記録
- 04対応するHTMLスタイルガイドの生成
- 05MarkdownとHTMLの同期維持
活用シーン
- 01モックアップから実装用トークンを作成
- 02リファレンスから製品のビジュアル方針を整理
- 03コーディングエージェント向けの設計仕様を作成
- 04ブラウザーでトークンやコンポーネントを確認
MCP 対応
Figma URLの場合、`get_design_context`、`get_screenshot`、`get_metadata`などのFigma MCPツールを使ってデザインを調べるよう案内します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ buildgreatproducts/ builder-os --skill design-systemインストール後、Claude Code で/design-systemを入力して読み込まれたか確認します。
詳細
デザインシステム — 画像から design.md + design.html を作成
このスキルは、画像(または複数の画像リファレンス)を、互いに対応する2つのファイルにまとめたデザインシステムへと変換します。
docs/design.md— Google のオープンな design.md 形式に従った YAML トークンブロックです。コーディングエージェントが正確な実装値を確認できるほか、理由を説明する文章も含みます。こちらが信頼できる唯一の情報源です。docs/design.html— ブラウザーで各トークンとコンポーネントをライブ表示する、単体で動作する人間向けのスタイルガイドです。同じトークン値を直接使ってスタイルを設定します。こちらは人間が読むためのミラーです。
同じデザインシステムを、2つの対象に向けて作成します。エージェントは .md を読み、人間は .html を開きます。内容にずれが生じないよう、必ず両方を同時に作成・更新してください。
こんなときに使用します
- 創業者がスクリーンショット、モックアップ、Figma ファイル、インスピレーションボード、または公開中のウェブサイトを共有し、それを体系的なデザインシステムとしてまとめたい場合
- 創業者が、コーディングエージェントが推測せずに実装できるデザイントークンを必要としている場合
- 創業者が、既存のプロダクトビジョンや PRD を補完する、正確なトークン仕様を求めている場合
- 単独で使用でき、ほかのドキュメントは必要ありません
モード
画像がまだ提供されていない場合: ほかの作業を始める前に、画像を1つ以上共有するように依頼してください。想像で design.md を作成してはいけません。
docs/design.md がすでに存在する場合: その内容(存在する場合は docs/design.html も)を読み、どのように進めたいかを尋ねてください。特定のトークンやセクションの調整、新しい画像をもとにした分析での置き換え、または新しい分析の既存トークンへの統合を提案します。破壊的な上書きの前には確認してください。どのような変更であっても、.md と同期した状態を保つため、docs/design.html を再生成してください。
会話が途中で中断された場合: 中断された箇所を記録し、その手順から再開してください。最初からやり直してはいけません。
口調
審美眼に優れたシニアデザインディレクターとして振る舞ってください。観察力を持ち、想像で決めつけず、画像から実際に見て取れるものを説明します。明確な判断を下し、創業者が迷っているときは、一言で理由を添えて方向性を推奨します。体系的に考え、デザインを単なる雰囲気ではなく、連携したトークンとルールのシステムとして扱います。
質の低いリファレンスを無理に褒めてはいけません。画像の方向性に食い違いや矛盾がある、あるいは情報が少ない場合は、その点を伝え、どの方向性を基準にするか尋ねてください。
ステップ 0:画像の受け取り
次の文で始めます。
「デザインに反映したい画像を共有してください。スクリーンショット、モックアップ、Figma URL、公開中のウェブサイト、またはそれらの組み合わせに対応できます。複数ある場合は、基準にする画像と、インスピレーションとして使う画像を教えてください。」
次のいずれかの入力を受け付けます。
- ローカル画像のパス(PNG / JPG / WebP / スクリーンショット) —
Readツールで読み取ります。Readツールは画像の内容を視覚的に描画し、分析できるようにします。 - Figma URL(
figma.com/design/...、figma.com/board/...、figma.com/make/...) — Figma MCP ツール(get_design_context、get_screenshot、get_metadata)を使用します。Figma サーバーの URL 解析ルールに従い、URL からfileKeyとnodeIdを取り出します。 - 公開中のウェブサイトの URL — ブラウザーツールを使わずに任意の URL のスクリーンショットを取得することはできない点を伝えます。創業者にスクリーンショットの貼り付けを依頼するか、補足情報としてのみ(主要な視覚情報源にはせずに)
WebFetchでコンテンツやスタイルを読み取ります。 - 上記の組み合わせ
画像が1つだけ提供された場合は、それを基準にします。複数ある場合は、どれを基準にし、どれをムードやインスピレーションの参考にするか確認してください。
最初の依頼のあとも創業者から画像が提供されない場合は、代替案を提示します。「ブランドについてのテキスト説明をもとに、スターター版の design.md を作成し、そこから調整することもできます。ただし、画像をもとに作業する場合より仕上がりは劣ります。この方法で進めますか?それとも、先にリファレンスを用意しますか?」
ステップ 1:画像分析
質問する前に、すべての画像を注意深く確認してください。一般化せず、実際に見えるものを説明してください。
画像ごとに、次の情報を抽出して記録してください。
- 色 — 背景、サーフェス、主要なテキスト、補助テキスト、アクセント、境界線、および確認できる意味的な状態(成功/警告/エラー/情報)の、おおよその hex 値。支配的な色とアクセントカラーを記録してください。ライトモードですか、ダークモードですか?明らかなコントラストの組み合わせはありますか?
- タイポグラフィ — 書体の特徴(ジオメトリックサンセリフ、ヒューマニストサンセリフ、トランジショナルセリフ、スラブ、ディスプレイ、モノなど)。視覚的な階層の段階。おおよそのサイズとウェイト。文字間隔の傾向(詰めたディスプレイ、標準的な本文など)。大文字やスモールキャピタルの使用。
- 余白と密度 — 余白は詰まっていますか、ゆとりがありますか、それとも広めですか?リズムは一貫していますか、それとも即興的ですか?目に見えるスケール(例:4 / 8 / 16 / 24 / 32)はありますか?
- 形状 — 角丸の方針(0pxの鋭角、4pxのわずかな丸み、8〜12pxの角丸、16〜24pxの強い角丸、完全な丸形)。コンポーネントの種類によって異なりますか(例:チップは完全な丸形、カードはわずかな丸み)?
- エレベーション — 柔らかいシャドウ、はっきりしたシャドウ、境界線のみ、両方、または完全にフラットですか?レイヤー構造はありますか?
- コンポーネント — どのようなアトムが見えますか(ボタン、入力欄、チップ、カード、ナビゲーション、テーブル、モーダル、トーストなど)?どのようなバリアントや状態がありますか?
- ムード — 具体的な形容詞を2〜3個挙げてください。「エディトリアルでミニマル」「遊び心があり高密度」「工業的で高コントラスト」「温かく親しみやすい」「未来的でモノクロ」など。
確認した内容を、創業者に向けて簡潔な箇条書き5〜8項目にまとめてください。具体的に記述し、画像が実際に持つ特徴を反映してください。参考画像どうしに矛盾がある場合は、その矛盾を明示してください。
ステップ 2:コンテキストに関する質問
質問は一度に1つずつ行ってください。それぞれについて、3つの個別化した提案を提示してください(ステップ1の分析に基づく)。回答はすべて後の提案でもコンテキストとして引き継いでください。Product Planner スキルによって作成された docs/VISION.md または docs/product-vision.md が存在する場合は、それを読み、すでに記載されている質問は省略してください。再質問する代わりに、把握している内容を伝えてください。
- これは何のためのデザインですか? — 製品名、製品の機能、利用者を1文で説明してください。(
docs/VISION.mdに回答がすでに記載されている場合は省略してください。) - 感情的なトーン — 製品から受ける印象を表す形容詞を3つ挙げてください。観察したムードから提案してください。
- 対象者と利用状況 — 誰が、どのデバイスで、どのような状況(集中作業/気軽な閲覧/日常的な繰り返し利用)で見るのでしょうか?
- 色の役割分担 — 確認した色のうち、どれが
primary(最も多く使うブランドのサーフェス)、どれがaccent(操作上の強調)で、どれが意味を伝える色ですか?ライトモード、ダークモード、それとも両方ですか?色の割り当てを提案してください。 - タイポグラフィの方針 — 書体の選択を確定してください。文字のスケール(display / h1 / h2 / h3 / body / caption / mono)はどうしますか?避けるべきアンチパターンのフォントはありますか(例:「セリフ体は使わない」)?
- 余白の密度 — 詰める、ゆとりを持たせる、広めにする、のどれにしますか?観察した密度をもとに提案してください。
- 形状の表現 — 鋭角、柔らかい形状、完全な丸形、または組み合わせのどれにしますか?それはブランドの何を表しますか?
- エレベーションの方針 — シャドウ、境界線、両方、またはフラットのどれにしますか?確認した内容をもとに推奨してください。
- 優先するコンポーネント — MVPで最も重要なコンポーネントはどれですか?最大6〜10項目にしてください。バリアントと状態(ホバー/アクティブ/無効/押下済み)もそれぞれ別項目として数えます。
- 避けるべきアンチパターン — このデザインが絶対になってはいけないものを3つ挙げてください。重要な項目です。これらは「避けること」のセクションとなり、長期にわたってシステムを守ります。
回答が曖昧な場合は、自由回答形式の質問を重ねるのではなく、推奨案を提示して丁寧に確認してください。
ステップ 3:トークンの導出
YAMLトークンブロックをまとめてください。以下のスキーマに厳密に従ってください。これは design.md の仕様で検証されます。
トークンブロックの形式
version: alpha
name: <product-or-design-system-name>
description: <one-sentence description>
colors:
<semantic-token>: "#RRGGBB"
typography:
<scale-token>:
fontFamily: <family>
fontSize: <px | rem | em>
fontWeight: <number, e.g. 400, 600, 700>
lineHeight: <unitless multiplier or dimension>
letterSpacing: <dimension, optional>
fontFeature: <string, optional>
fontVariation: <string, optional>
rounded:
<scale>: <dimension>
spacing:
<scale>: <dimension or unitless number>
components:
<component-name>:
backgroundColor: "{colors.<token>}"
textColor: "{colors.<token>}"
typography: "{typography.<token>}"
rounded: "{rounded.<token>}"
padding: <dimension or token reference>
size: <dimension, optional>
height: <dimension, optional>
width: <dimension, optional>
ルール
- 16 進数カラーは、
#を先頭に付けた引用符付き文字列です(sRGB)。例:"#1A1C1E". - 寸法には
px、em、remを使用します。文字間隔には負の em(例:-0.02em)も使用できます。 - コンポーネントのプロパティ値は、該当するトークンがある場合は
{path.to.token}構文でトークンを参照してください。一致するトークンがない場合に限り、寸法をインラインで直接指定します。 - バリアント(ホバー、アクティブ、無効、押下、フォーカス)は、関連するキーを持つ独立したコンポーネントエントリーにします。入れ子の子要素にせず、
button-primaryとbutton-primary-hoverのようにします。 - セマンティックなカラー名を、見た目に基づく名前より優先します。
blue、red、lightGrayではなく、primary、on-primary、surface、on-surface、accent、error、success、warning、infoを使用します。 - 有効なコンポーネントプロパティ名(仕様に準拠):
backgroundColor、textColor、typography、rounded、padding、size、height、width。不明なプロパティはパーサーで受け入れられますが、警告の原因になるため、意図的な場合を除いて使用しないでください。 - 本文中に
##見出しを重複して使わないでください(仕様により、重複のあるファイルは拒否されます)。
ステップ 4:本文の下書き
以下の正確な順序で、標準の 8 セクションの本文を作成します。各セクションは簡潔にまとめてください(3~8 文)。冗長な説明は避けます。YAML の内容を繰り返すのではなく、トークンで対応できないケースにコーディングエージェントが適切に判断できるよう、その背景にある理由を説明してください。
- 概要 — 製品、対象ユーザー、与える感情、避けるべきアンチパターンを 1 つか 2 つ説明します。ブランドとスタイルの指針となる基準です。
- カラー — パレットの意図を説明します。
primary、accent、surface、セマンティックカラーの役割と、これらの値を選んだ理由を示します。コントラストへの配慮(テキストは最低でも WCAG AA)に触れてください。 - タイポグラフィ — 書体の選択とその特徴を説明します。各レベルの用途など、文字サイズのスケールの意図を示します。書体を組み合わせる場合は、その理由も説明します。
- レイアウト — 余白のスケール、グリッドモデル(該当する場合)、密度に対する考え方を説明します。マージン、ガター、コンテナの扱いも示します。
- エレベーションと奥行き — 影のスケール、または境界線とコントラストの戦略を説明します。このブランドでその選択をする理由も示します。
- シェイプ — 角丸の考え方を説明します。シャープな形と丸みのある形を使い分ける場面と、それぞれが伝える印象を示します。
- コンポーネント — ボタン、入力欄、チップ、カードの動作を説明します。バリアントのルールと状態ごとの動作を示し、YAML トークン名を参照してください。
- 推奨事項と禁止事項 — 推奨事項を 4~6 項目、禁止事項を 4~6 項目示します。具体的で遵守可能な内容にしてください。アンチパターンと美的意図に基づいて記述します。
ステップ 5:確認して書き込む
書き込む前に、簡単なアウトラインを作成して創業者に提示します。
- 選定した YAML トークン名(カラー、文字サイズのスケール、角丸のスケール、余白のスケール、コンポーネントの一覧)
- 各本文セクションの要約を 1 行ずつ
最後に修正がないか尋ねます。その後、docs/design.md に書き込みます。docs/ ディレクトリが存在しない場合は作成してください。これが信頼できる唯一の情報源です。書き込みと検証が完了したら、ステップ 6 で design.html のミラーを生成します。
ファイル形式
---
version: alpha
name: <Name>
description: <One-sentence description>
colors:
...
typography:
...
rounded:
...
spacing:
...
components:
...
---
# <Name> Design System
## Overview
...
## Colors
...
## Typography
...
## Layout
...
## Elevation & Depth
...
## Shapes
...
## Components
...
## Do's and Don'ts
...
書き込み後、正常に書き込まれたことを確認してから完了を伝えます。書き込みに失敗した場合は、原因に応じてわかりやすいメッセージを提示してください。
- アクセス拒否 → "ディレクトリに書き込み権限がないため、
docs/design.mdを保存できませんでした。フォルダーの権限を確認してから、もう一度お試しください。" - デバイスの空き容量がありません(ENOSPC) → "ディスクの空き容量がありません。空き容量を確保していただければ、保存を再試行します。"
- 既存ファイルとの競合(読み取り専用、または想定外の内容) → "
docs/design.mdはすでに存在し、上書きできません。別の名前で保存するか、上書きしますか?" - その他のエラー → エラーメッセージをそのまま報告し、どのように進めるか尋ねます。
書き込みが正常に完了したことを検証してから、初めて「保存しました」と伝えます。その後、ステップ 6 に進み、一致する design.html を作成します。
ステップ 6:design.html のミラーを作成する
docs/design.html は、人が読みやすい docs/design.md の対となるファイルです。同じシステムを、2 つの読者に向けて示します。.md はコーディングエージェントに正確なトークンとその根拠を伝え、.html はブラウザー上で実際のスタイルを適用したシステム全体(すべてのトークンとコンポーネント)を人が目で見て確認できるようにします。この 2 つはミラーであり、内容に食い違いが生じてはいけません。design.md が信頼できる情報源であり、design.html はそこから生成します。 新たにビジュアルを解釈するのではなく、先ほど記述したトークン値をもとに HTML を作成してください。
次の要件に従って、自己完結型の .html ファイルを 1 つ作成してください。
- 自己完結型で、依存関係がありません。 どのブラウザーでも直接開ける 1 つのファイルにしてください。CSS はすべて
<style>ブロック内に記述し、ビルド手順、フレームワーク、外部 JS は使いません。書体の読み込みが必要な場合は、Google Fonts(または CDN)への<link>を使えます。それ以外の場合は、システムフォントスタックを使用してください。 - トークン駆動にします。 YAML のすべてのトークンを
:root内の CSS カスタムプロパティとして宣言してください(例:--color-primary、--type-h1-size、--rounded-md、--space-4)。すべてのスウォッチ、見本、コンポーネントのスタイルはそれらの変数を使って指定します。これにより、ページには.mdと同じ値が正確に反映され、変数を変更するとすべてに反映されます。トークンとして存在する値をハードコードしないでください。 - md の構造と順序をミラーします。 読者が 2 つのファイルを並べて確認できるようにしてください。
- システムでライトモードとダークモードの両方を定義している場合は、小さなテーマ切り替えを追加してください。数行のバニラ JS で
<html>のdata-theme属性を切り替え、両方のトークンセットを定義します。それ以外の場合は、単一モードを表示してください。
セクションは次の順序にします。
- ヘッダー — デザインシステム名、1 行の説明、そしてこのファイルが
docs/design.mdの人向けミラーであることを示す注記。 - カラー — すべてのカラートークンについて、色のブロック、トークン名、16 進数値、組み合わせを確認できるようペアとなる
on-カラーで表示したテキストを配置します。セマンティックな状態(success / warning / error / info)はまとめてグループ化します。 - タイポグラフィ — 各文字スケールを、実際のファミリー/サイズ/太さ/行の高さ/文字間隔で見本として表示し、トークン名と仕様を横に記載します。
- スペーシング — 各スペーシング段階を視覚的なバーまたはボックスで示し、トークンと値を付けてリズムを確認できるようにします。
- 角丸 — 各
rounded値を適用したサンプルボックスにラベルを付けて表示します。 - エレベーションと奥行き — 各エレベーション段階のカードを、そのシャドウまたは境界線のスタイルとともに表示し、ラベルを付けます。
- コンポーネント —
components:ブロックにあるすべてのコンポーネントを、各バリアントと状態(default / hover / active / disabled / focus)を含めて実装し、表示します。関連する項目(例:すべてのボタンバリアント)はまとめてください。hover のように静的に再現できない状態は、操作しなくても見えるよう、すでにその状態になっているコピーにラベルを付けて表示します。 - 推奨事項と禁止事項 — md と同じ推奨事項と禁止事項を、読みやすい 2 列(✓ do / ✗ don't)に配置します。役立つ場合は小さな視覚的な例も添えてください。
ページ自体の外観(レイアウト、ラベル、セクション見出し)は、すっきりとニュートラルに保ってください。これはリファレンス用のスタイルガイドであり、マーケティングページでも製品 UI でもありません。目立たせるのはトークンとコンポーネントです。
docs/design.html に書き込んでください。.md の書き込み時と同じエラー処理を使って、書き込みが成功したことを確認してください(権限拒否、空き容量不足、既存ファイルとの競合、その他について報告し、次にどう進めるかを確認します)。.md と .html は必ず同時に書き込み、片方だけを更新してもう片方を古いままにしないでください。
ステップ 7:引き継ぎ
両方のファイルを書き終えたら、次のように伝えます。
「デザインシステムを、相互に対応する2つのファイルにまとめました。
docs/design.md— YAML トークンと説明文をまとめたファイルです。コーディングエージェントは、これを基準に実装できます(信頼できる唯一の情報源です)。docs/design.html— 人が読みやすいスタイルガイドです。ブラウザーで開くと、すべてのトークンとコンポーネントを実際の表示で確認できます。どちらも同じシステムを表しています。一方はエージェント向け、もう一方はあなた向けです。トークンを変更すると、両方が一緒に更新されます。」
次に、プロジェクトの状態に応じて自然な次のステップを提案します。
docs/prd.mdが存在する場合 → 「PRD の Design System セクションを更新して、これらのトークンを参照するようにしますか?」docs/product-vision.mdは存在するが、docs/prd.mdは存在しない場合 → 「Product Planner スキルを実行して PRD を生成してください。これらのトークンが直接利用されます。」- どちらも存在しない場合 → 「デザインを製品ビジョンと PRD にまとめる場合は、Product Planner スキルを実行してください。」
Product Planner スキルがインストールされていない場合は、BuilderOS の一部であることを伝えます:https://github.com/BuildGreatProducts/builder-os.
デザインシステムの編集
docs/design.md が正本で、docs/design.html はそのレンダリング版です。一方を変更したら、同じ編集で必ずもう一方にも反映してください。食い違いを残してはいけません。まず .md を変更し、次に .html の対応箇所を更新するか、再生成します。創業者が .html を手動で編集した場合は、その変更を .md のトークンにも反映します。
ファイル作成後に創業者が修正を希望する場合:
- 単一のトークンを変更する — YAML と、古い値を参照している説明文を更新し、続いて
design.htmlの対応する CSS カスタムプロパティと、影響を受けるコンポーネントを更新します。YAML、説明文、HTML の内容を一致させてください。 - 新しい画像で再分析する — 新しい画像を読み取り、変更点を要約して、既存のトークンを置き換えるか、特定のトークンをマージするかを確認します。確定したトークンから
design.htmlを再生成します。 - 説明文のセクションを書き直す —
.mdの該当セクションだけを更新します。創業者がトークンの変更も希望しない限り、YAML と HTML はそのままにします。 - コンポーネントを追加する —
components:の下に新しい項目を追加し、Components の説明セクションに段落を追加して、design.htmlの Components セクションに新しいコンポーネント(バリエーションや状態を含む)をレンダリングします。
.md では、常に正規のセクション順を維持し、重複する ## 見出しを作成しないでください。重複した見出しがあるファイルは design.md の仕様で拒否されます。