木曜日, 8月 28, 2025
木曜日, 8月 28, 2025
- Advertisment -
ホームニューステックニュースFigma MCPを攻略して最高のコード生成を実現する

Figma MCPを攻略して最高のコード生成を実現する



はじめに

こんにちは!令和トラベル Frontendエンジニアのふくだです。

「Figma MCPを使っているけれど、生成されるコードの精度がイマイチ…」

そんな悩みを抱えていませんか?

本記事では、実際にFigma MCPを使ったコード生成を体験し、そこから段階的に改善していく過程を詳しく解説します。セットアップから始まり、失敗例の分析、具体的な改善手法、そして最終的なベストプラクティスまで、実践的なアプローチでFigma MCPのポテンシャルを最大限引き出す方法をお伝えします。

検証環境

  • Figmaデスクトップアプリ(Web版では利用できないので注意)
  • MCP対応エディタ(VS Code, Cursor, Windsurf, Claude Code等)
  • Next.js 14+ (App Router)
  • TypeScript、Tailwind CSS

Step 1: Figmaデスクトップアプリの設定

まずはFigma側の設定から

  1. Figmaデスクトップアプリを最新版に更新
  2. デザインファイルを開く
  3. 左上のFigmaメニュー → Preferences → 「Enable Dev Mode MCP Server」 をチェック
  4. 画面下部に確認メッセージが表示されたら成功。サーバーがhttp://127.0.0.1:3845/sseで起動します

Step 2: Claude CodeでのMCP設定

👇 以下のコマンドでFigma MCPサーバーを登録してください


claude mcp add --transport sse figma-mcp http://127.0.0.1:3845/sse

設定確認

Claude Code内での確認

Step 3: 動作確認

Figmaデザインリンクでの確認

  1. Figmaで任意のフレームを右クリック
  2. 「Copy link to section」 を選択
  3. Claude Codeにリンクを貼り付け
  4. 以下のようにプロンプト
このFigmaデザインを分析して、Next.jsのコンポーネントを生成してください。
[Figmaリンクを貼り付け]

接続が成功している場合

  • Claude Codeがデザイン情報を取得
  • デザイン要素(色、サイズ、レイアウト等)を認識
  • 適切なReact/TypeScript/Tailwindコードを生成
トラブルシューティング

接続に失敗する場合:

  1. Figmaデスクトップアプリの再起動
  2. Claude Codeの再起動
  3. MCP設定の再登録

claude mcp remove figma-mcp
claude mcp add --transport sse figma-mcp http://127.0.0.1:3845/sse

実験の内容

シンプルなランディングページをFigmaで作って、何も工夫せずにコード生成を試してみます。

Figmaデザイン:

  • ヘッダー(ナビゲーション)
  • ヒーローセクション(タイトル、説明、CTA)
  • 特徴セクション(3つのカード)
  • フッター

生成プロンプト

FigmaのこのデザインからNext.js(App Router)のコードを生成してください。TypeScriptとTailwind CSSを使用してください。

結果:精度は低めだった

生成されたコード(抜粋):


export default function LandingPage() {
  return (
    div className="w-[1440px] h-[3000px] bg-white"> {}
      div className="absolute top-0 left-0 w-full h-20 bg-blue-500"> {}
        span className="text-lg font-medium text-black">Headerspan> {}
      div>
      div className="absolute top-20 left-0 w-full h-600px"> {}
        h1 className="text-6xl font-bold text-red-500">Hero Titleh1> {}
      div>
      {}
    div>
  );
}

何が悪かったのか分析する

生成されたコードの改善点は以下:

  1. レスポンシブ対応が全くない:固定サイズ(1440px)で生成されてしまう
  2. レイアウトがぐちゃぐちゃ:absolute positioningでとにかく置いていくスタイル
  3. 色やフォントが全然違う:デザインで指定した色とまったく違う色に
  4. コンポーネント分割ができてない:全部を1ファイルに詰め込み
  5. Next.jsの良いところを使ってくれない:Image、Link等のコンポーネント未使用

1. Figmaデザイン側を改善

Auto Layoutの徹底活用

推奨構造:
Container (Auto Layout: Vertical, Fill)
├── Header (Auto Layout: Horizontal, Hug vertical, Fill horizontal)
├── Main (Auto Layout: Vertical, Fill both)
│   ├── HeroSection (Auto Layout: Vertical, Hug vertical, Fill horizontal)
│   ├── FeatureSection (Auto Layout: Horizontal, Hug vertical, Fill horizontal)
│   └── ...
└── Footer (Auto Layout: Horizontal, Hug vertical, Fill horizontal)

デザイントークン(Variables)の設定

カラーパレット:
- primary-50: #eff6ff
- primary-500: #3b82f6
- primary-900: #1e3a8a

スペーシング:
- xs: 4px
- sm: 8px
- md: 16px
- lg: 24px
- xl: 32px

タイポグラフィ:
- heading-xl: 48px/1.2/700
- heading-lg: 32px/1.3/600
- body-md: 16px/1.5/400

AIに対して、理解しやすい命名をする

✅ 良い例(AIが理解しやすい):
- HeaderNavigation
- HeroSection  
- FeatureCard
- CTAButton

❌ 悪い例(AIが理解しにくい):
- Frame 123
- Group 1
- Rectangle 45
- Text

2. コンポーネント化とCode Connect設定

主要コンポーネント:
├── Button (variants: primary, secondary, size: sm, md, lg)
├── Card (variants: default, featured)
├── Typography (variants: h1, h2, body, caption)
└── Layout (variants: header, main, footer)

3. 生成プロンプトの改善

Before(改善前)

FigmaのこのデザインからNext.jsのコードを生成してください。

After(改善後)

Figmaの選択したコンポーネントから以下の仕様でNext.jsコードを生成してください:

【技術仕様】
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- コンポーネント: Client Component('use client'使用)

【構造要件】
- レスポンシブ対応(mobile-first)
- セマンティックなHTML構造
- アクセシビリティ対応(aria-label等)
- Next.js Image/Linkコンポーネント使用

【デザイントークン】
#get_variable_defs ツールを使用してFigma変数を取得し、Tailwindクラスに変換

【コンポーネント分割】
- 各セクションを独立したコンポーネントに分割
- propsインターフェースを適切に定義
- 再利用可能な設計

実験2:改善後の生成結果

改善されたコード例

'use client'

import Image from 'next/image'
import Link from 'next/link'


interface HeroSectionProps {
  title: string
  subtitle: string
  ctaText: string
  backgroundImage: string
}

export default function HeroSection({
  title,
  subtitle,
  ctaText,
  backgroundImage
}: HeroSectionProps) {
  return (
    section className="relative min-h-screen flex items-center justify-center overflow-hidden">
      {}
      div className="absolute inset-0 z-0">
        Image
          src={backgroundImage}
          alt="Hero background"
          fill
          className="object-cover"
          priority
        />
        div className="absolute inset-0 bg-slate-900/50" />
      div>
      
      {}
      div className="relative z-10 max-w-4xl mx-auto text-center px-4 sm:px-6 lg:px-8">
        h1 className="text-4xl sm:text-5xl md:text-6xl lg:text-7xl font-bold text-white mb-6 leading-tight">
          {title}
        h1>
        p className="text-lg sm:text-xl md:text-2xl text-slate-100 mb-8 max-w-3xl mx-auto leading-relaxed">
          {subtitle}
        p>
        Link
          href="#features"
          className="inline-flex items-center justify-center px-8 py-4 text-lg font-semibold text-slate-900 bg-white rounded-lg hover:bg-slate-50 transition-colors duration-200 focus:ring-4 focus:ring-white/20"
          role="button"
          aria-label={`${ctaText} - 機能セクションへ移動`}
        >
          {ctaText}
        Link>
      div>
    section>
  )
}

改善点の詳細

  1. レスポンシブ対応:mobile-firstアプローチ
  2. Next.js最適化:Image、Linkコンポーネント使用
  3. アクセシビリティ:適切なaria-label、role属性
  4. デザイントークン活用:Figma変数がTailwindクラスに正確変換
  5. TypeScript強化:明確なProps定義
  6. パフォーマンス:priority属性、適切な画像最適化

Playwright MCPによるデザイン実装の視覚的検証

Figma MCPで生成したNext.jsアプリケーションが、実際にFigmaデザインと一致しているかをPlaywright MCPを使って自動検証できます。

Playwright MCPによるデザイン検証の仕組み

Playwright MCPは、LLMとブラウザ自動化を橋渡しするサーバーで、実際のブラウザでスクリーンショットを撮影し、Figmaデザインと視覚的に比較することで実装の正確性を確認できます。

セットアップ手順


npm install -g @playwright/mcp


npm install pixelmatch pngjs


claude mcp add --transport stdio playwright-mcp npx @playwright/mcp

実際の活用例:Figmaデザインとの比較検証

プロンプト例

Figma MCPで生成したHeroSectionコンポーネントが、元のFigmaデザインと一致しているか確認してください。

Playwright MCPを使用して以下を実行:
1. http://localhost:3000 に移動
2. HeroSectionのスクリーンショットを撮影
3. 撮影した画像を表示して視覚的に確認
4. Figmaデザインと比較して相違点を指摘してください

AIの実際のMCP実行

AIが実行するPlaywright MCPコマンド例:

1. ページナビゲーション:
   - browser_navigate: http://localhost:3000

2. ビューポートサイズ調整:
   - browser_resize: width: 1440, height: 900

3. スクリーンショット撮影:
   - browser_take_screenshot (フルページまたは要素指定)

4. AIによる視覚分析:
   撮影されたスクリーンショットを確認して、Figmaデザインと比較分析

実際のAI応答例

✅ スクリーンショット撮影完了

【視覚分析結果】
撮影した実装画像を確認しました:

❌ 発見された相違点:
1. ヒーロータイトル
   - フォントサイズが小さく見える(期待値より約10%小さい)
   - 行間が狭い

2. CTAボタン
   - 角の丸みが少ない
   - パディングが不足している

3. 背景色
   - グラデーションの終点が薄い
   - Figmaより彩度が低い

✅ 一致している要素:
- 全体レイアウト構造
- テキストの配置
- レスポンシブ表示

推奨修正:
- text-4xl → text-5xl に変更
- rounded-md → rounded-lg に変更
- px-6 py-3 → px-8 py-4 に変更

AIが実際に発見する問題の例

視覚的差分レポート

【検証結果】Figmaデザインとの比較

❌ 発見された問題:
1. ヒーロータイトルのフォントサイズ
   - Figma: 48px (heading-xl)
   - 実装: 42px
   - 修正必要: font-size クラスを text-5xl に変更

2. CTAボタンの色
   - Figma: #3B82F6 (primary-500)  
   - 実装: #60A5FA (primary-400)
   - 修正必要: bg-primary-500 クラスを適用

3. スペーシング
   - Figma: 上下マージン 64px
   - 実装: 上下マージン 48px
   - 修正必要: py-16 を適用

4. レスポンシブブレークポイント
   - モバイル表示でタイトルが2行になっていない
   - Figmaデザインでは1行表示の指定

✅ 一致している要素:
- 全体のレイアウト構造
- カラーパレットの基本適用
- コンポーネントの配置

自動修正プロンプトの生成

AIが生成する修正指示

【自動生成された修正コード】

// 修正前


// 修正後  


// CTAボタンの修正

実際の開発での活用タイミング

デザイン検証が有効な場面

  1. プロトタイピング段階

    • Figma MCPで生成したコンポーネントの確認
    • デザイナーからのフィードバック前の事前チェック
  2. リファクタリング時

    • CSS変更後の視覚的影響確認
    • レスポンシブ対応の検証
  3. コンポーネント修正時

    • Tailwind クラス変更後の即座確認
    • デザイントークン適用状況の検証

実用的な使用例

開発者: 「HeroSectionのボタンサイズを修正しました。
        Playwright MCPでスクリーンショットを撮って、
        Figmaデザインと比較してください」

AI: ✅ スクリーンショット完了
    修正後のボタンサイズがFigmaデザインに一致しています。
    パディングとフォントサイズが正確に適用されています。

この手法により、デザイナーの意図が100%実装に反映され、デザインシステムの一貫性が自動的に保たれるようになります。

Figmaファイル準備のチェックリスト

✅ 構造の最適化

✅ デザイントークンの設定

✅ その他の準備

効果的なプロンプトを書くには

❌ 悪いプロンプト例

FigmaからNext.jsのコードを生成してください。

問題点: 具体性がなく、MCPツールの活用指示もない

✅ 良いプロンプト例

以下のFigmaリンクからNext.jsコンポーネントを生成してください:

[Figmaリンクを貼り付け]

【必須実行手順】
1. get_variable_defs でFigma変数(色・スペーシング・タイポ)を取得
2. get_code でコンポーネント構造情報を取得
3. 上記情報を基にコード生成

【技術仕様】
- Next.js 14 App Router + TypeScript
- Tailwind CSS(Figma変数をクラスに変換)
- Client Component('use client' 使用)
- レスポンシブ対応(sm: md: lg: 使用)

【品質要件】
- セマンティックHTML構造
- Next.js Image/Linkコンポーネント使用
- Props interfaceでTypeScript強化
- data-testid属性をコンポーネントに追加

【注意事項】
- Auto Layoutの構造を正確に反映
- デザイントークンの色コードを直接記述しない
- コンポーネント名はFigmaレイヤー名に準拠

実装してください。

🎯 さらに具体的な指示

HeroSectionコンポーネントを実装中です。

【現在の問題】
生成されたコードでボタンの色が #60A5FA になっていますが、
Figmaでは primary-500 (#3B82F6) の指定です。

【修正要求】
1. get_variable_defs でprimary-500の正確な値を確認
2. bg-primary-400 → bg-primary-500 に修正
3. ホバー時のスタイル(hover:bg-primary-600)も追加

この修正を反映したコードを生成してください。
プロンプト作成のコツとよくある失敗パターン

💡 プロンプト作成のコツ

効果的な指示のポイント

  1. MCPツールの指定(通常は自動選択されるが、結果が不正確な場合は明示的に get_variable_defs, get_code を指定)
  2. Figmaリンクの正確な貼り付け(必須)
  3. 具体的な技術要件(フレームワーク、ライブラリ)
  4. 品質基準の明確化(レスポンシブ、アクセシビリティ)
  5. 検証可能な成果物(data-testid等の確認要素)

🚨 よくある失敗パターン

MCPツールを指定しない(結果が不正確な場合)

Figmaのデザインからコンポーネントを作って

→ 複雑な要求では自動選択が不正確になる場合がある

Figmaリンクの不備

このデザインからコード生成してください(リンクなし)

→ 対象デザインが不明

曖昧な修正指示

色を直してください

→ どの色をどう修正するか不明

改善例

primary色の正確な値を確認し、ボタンの bg-blue-400 を bg-primary-500 に修正してください。
必要に応じて get_variable_defs を使用してください。

Figma MCPは適切な準備と工夫をすることで、デザイン→コードを最効率で実現する MCP だと思っています。若干、大袈裟なプロンプトの比較になったりしましたが、プロンプトの精度を高めると生成されるコードの質も大きく変わってくるなと実感しています。

これらは Rules としてあらかじめ記載しておくと、チーム全体でさらに安定したパフォーマンスを目指せると思っています。
とても難しいことではありますが、Figma MCPに限らず、コードを自動生成していく上で、チーム内で行われる意識的・無意識的な意思決定を日々言語化しておくことがより重要だなと感じています。。。
LLM出力に対する、なんとなくのモヤモヤを言語化できた時、より自分の理想に近いコード生成ができると思っています!AIにリソースを割くのは大変ですが頑張りましょう!!

参考リンク

8/29に令和トラベルオフィスで開催される NEWT Tech Talk は、「AI x フロントエンド」 と題して、『NEWT(ニュート)』のプロダクト開発を牽引するフロントエンドチームよりyassan、Ippo Matsuiの2名が登壇!さらに今回は特別ゲストといたしましてLAPRAS株式会社からRyo Kawamataさん、Dress Code株式会社からYuji Yamaguchiさんをお迎えし、以下のようなテーマでLT形式で発表を行います。

移転後の新オフィスにてオンライン・オフラインのハイブリット開催となりますので、ご興味のある方はぜひご参加ください!

https://reiwatravel.connpass.com/event/363864/



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -