Figma to Codeの幻想を捨て、エンジニアリングの「真の自動化」を実装せよ
「デザインをボタン一つでプロダクション品質のコードへ」。この甘美な響きに騙され、数多のプロジェクトが「生成されたスパゲッティコード」の残骸に埋もれてきた。
UI/UXエンジニアとして断言する。「Figma to Code」は、そのまま吐き出されたコードをコピペするツールではない。それは、デザインの意図(Intent)をコードの構造(Schema)へと変換する「抽象化レイヤー」として扱うべきものだ。
本稿では、市場に溢れるツールを単なる比較対象としてではなく、独自のパイプラインに組み込むための「骨の髄まで掌握するハック」を伝授する。
—
1. ツール選定の基準:出力されるDOM構造を疑え
現在、主流となっているツール(Locofy, Builder.io, Anima等)は、本質的に「Figmaのレイヤー階層をどう解釈するか」というアルゴリズムの差でしかない。
- Locofy.ai: レスポンシブ対応のロジック構築が強力だが、依存ライブラリのブラックボックス化が懸念。
- Builder.io (Mitosis): 唯一、真に「クロスフレームワーク」を意識したアーキテクチャを持つ。React, Vue, Qwikへのトランスパイル能力は頭一つ抜けている。
エキスパートの視点: ツールを選ぶ基準は「どれだけ綺麗に書けるか」ではない。「どれだけ我々のデザインシステム(Design Tokens)に干渉できるか」だ。CSSを直書きするツールは即座に除外せよ。我々が求めるのは、Tailwind CSS等のユーティリティクラス、あるいはDesign Tokenを直接注入するインターフェースである。
—
2. デザインシステムをAPIで叩く:自動化パイプラインの深層
FigmaのUIをいじるのは素人の仕事だ。プロは Figma REST API と Figma Variables を活用し、フロントエンドの型定義(TypeScript Interface)を同期させる。
カスタムCLIによる型定義の自動生成(概念スクリプト)
Figma上の「Token」を、フロントエンドの`theme.ts`に自動同期するスクリプトをCI/CDに組み込む。これにより、デザイナーが色を変えた瞬間、型エラーが発生し、ビルドが落ちるという「堅牢な開発環境」が完成する。
// sync-tokens.ts
import axios from ‘axios’;
import fs from ‘fs’;
/
- FigmaのVariables APIを叩き、JSONをTypeScriptの定数へ変換する
- これをGitHub Actionsで毎朝実行し、差分があればPRを立てる
/
async function syncDesignTokens() {
const { data } = await axios.get(`https://api.figma.com/v1/files/${FILE_ID}/variables/local`, {
headers: { ‘X-Figma-Token’: process.env.FIGMA_TOKEN }
});
// 抽出したトークンを型安全なオブジェクトにマッピング
const tokens = transformToThemeObject(data.meta.variables);
fs.writeFileSync(‘./src/styles/tokens.ts’, `export const theme = ${JSON.stringify(tokens, null, 2)} as const;`);
}
—
3. 「デザイン負債」を極限まで減らすための最適化ハック
自動生成されたコードがゴミになる最大の理由は、Figma上のレイヤー構造がフロントエンドのコンポーネント設計と一致していないことにある。
解決策:Figmaコンポーネントの「設計思想」を強制する
Figmaからコードを生成する際、以下のルールをデザイナーに強制し、CIでlint(Linting Figma layers)せよ。
1. Auto Layoutの純粋化: `absolute`配置は禁止。すべて`Flexbox`または`Grid`で記述させる。
2. コンポーネント・インスタンスの分離: 原則として、Figma上の「Main Component」と「実装上のコンポーネント」を1:1でマッピングする。
3. Naming Conventionの統一: `Button/Primary/Large` という命名規則をコードのファイルパスと一致させる。
—
4. パフォーマンスの真髄:生成コードのメモリ最適化
自動生成ツールは、往々にして過剰なラッパー(`div`の海)を生成する。これを放置することは、ブラウザのレンダリングパイプラインを破壊し、TBT(Total Blocking Time)を悪化させる。
極限のハック:
生成されたJSXを `Babel` や `SWC` のプラグインでフックし、不要なラッパーをASTレベルで削除するカスタムトランスパイラを作成せよ。
// AST操作によるラッパー削除のイメージ
module.exports = function({ types: t }) {
return {
visitor: {
JSXElement(path) {
// 特定の不要なクラスを持つdivを検出し、その中身(children)で置換する
if (path.node.openingElement.attributes.some(attr => attr.value?.value === ‘unnecessary-wrapper’)) {
path.replaceWithMultiple(path.node.children);
}
}
}
};
};
—
結論:Figma to Codeは「自動化」ではなく「翻訳」である
デザイナーがFigmaで描いた夢を、エンジニアがコードで現実にする。その間の「翻訳」を高速化するのがこれらのツールの役割だ。
- 初心者は:ツールを使ってコードをコピペする。
- 上級者は:ツールが出力する中間表現をフックし、自社のアーキテクチャに最適化する。
- 伝説的なエンジニアは:ツールそのものを自作し、デザインシステムがそのままプロダクトとしてデプロイされる「完全自動パイプライン」を構築する。
もしあなたが後者を目指すなら、FigmaのPlugin APIを深く掘り下げ、UIを描画するのではなく「デザインのメタデータを抽出するエンジン」を開発することから始めよ。
コードは書くものではない。デザインという概念から、論理的に導き出されるものである。