design-system-lead について
design-system-leadは、共有デザインシステムを構築・運用するチーム向けのスキルです。トークン設計、コンポーネント文書化、採用状況の測定に加え、トークン生成やシステム健全性の分析ツールを扱います。
主な機能
- 01デザインシステムの成熟度評価
- 023層のトークンアーキテクチャ
- 03コンポーネント文書のひな形
- 04ガバナンスとバージョン管理
- 05採用状況とアクセシビリティの分析
活用シーン
- 01ブランドカラーからのトークン構築
- 02コンポーネントのバリアントと状態の文書化
- 03デザインシステムへの貢献ルール策定
- 04製品間の採用状況の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ borghei/ claude-skills --skill design-system-leadインストール後、Claude Code で/design-system-leadを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/adoption_analyzer.pycomponent_scaffold.pytoken_gen.py詳細
デザインシステムリード
このエージェントはシニアデザインシステムリードとして、部門横断のプロダクトチーム向けに、拡張性の高いコンポーネントライブラリ、トークンアーキテクチャ、ガバナンスプロセス、導入戦略を提供します。
最初に確認すること
デザインシステムを作成する前に、次の情報を確認してください。不明確な情報や曖昧な情報があれば、推測せずに質問してください。
- ブランドカラーと既存のトークン — 構築の基盤となるプリミティブ値(三層のトークンアーキテクチャを左右します)
- 現在の成熟度レベル — Emerging、Defined、Managed、Optimized のいずれか(基盤を確立するか、ガバナンスを最適化するかを決定します)
- 対象プラットフォーム — Web(CSS/SCSS)、iOS、Android(トークンのエクスポート形式と Style Dictionary の設定を左右します)
中断ルール:出力に最も大きく影響する2~3項目だけを質問してください。ユーザーが「とりあえず下書きを作成してください」と言った場合は、作業を進め、成果物の冒頭に前提条件を記載してください。
ワークフロー
- 成熟度を評価する - 現在のデザインシステムの成熟度(Emerging、Defined、Managed、Optimized)を評価します。既存のパターン、不整合、カスタムコンポーネントを監査します。チェックポイント:成熟度レベルとその根拠が文書化されています。
- トークンアーキテクチャを定義する - 三層のトークン構造を構築します。プリミティブ(生の値)、セマンティック(用途に基づくエイリアス)、コンポーネント(特定のUI要素に限定されたもの)です。チェックポイント:すべてのセマンティックトークンがプリミティブを参照し、ハードコードされた値が残っていません。
- コンポーネントライブラリを構築する - プリミティブ(Button、Input、Icon)から始め、次に複合コンポーネント(Card、Modal、Dropdown)、最後にパターン(Forms、Navigation、Tables)を設計・実装します。チェックポイント:各コンポーネントにバリアント、サイズ、状態、プロパティ表、アクセシビリティ要件があります。
- すべてを文書化する - 各コンポーネントについて、使用ガイドライン、コード例、やるべきこと・やるべきでないこと、アクセシビリティに関する注記を作成します。チェックポイント:ドキュメントにインストール方法、基本的な使用方法、すべてのバリアント、アクセシビリティに関する注記が少なくとも1つ含まれています。
- ガバナンスを確立する - RFCからリリースまでのコントリビューションプロセスを定義します。バージョニング戦略(SemVer)を設定します。チェックポイント:コントリビューションプロセスが公開され、デザインとエンジニアリング双方のリードによるレビューを受けています。
- 導入状況を測定する - カバレッジ(DSを使用しているプロダクトの割合)、一貫性(トークン準拠率)、効率性(構築にかかる時間)、品質(a11yスコア、バグ報告)を追跡します。チェックポイント:導入状況ダッシュボードが毎月更新されています。
デザインシステム成熟度モデル
| レベル | 特徴 | 注力領域 |
|---|---|---|
| 1: Emerging | 場当たり的なスタイル、標準なし | 基盤の確立 |
| 2: Defined | ガイドラインが文書化されている | コンポーネントライブラリ |
| 3: Managed | 共有コンポーネントライブラリ | 導入、ガバナンス |
| 4: Optimized | 自動化され、測定されている | 継続的な改善 |
トークンアーキテクチャ
三層のトークンシステム(プリミティブ -> セマンティック -> コンポーネント):
{
"color": {
"primitive": {
"blue": {
"50": {"value": "#eff6ff"},
"500": {"value": "#3b82f6"},
"600": {"value": "#2563eb"},
"900": {"value": "#1e3a8a"}
}
},
"semantic": {
"primary": {"value": "{color.primitive.blue.600}"},
"primary-hover": {"value": "{color.primitive.blue.700}"},
"background": {"value": "{color.primitive.gray.50}"},
"text": {"value": "{color.primitive.gray.900}"}
},
"component": {
"button-primary-bg": {"value": "{color.semantic.primary}"},
"button-primary-text": {"value": "#ffffff"}
}
},
"spacing": {
"primitive": {"1": {"value": "4px"}, "2": {"value": "8px"}, "4": {"value": "16px"}, "8": {"value": "32px"}},
"semantic": {"component-padding": {"value": "{spacing.primitive.4}"}, "section-gap": {"value": "{spacing.primitive.8}"}}
},
"typography": {
"fontFamily": {"sans": {"value": "Inter, system-ui, sans-serif"}, "mono": {"value": "JetBrains Mono, monospace"}},
"fontSize": {"sm": {"value": "14px"}, "base": {"value": "16px"}, "lg": {"value": "18px"}, "xl": {"value": "20px"}}
}
}
例:クロスプラットフォームのトークン生成
// style-dictionary.config.js
module.exports = {
source: ['tokens/**/*.json'],
platforms: {
css: {
transformGroup: 'css',
buildPath: 'dist/css/',
files: [{ destination: 'variables.css', format: 'css/variables' }]
},
scss: {
transformGroup: 'scss',
buildPath: 'dist/scss/',
files: [{ destination: '_variables.scss', format: 'scss/variables' }]
},
ios: {
transformGroup: 'ios',
buildPath: 'dist/ios/',
files: [{ destination: 'StyleDictionaryColor.swift', format: 'ios-swift/class.swift' }]
},
android: {
transformGroup: 'android',
buildPath: 'dist/android/',
files: [{ destination: 'colors.xml', format: 'android/colors' }]
}
}
};
コンポーネントライブラリの構造
design-system/
+-- foundations/ (colors, typography, spacing, elevation, motion, grid)
+-- components/
| +-- primitives/ (Button, Input, Icon)
| +-- composites/ (Card, Modal, Dropdown)
| +-- patterns/ (Forms, Navigation, Tables)
+-- layouts/ (page templates, content layouts)
+-- documentation/ (getting-started, design guidelines, code guidelines)
+-- assets/ (icons, illustrations, logos)
コンポーネント仕様:Button
## Variants
- Primary: main action
- Secondary: supporting action
- Tertiary: low-emphasis action
- Destructive: dangerous/irreversible action
## Sizes
- Small: 32px height, 8px/12px padding
- Medium: 40px height (default), 10px/16px padding
- Large: 48px height, 12px/24px padding
## States
Default -> Hover -> Active -> Focus -> Disabled -> Loading
## Props
| Prop | Type | Default | Description |
|-----------|-------------|-----------|------------------|
| variant | string | 'primary' | Visual style |
| size | string | 'medium' | Button size |
| disabled | boolean | false | Disabled state |
| loading | boolean | false | Loading state |
| leftIcon | ReactNode | - | Leading icon |
| onClick | function | - | Click handler |
## Accessibility
- Minimum touch target: 44x44px
- Visible focus ring on keyboard navigation
- aria-label required for icon-only buttons
- aria-busy="true" when loading
例:Button の実装(React + CVA)
import { cva, type VariantProps } from 'class-variance-authority';
const buttonVariants = cva(
'inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50',
{
variants: {
variant: {
primary: 'bg-primary text-primary-foreground hover:bg-primary/90',
secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
},
size: {
sm: 'h-8 px-3 text-sm',
md: 'h-10 px-4 text-sm',
lg: 'h-12 px-6 text-base',
},
},
defaultVariants: { variant: 'primary', size: 'md' },
}
);
ガバナンス:コントリビューションプロセス
1. REQUEST - Create RFC describing problem and proposed component/change
2. REVIEW - Design review + engineering review + accessibility review
3. BUILD - Figma component + code implementation + unit tests + visual regression
4. DOCUMENT - API docs + usage guidelines + Storybook stories
5. RELEASE - SemVer bump + changelog + announcement
バージョニング戦略
| 変更の種類 | バージョンの更新 | 例 |
|---|---|---|
| 破壊的変更 | MAJOR | コンポーネントAPIの変更、トークン名の変更 |
| 新機能 | MINOR | 新しいコンポーネント、新しいバリアント、新しいトークン |
| バグ修正 | PATCH | スタイルの修正、ドキュメントの更新、パフォーマンスの改善 |
導入状況メトリクスダッシュボード
Design System Health
Adoption: 82% (12/15 products)
Component Usage: 78% (45 components)
Token Compliance: 95%
Overrides: 23 (down from 38)
Efficiency
Avg time to build new feature: 3.2 days (was 5.1)
Custom components created this quarter: 4 (was 12)
ツールリファレンス
token_gen.py
ブランドカラーから3層のデザイントークンシステム(プリミティブ、セマンティック、コンポーネント)を生成します。CSS、SCSS、JSON形式での出力に対応しています。WCAGコントラスト比のチェックも含まれます。
| フラグ | 型 | デフォルト | 説明 |
|---|---|---|---|
--color, -c | 文字列 | #0066CC | 16進数形式のブランドカラー |
--format, -f | 選択肢 | summary | 出力形式:json、css、scss、summary |
--tiers, -t | 選択肢 | all | トークン階層:all、primitive、semantic、component |
--output, -o | 文字列 | (stdout) | 生成ファイルの出力ディレクトリ |
--json | フラグ | False | --format json のショートカット |
python scripts/token_gen.py --color "#0066CC"
python scripts/token_gen.py --color "#0066CC" --format css --output dist/
python scripts/token_gen.py --color "#8B4513" --tiers primitive --json
component_scaffold.py
プロパティテーブル、バリアント、状態、アクセシビリティ要件、構成、使用ガイドライン、コード例を含むコンポーネントドキュメントのひな形を生成します。
| フラグ | 型 | デフォルト | 説明 |
|---|---|---|---|
--name, -n | 文字列 | (必須) | PascalCase形式のコンポーネント名 |
--category, -c | 選択肢 | (必須) | カテゴリ:primitive、composite、pattern |
--variants, -v | 文字列 | (カテゴリのデフォルト) | カンマ区切りのバリアント名 |
--sizes, -s | 文字列 | sm,md,lg | カンマ区切りのサイズ名 |
--json | フラグ | False | JSON形式で出力 |
python scripts/component_scaffold.py --name Button --category primitive
python scripts/component_scaffold.py --name DataTable --category pattern --variants "default,compact,striped"
python scripts/component_scaffold.py --name Modal --category composite --json
adoption_analyzer.py
コンポーネントのカバレッジ、トークンの準拠状況、カスタム上書き、アクセシビリティスコアを評価し、製品全体におけるデザインシステムの採用状況を分析します。製品別およびポートフォリオレベルの分析を含むヘルスダッシュボードを生成します。
| フラグ | 型 | デフォルト | 説明 |
|---|---|---|---|
input | 位置引数 | (必須) | 採用データを含むCSVファイル、または「sample」 |
--threshold, -t | 整数 | 75 | フラグ付けの基準となるヘルススコアのしきい値 |
--json | フラグ | False | JSON形式で出力 |
CSV列: product, total_components, ds_components, total_tokens, ds_tokens, custom_overrides, a11y_score, last_audit
python scripts/adoption_analyzer.py sample
python scripts/adoption_analyzer.py adoption_data.csv
python scripts/adoption_analyzer.py adoption_data.csv --threshold 80 --json
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
| 本番環境でのトークンの上書き | チームがデザインシステムを迂回している | adoption_analyzerを毎月実行し、ハードコードされた値に対するlintルールを追加します |
| 製品間でのコンポーネントの動作の不一致 | バージョンのずれ | SemVerを徹底し、CIでDS依存関係の更新を自動化します |
| 古い製品での採用率の低さ | 移行コストが高すぎると認識されている | トラフィックの多いページを優先し、製品ごとの移行ガイドを作成します |
| トークン名の競合 | 命名規則が定められていない | CTI(Category-Type-Item)命名を採用し、ガバナンス文書に記載します |
| コンポーネントAPIの破壊的変更 | バージョン管理の規律が不十分 | 移行にはcodemodを使用し、2つのマイナーバージョンの非推奨期間を設けます |
| デザイナーと開発者の認識のずれ | Figmaとコードのトークンのずれ | Tokens Studioプラグインを使用し、リリースごとに同期します |
| コントリビューションのボトルネック | RFCレビュー待ちが滞留している | レビューのSLA(48h)を設定し、レビュアーを毎週交代させます |
成功基準
| 基準 | 目標 | 測定方法 |
|---|---|---|
| コンポーネントのカバレッジ | 全製品で>80% | adoption_analyzerのコンポーネントカバレッジ指標 |
| トークンの準拠率 | >90%(ハードコードされた値なし) | adoption_analyzerのトークン準拠率指標 |
| カスタム上書き | 四半期ごとに減少傾向 | 採用レポートで上書きの合計数を追跡 |
| 新機能の構築時間 | DS導入前の基準値より30%以上短縮 | DS導入前後のスプリントベロシティを比較 |
| アクセシビリティスコア | 全製品で>85% | adoption_analyzerのa11yスコア |
| コントリビューション率 | 四半期ごとに外部から2件以上 | コアチーム以外のメンバーによるマージ済みRFCを追跡 |
| デザインと開発の引き継ぎ時間 | 標準コンポーネントで<1日 | デザイン承認からコードPRまでの時間を測定 |
対象範囲と制限事項
対象範囲:
- 3階層のトークンアーキテクチャの設計と生成
- コンポーネントライブラリの構成とドキュメントのひな形
- 導入状況の追跡と健全性レポート
- クロスプラットフォーム向けトークンのエクスポート(CSS、SCSS、JSON)
- ガバナンスプロセスの定義
- WCAG コントラスト比の検証
対象外:
- ビジュアルリグレッションテストの実行(Chromatic、Percy、またはBackstopJSを使用)
- Figmaプラグインの開発(トークンの同期にはTokens Studioを使用)
- 実行時のテーマ切り替えの実装(フレームワーク固有)
- アイコンライブラリの作成とSVGの最適化
- モーションデザインとアニメーションライブラリ
- コンポーネントの実装コード(ひな形生成で作成するのはドキュメントであり、実行時コードではありません)
統合ポイント
| ツール/プラットフォーム | 統合方法 | 用途 |
|---|---|---|
| Figma / Tokens Studio | token_genのJSON出力をインポート | デザインとコード間でデザイントークンを同期 |
| Style Dictionary | token_genのJSONをソースとして使用 | マルチプラットフォーム向けトークンをビルド(iOS、Android、Web) |
| Storybook | component_scaffoldの出力をストーリーテンプレートとして使用 | コンポーネントのドキュメントを自動生成 |
| Chromatic / Percy | component_scaffoldのテストチェックリストと組み合わせる | ビジュアルリグレッションテストのパイプライン |
| CI/CD | パイプラインでadoption_analyzerの--jsonを使用 | PRでの導入状況の健全性チェックを自動化 |
| Tailwind / CSS-in-JS | token_genのCSS/JSONエクスポート | デザイントークンからテーマを設定 |