Agentive
ツールレビュー

AIデザインシステムツール — Figma+Tailwind+Claude Codeの統合

約6分で読めます

デザイナーがFigmaで定義したカラー・フォント・スペーシングを、エンジニアがTailwind CSSの変数として手動転記する時代は終わった。デザイントークンをAIで自動変換し、コンポーネントまで生成するパイプラインを構築する。

デザイントークンとは

デザイントークンは、デザインシステムの最小単位である。色、フォントサイズ、余白、角丸などの値を名前付きの変数として定義する。

{
  "color": {
    "primary": { "value": "#2563EB" },
    "primary-hover": { "value": "#1D4ED8" },
    "secondary": { "value": "#7C3AED" },
    "text": { "value": "#1F2937" },
    "text-muted": { "value": "#6B7280" },
    "background": { "value": "#FFFFFF" },
    "surface": { "value": "#F9FAFB" }
  },
  "spacing": {
    "xs": { "value": "4px" },
    "sm": { "value": "8px" },
    "md": { "value": "16px" },
    "lg": { "value": "24px" },
    "xl": { "value": "32px" },
    "2xl": { "value": "48px" }
  },
  "fontSize": {
    "xs": { "value": "12px" },
    "sm": { "value": "14px" },
    "base": { "value": "16px" },
    "lg": { "value": "18px" },
    "xl": { "value": "20px" },
    "2xl": { "value": "24px" },
    "3xl": { "value": "30px" }
  },
  "borderRadius": {
    "sm": { "value": "4px" },
    "md": { "value": "8px" },
    "lg": { "value": "12px" },
    "full": { "value": "9999px" }
  }
}

デザイントークン -> Tailwind CSS変数の変換

変換スクリプト

// scripts/tokens-to-tailwind.js
const fs = require('fs');
const tokens = JSON.parse(fs.readFileSync('design-tokens.json', 'utf8'));

function generateTailwindConfig(tokens) {
  const config = {
    theme: { extend: { colors: {}, spacing: {}, fontSize: {}, borderRadius: {} } }
  };

  for (const [name, token] of Object.entries(tokens.color)) {
    config.theme.extend.colors[name] = token.value;
  }
  for (const [name, token] of Object.entries(tokens.spacing)) {
    config.theme.extend.spacing[name] = token.value;
  }
  for (const [name, token] of Object.entries(tokens.fontSize)) {
    config.theme.extend.fontSize[name] = token.value;
  }
  for (const [name, token] of Object.entries(tokens.borderRadius)) {
    config.theme.extend.borderRadius[name] = token.value;
  }
  return config;
}

const tailwindConfig = generateTailwindConfig(tokens);
fs.writeFileSync('tailwind.config.generated.js',
  '/** @type {import("tailwindcss").Config} */
' +
  'module.exports = ' + JSON.stringify(tailwindConfig, null, 2));
console.log('Tailwind設定ファイルを生成しました');

CSS変数として出力する方法

Tailwind v4ではCSS変数ベースの設定が推奨される。

/* generated/design-tokens.css */
@theme {
  --color-primary: #2563EB;
  --color-primary-hover: #1D4ED8;
  --color-secondary: #7C3AED;
  --color-text: #1F2937;
  --color-text-muted: #6B7280;
  --color-background: #FFFFFF;
  --color-surface: #F9FAFB;

  --spacing-xs: 4px;
  --spacing-sm: 8px;
  --spacing-md: 16px;
  --spacing-lg: 24px;
  --spacing-xl: 32px;

  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-full: 9999px;
}

Claude Codeでトークンからコンポーネントを生成

cat design-tokens.json | claude -p "このデザイントークンを使ったButtonコンポーネントをReact + Tailwindで生成して。primary/secondary/ghostの3バリアントで"

AIが生成する出力例:

interface ButtonProps {
  variant?: 'primary' | 'secondary' | 'ghost';
  size?: 'sm' | 'md' | 'lg';
  children: React.ReactNode;
}

export function Button({ variant = 'primary', size = 'md', children }: ButtonProps) {
  const baseStyles = 'inline-flex items-center justify-center font-medium rounded-md transition-colors';
  const variants = {
    primary: 'bg-primary text-white hover:bg-primary-hover',
    secondary: 'bg-secondary text-white hover:opacity-90',
    ghost: 'bg-transparent text-text hover:bg-surface',
  };
  const sizes = {
    sm: 'px-sm py-xs text-sm',
    md: 'px-md py-sm text-base',
    lg: 'px-lg py-md text-lg',
  };
  return (
    <button className={baseStyles + ' ' + variants[variant] + ' ' + sizes[size]}>
      {children}
    </button>
  );
}

Figma MCPとの連携

Figma MCPを使えば、Figmaのデザインファイルから直接トークンを抽出できる。

> @figma design-system.figmaのカラーパレットをデザイントークンJSON形式で抽出して

抽出から変換、コンポーネント生成の全工程がターミナルから完結する。

運用のベストプラクティス

  1. トークンJSONを単一ソースにする: Figma側の変更をJSONに反映し、そこからTailwindを生成する一方向フロー
  2. 生成ファイルにはコメントを付ける: /* AUTO-GENERATED - DO NOT EDIT */
  3. CIに変換スクリプトを組み込む: PRでトークンが更新されたら自動でTailwind設定を再生成
  4. ダークモードはトークンレベルで定義: color.dark.primaryのようにトークンを分ける

デザインシステムのAI統合により、デザイナーとエンジニアの間の手動転記作業が消える。トークンが変更されるたびにコンポーネントまで自動追従する仕組みが、一貫性のあるUIを保証する。

関連記事

A

Agentive 編集部

AIエージェントを実際に使い倒す個人開発者。サイト制作の自動化を実践しながら、その知見を発信しています。