Figma MCPでデザインからコードを自動生成
Figmaで作ったデザインがそのままコードにできる時代になりました。 ClaudeのFigma MCPを使うと、デザインファイルのURLを貼るだけでコードが生成されます。 デザイナーはコードを気にせず制作に集中できて、ディレクターはFigmaを渡すだけでブラウザで確認できるプロトタイプが手に入り、プログラマーは微調整とリファクターだけで簡潔なワークフローが実現します。 この記事では、実際にLPを1本作りながら「どう準備すれば精度の高いコードが出るか」を試した記録をまとめています。テキストスタイルの整理から、コンポーネントの設計、コード生成の指示方法までを振り返ります。

はじめに
ClaudeのFigma MCPを使って、FigmaのデザインファイルからLP用のHTML/CSSを自動生成する実験をしました。この記事はその忘備録です。
出来たもの: https://celebrated-truffle-4b2009.netlify.app

やったこと
1. テキストスタイルの登録
まず、タイポグラフィをFigmaのテキストスタイルとして登録しました。
モバイルとデスクトップで別々に定義しています。
Mobile/Heading/H1〜H4、Mobile/Body/Large・SmallDesktop/Heading/H1〜H4、Desktop/Body/Large・Small
スタイルを登録しておくことで、コンポーネントとスタイルが紐づき、コード生成時に一貫したデザインになります。

2. Buttonコンポーネントの作成
Chakra UIのように、Variant × Size × State の組み合わせでButtonを作りました。
- Variant:Primary / Secondary / Ghost / Danger
- Size:SM / MD / LG
- State:Default / Hover / Disabled
合計36バリエーションをFigmaのComponent Variantsで管理します。

3. ProblemCardコンポーネントの作成
ポイントはComponent Propertiesの活用です。
heading、body→ テキストプロパティicon→ Instance Swapプロパティ
Instance Swapを使うと、配置後にアイコンを右パネルから1クリックで差し替えられます。アイコンはIconifyプラグインでインポートしました(SVG形式推奨)。
4. LPのセクション構成
セクションはコンポーネントにしないのがポイントです。
再利用しないものをComponentsに入れると管理が煩雑になります。セクションはLPページに直接フレームとして配置しました。
構成はこちらです。
- StickyHeader(island style、floating)
- Hero
- ProblemSection
- SolutionSection(2カラム)
- TestimonialSection(カルーセル)
- CTASection
- Footer
5. Figma MCPでコード生成
LPフレームのURLをClaudeに渡すだけで、HTML/CSSが生成されました。
https://www.figma.com/design/xxx?node-id=45-2コード生成時に一緒に指示したこと:
- レスポンシブ対応(768px / 1024px ブレークポイント)
- モバイルは1カラム
- TestimonialはJavaScriptでカルーセル実装
テキストスタイルやコンポーネントが整理されていると、生成されるコードの品質が上がります。
調整
一発では思い通りのものには出来ないため、様々な調整と修正が別途必要でした。
レイアウト
- Solutionセクションがデスクトップで溢れた →
flex: 1+min-width: 0で修正 - 3カラムが折り返した →
flex-wrap: nowrapに変更 - Problem / Solutionにmax-width内部ラッパーが必要だった
カルーセル
- カード幅を
calc((100% - 48px) / 3)で指定したが100%がcontainer幅を参照しなかった getBoundingClientRect()でも途中から止まった → JSでcontainer幅から動的計算に書き直し
画像
- Unsplashがブロックされた → picsum.photosに変更
Hero
- p5.jsのcanvasが表示されなかった →
canvas.parent()の参照方法を修正、CSSに#hero-canvas canvasを追加
モバイルメニュー
- 全画面にならなかった →
z-index不足、inset: 0だけでは効かずwidth: 100vw; height: 100vhに変更
まとめ
ステップ | ポイント |
|---|---|
テキストスタイル登録 | Mobile / Desktop を分けて管理 |
コンポーネント | 再利用するものだけ登録する |
Instance Swap | アイコンの差し替えが楽になる |
セクション | LPページに直接フレームで配置 |
コード生成 | node-idつきURLをClaudeに渡すだけ |
デザインファイルの構造が整っているほど、生成されるコードもきれいになる印象でした。引き続き改善していきます。

Takaaki Yoneda
環境保全、グラフィックデザイン、マーケティングなどプログラミング以外にも幅広い興味を持ったソフトウェアエンジニアです。 最近の趣味は、ボードゲームと登山