Communitygithub.com

flcker/figma-ui-desktop

Figma デザインからデスクトップ UI(Qt Widget / QML / WinUI / Flutter など非 Web フレームワーク)を開発する際に、フレームワーク非依存のデータ変換手法で忠実度の高いUIを実現します。

figma-ui-desktop とは?

このスキルは、Figma デザインを基にデスクトップアプリケーションの UI を開発する際に、デザインの忠実度を最大限に高めるための手法とルールを定義しています。特に、Qt Widget、QML、WinUI、Flutter など Web 以外の多様なフレームワークに対応している点が特徴です。公式 Figma MCP が Web コード生成に特化し有料であるのに対し、本スキルは Framelink の `figma-developer-mcp` を利用し、フレームワーク非依存の Figma データ(座標、色、フォントサイズなど)を取得し、それを各ターゲットフレームワークの標準的なレイアウトやコントロールに翻訳する「データ翻訳手法」を採用します。中核となるのは、`get_figma_data` による正確な数値データと `download_figma_images` による視覚的なスナップショットの「二重チャネル」を並行して読み取り、一方のみでコードを書くことを禁止している点です。実装後は、実際にアプリを実行したスクリーンショットとデザイン稿を比較する検証サイクルを必須とし、手動チェックによる微調整を繰り返すことで、高い再現性を実現します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/flcker/agents-skills/tree/HEAD/skills/dev/figma-ui-desktop

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Figma デスクトップ UI 開発規範(Framelink MCP 版)

Figma デザインからデスクトップ UI を開発する際に、忠実度が低くなる問題を解決します。根本原因は、Figma の「キャンバスデータ」(絶対座標、インラインカラー、ピクセルレイヤーの重なり)をそのまま「実装データ」として扱い、直接コピーすることでレイアウトが不自然になったり、色やフォントの指定が不正確になったり、リソースが欠落することにあります。

デスクトップで公式 Figma MCP Server ではなく Framelink を使う理由: 公式 MCP の主要ツール get_design_context はデフォルトで Web コード(React/Tailwind、Vue/HTML/iOS に切り替え可能)のみを生成し、Qt Widget / QML / WinUI / Flutter をサポートしておらず、有料です。Framelink は「フレームワーク非依存の Figma データのみを提供し、翻訳はモデルに任せる」という立場をとっています。この「短所」は、デスクトップの多フレームワーク環境においてはむしろ利点となります。モデルがキャンバスデータを取得し、任意のターゲットフレームワークに翻訳できるため、Web に固定されることがありません。

本スキルは、Framelink figma-developer-mcp の以下の 2 つのツールを対象としています。

ツールチャネル役割
get_figma_data正確チャネルfileKey + nodeId に基づきキャンバスデータ(レイアウト、コンテンツ、ビジュアル、コンポーネント情報)を取得
download_figma_imagesビジュアルチャネルノード ID に基づき SVG/PNG/GIF をローカルディレクトリにエクスポート

ターゲットが Web フロントエンド(React/Vue/HTML)の場合は、figma-ui-web を使用してください。

核心原則

  1. 二重チャネルを並行して使用し、片方のみでのコーディングを禁止する。正確チャネルは正確な数値を、ビジュアルチャネルは全体のレイアウトとテキストを提供します。どちらか一方のみでは必ず再現性が低下します。
  2. 正確な値を使用し、視覚的な推定は行わない。色、フォントサイズ、フォントウェイト、スペーシング、角丸、ボーダー、シャドウはすべてデザインの正確な値を取得します。
  3. まずデザインを要求し、自発的に UI を書き始めない。
  4. 実装後は必ず検証サイクルを完了する:実際にアプリを実行したスクリーンショットとデザイン稿を比較 → 欠陥を発見して自動修正 → 人手でチェックしてさらに反復。

ワークフロー

フェーズ1:概観(要件と構造の理解)

デザインが大きい場合は、一度に全量を取得してコンテキストが過負荷になるのを防ぐため、まず概観します。

  1. get_figma_data でトップレベルの構造を取得(depth で走査階層を制御し、浅い階層から始める)。どのようなページ / セクション / コントロールがあるかを把握します。
  2. download_figma_images で全体のインターフェース画像をエクスポートし、レイアウトとテキストを理解します。

フェーズ2:精読(実装前の正確なデータ取得)

実装する特定のセクション / コントロールに対して、同時に以下を呼び出します。

  • get_figma_data(nodeId を指定し、ノードごとに座標、色値、フォントサイズ、スペーシング、角丸、ボーダーを読み取る)
  • download_figma_images(そのセクションの画像をエクスポートし、コントロール間の相対位置関係を確認する)

データを取得したら、まず構造分析を行ってからコードを書きます。

  • どのノードが繰り返しパターンか(リストアイテム、カード、ボタン)→ ターゲットフレームワークのカスタムコントロール / コンポーネントに抽出
  • どの絶対位置指定が実際にはレイアウトか(横並び、中央揃え、両端揃え、グリッド)→ 下記のマッピングテーブルに従い対応フレームワークのレイアウトに変換
  • どの要素が意味的な役割か(ナビゲーション / フォーム / リスト)→ ターゲットフレームワークの既存コントロールライブラリにマッピング
  • 画像 / アイコンノード → download_figma_images で元ファイルをダウンロードしリソースディレクトリに配置。手書きはしない

フェーズ3:実装(フレームワーク非依存の翻訳)

色、フォントサイズ、スペーシングはデザインの正確な値を使用します。翻訳時は下記の「キャンバス概念 → ターゲットフレームワーク」マッピングテーブルを参照し、コントロールをでっち上げないこと。ターゲットフレームワークに標準のレイアウト / コントロールがあればそれを使用し、絶対座標は「どうしても正確なピクセル位置が必要な場合」にのみ残します。

フェーズ4:検証サイクル

デスクトップには Playwright のようなブラウザ自動化ツールがないため、検証方法は次の通りです。実際にコンパイル・実行したプログラムのスクリーンショットを、デザイン稿のスクリーンショットと並べて比較し、明らかな欠陥があれば自動修正。人手によるチェックでより細かい問題(スペーシング、フォントウェイト、色の微妙な差)を特定し、AI に正確な修正を依頼して次の反復サイクルに入ります。

キャンバス概念 → ターゲットフレームワーク マッピングテーブル

Figma のキャンバスは絶対座標+ピクセルレイヤーであり、実装時には各フレームワークのレイアウトセマンティクスに翻訳する必要があります。翻訳時はこのテーブルを参照してください。

キャンバス / デザイン概念Qt WidgetQML (Qt Quick)WinUI 3 (XAML)Flutter
横並びQHBoxLayoutRowStackPanel (Orientation=Horizontal)Row
縦並びQVBoxLayoutColumnStackPanel (Orientation=Vertical)Column
グリッドレイアウトQGridLayoutGrid / GridLayoutGridGridView / Table
絶対位置指定setGeometry / moveItem + x/yCanvas + Canvas.Left/TopStack + Positioned
重なり / オーバーレイ子ウィジェットの重ね合わせ / raise()z プロパティ / StackCanvas.ZIndexStack
中央揃えaddStretch / setAlignmentanchors.centerInHorizontalAlignment/VerticalAlignment=CenterCenter / Align
両端揃え両側に addStretchanchors.left/right + marginsマージンによる割り当てMainAxisAlignment.spaceBetween
スペーシングQSpacerItem / layout spacingspacing プロパティMargin / PaddingSizedBox / Padding / Spacer
色QPalette / stylesheetTheme / プロパティバインディングリソースディクショナリ ResourceDictionaryThemeData / ColorScheme
フォントサイズ / フォントQFontfont.pixelSizeFontSizeTextStyle.fontSize
角丸stylesheet border-radiusRectangle radiusCornerRadiusBorderRadius
影QGraphicsDropShadowEffectDropShadowThemeShadow / DropShadowBoxShadow
アイコンQIcon / リソースImage / アイコンフォントFontIcon / SymbolIconIcon
コンポーネントの再利用カスタム QWidget サブクラスカスタム QML ComponentUserControl / カスタムコントロールWidget
状態 / バリアント列挙型 + update()State / プロパティ駆動VisualStateManagersetState / AnimatedWidget

怠け防止の鉄則

AI は片方のチャネルだけでコードを書きがちです。以下のように明確に要求してください。

  • 「get_figma_data と download_figma_images を同時に呼び出してデザインを読むこと」
  • 「画像やスクリーンショットだけでデザインを読んでコードを書くことは許可しない」
  • 「get_figma_data の正確な値を一行ずつ読み、色、フォントサイズ、スペーシングを比較し、視覚的な推定は行わない」
  • 「マッピングテーブルに従い、ターゲットフレームワークの標準レイアウト / コントロールに翻訳し、でっち上げない」

忠実度セルフチェックリスト

生成後、各項目を確認します(「全体的に似ているか」よりも信頼性が高いです)。

  • 色(正確な値を使用しているか、近似値ではないか)
  • フォントサイズ / フォントウェイト
  • スペーシング / マージン / パディング
  • 角丸 / ボーダー / シャドウ
  • レイアウト(ターゲットフレームワークの標準レイアウトに翻訳されているか、絶対座標をそのままコピーしていないか)
  • 階層 / 重なり順序
  • アイコン / 画像は元のファイルを使用しているか、手書きではないか
  • 繰り返しパターンはコンポーネント / カスタムコントロールに抽出されているか

参考情報

本手法は、公式 Figma MCP + Playwright による UI 開発フロー(「Figma mcp と Playwright mcp を使った UI 開発とデバッグ効率化」を参照)から着想を得ています。「二重チャネル + 検証サイクル + 怠け防止の明確な要求」という中核的な考え方を保持し、ツール名を Framelink figma-developer-mcp に適合させ、マッピングテーブルをデスクトップ向けの複数フレームワークをカバーするように拡張しています。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル