argument: $ARGUMENTS
Claude Command: Figma to Code
이 커맨드는 Figma 디자인 데이터를 기반으로 React 컴포넌트 코드를 생성합니다.
워크플로우 (6단계)
Phase 1. 입력 파싱
$ARGUMENTS에서 Figma URL과 컴포넌트 파일 경로를 추출합니다.
Figma URL 처리:
- URL에서
node-id=(\d+-\d+) 패턴 추출
-를 :로 치환하여 MCP 호출용 nodeId 생성 (예: node-id=1-2 → 1:2)
- URL이
https://figma.com/design/:fileKey/branch/:branchKey/:fileName 형식이면 branchKey를 fileKey로 사용
컴포넌트 경로 처리:
- 파일명에서 컴포넌트 이름 추출:
MyComponent.tsx → MyComponent
- FSD 레이어 추출:
src/shared/... → Shared, src/features/... → Features 등
- 대상 파일이 비어있지 않으면 사용자에게 덮어쓸지 확인
Phase 2. Figma 디자인 데이터 수집
3개 MCP 도구를 병렬 호출합니다:
mcp__figma-desktop__get_screenshot(nodeId) — 시각적 참조 이미지
mcp__figma-desktop__get_design_context(nodeId) — 레이아웃, 색상, 타이포, 크기, 자식 노드 구조
mcp__figma-desktop__get_variable_defs(nodeId) — 바인딩된 디자인 토큰 변수명
clientLanguages: typescript
clientFrameworks: react
에러 처리:
- MCP 도구 호출 실패 시: "Figma Desktop 앱을 실행하고 해당 파일을 열어주세요." 안내
Phase 3. 참조 패턴 탐색
프로젝트의 기존 패턴을 파악합니다:
src/shared/ui/ 내 유사 컴포넌트 패턴 확인:
cn() 유틸리티 사용 방식
forwardRef 패턴
- named export 패턴
- Props 타입 정의 방식
- 대상 디렉토리의
index.ts, 형제 파일 확인하여 일관된 패턴 파악
Phase 4. Figma → 디자인 토큰 매핑 분석
이 프로젝트는 @exem-fe/tailwindcss-plugin을 통해 디자인 토큰을 Tailwind 클래스로 사용합니다.
주의: 기본 Tailwind 토큰이 전부 교체(override)되어 있으므로 반드시 아래 토큰만 사용해야 합니다.
색상 매핑 전략 (우선순위 순):
- Figma 변수 바인딩이 있으면 그 이름을 직접 사용 (예:
color/gray-05 → text-gray-05)
- 시맨틱 토큰 우선 사용:
- 텍스트:
text-text-primary, text-text-secondary, text-text-tertiary, text-text-disabled, text-text-accent, text-text-critical 등
- 배경/면:
bg-surface-primary-default, bg-elevation-elevation-0 등
- 보더:
border-border-primary, border-border-secondary 등
- 아이콘:
text-icon-primary, text-icon-secondary 등
- 원시 색상 스케일:
gray-00~10, red-00~10, blue-00~10 등 + mono-white, mono-black
- 매칭 불가 시 가장 가까운 토큰 +
/* TODO: exact color #XXXXXX */ 코멘트
타이포그래피:
| Figma 크기 |
Tailwind 클래스 |
| 28px/140% |
text-header-1 |
| 24px/140% |
text-header-2 |
| 20px/140% |
text-title-1 |
| 18px/140% |
text-title-2 |
| 16px/140% |
text-body-1 |
| 14px/140% |
text-body-2 |
| 12px/140% |
text-body-3 |
| 11px/140% |
text-caption |
폰트 두께: font-regular(400), font-medium(500), font-semibold(600), font-bold(700)
Border Radius: rounded-weak(4px), rounded-medium(6px), rounded-strong(8px), rounded-circle(999px)
Box Shadow: shadow-weak(16px), shadow-medium(20px), shadow-strong(24px), shadow-preview
레이아웃 매핑:
- Figma auto-layout direction →
flex flex-row / flex flex-col
- gap, padding → Tailwind spacing (4px=1 단위) 또는 arbitrary
[Npx]
- child sizing: fill →
flex-1, fixed → w-[Npx], hug → w-fit
컴포넌트 인식:
- Figma 내 컴포넌트 인스턴스 →
@exem-fe/react 매핑 (Button, TextField, Select, Table, Tabs, Modal, Tooltip, Badge, Tag, Checkbox, Radio, Switch 등)
- 프로젝트 커스텀 UI →
src/shared/ui/ 참조 (Card, Form, DropdownMenu, Sheet, Popover, Skeleton 등)
- 아이콘 →
@exem-fe/icon ({Name}{Variant}Icon 패턴, iconSizes 또는 className="size-{n}")
Phase 5. 코드 생성
Phase 2~4의 분석 결과를 기반으로 컴포넌트 코드를 생성합니다.
생성 규칙:
- import 순서: 외부 패키지 →
@exem-fe/* → @/ 프로젝트 → 상대 경로
cn() 유틸리티 (@/shared/util) 사용하여 className 합성
- Tailwind 클래스만 사용 — 인라인 스타일 지양, 동적 값만 예외
- 디자인 토큰 전용 — hex 하드코딩 금지
@exem-fe/react 컴포넌트 우선 사용 (Button > <button>, TextField > <input>)
@/ alias 사용
- 루트 요소에
className prop 전달 (합성 가능)
- named export (default export 아님)
- Tailwind arbitrary values
[Npx]는 표준 spacing에 없을 때만 사용
Props 추론:
- 텍스트 노드 → string props
- 반복 요소 → array/children props
- 항상
className?: string 포함
코드 구조 예시:
import { cn } from '@/shared/util'
interface MyComponentProps {
className?: string
title: string
}
export function MyComponent({ className, title }: MyComponentProps) {
return (
<div
className={cn(
'flex flex-col gap-2 p-4 bg-surface-primary-default rounded-strong',
className
)}
>
<span className="text-body-1 font-medium text-text-primary">{title}</span>
</div>
)
}
Phase 6. 검증 및 출력
생성된 코드를 검증합니다:
- 모든 색상이 토큰 기반 Tailwind 클래스인지 확인 (hex 하드코딩 없음)
- import 경로가
@/ alias를 사용하는지 확인
cn() 사용 확인
- named export 확인
@exem-fe/react 컴포넌트가 적절히 사용되었는지 확인
결과 요약 출력:
Figma → Code 완료: {ComponentName}
사용된 디자인 토큰:
- 색상: {사용된 색상 토큰 목록}
- 타이포: {사용된 타이포 클래스 목록}
- 기타: {radius, shadow 등}
사용된 컴포넌트:
- @exem-fe/react: {Button, TextField, ...}
- @exem-fe/icon: {SearchIcon, ...}
- @/shared/ui: {Card, ...}
생성된 파일: {컴포넌트 경로}
에러 처리
| 상황 |
대응 |
| Figma URL 형식 오류 |
URL에서 node-id 파라미터를 찾을 수 없다고 안내, 올바른 URL 형식 예시 제공 |
| MCP 도구 호출 실패 |
"Figma Desktop 앱을 실행하고 해당 파일을 열어주세요." 안내 |
| 대상 파일이 비어있지 않음 |
사용자에게 덮어쓸지 확인 |
| 매핑 불가 색상 |
가장 가까운 토큰 사용 + /* TODO: exact color #XXXXXX */ 코멘트 |
예시
입력
/figma-to-code https://figma.com/design/abc123/MyProject?node-id=1-2 src/features/widget-builder/ui/ColumnHeader.tsx
실행 과정
- 입력 파싱: nodeId=
1:2, Name=ColumnHeader, Layer=Features
- Figma 수집: get_screenshot, get_design_context, get_variable_defs 병렬 호출
- 참조 패턴:
src/shared/ui/ 및 형제 파일 패턴 확인
- 토큰 매핑: Figma 속성 → Tailwind 토큰 클래스 변환
- 코드 생성:
ColumnHeader.tsx에 컴포넌트 코드 작성
- 검증: 토큰 사용, import 경로, named export 확인
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: figma-to-code3description: Figma 디자인을 코드로 변환. Figma URL과 빈 컴포넌트 파일 경로를 받아 UI 구현. "/figma-to-code", "피그마 구현" 등의 요청 시 사용 Use when this capability is needed.4---56argument: $ARGUMENTS78# Claude Command: Figma to Code910이 커맨드는 Figma 디자인 데이터를 기반으로 React 컴포넌트 코드를 생성합니다.1112## 워크플로우 (6단계)1314### Phase 1. 입력 파싱1516`$ARGUMENTS`에서 Figma URL과 컴포넌트 파일 경로를 추출합니다.1718**Figma URL 처리:**19201. URL에서 `node-id=(\d+-\d+)` 패턴 추출212. `-`를 `:`로 치환하여 MCP 호출용 nodeId 생성 (예: `node-id=1-2` → `1:2`)223. URL이 `https://figma.com/design/:fileKey/branch/:branchKey/:fileName` 형식이면 `branchKey`를 `fileKey`로 사용2324**컴포넌트 경로 처리:**25261. 파일명에서 컴포넌트 이름 추출: `MyComponent.tsx` → `MyComponent`272. FSD 레이어 추출: `src/shared/...` → `Shared`, `src/features/...` → `Features` 등283. 대상 파일이 비어있지 않으면 사용자에게 덮어쓸지 확인2930### Phase 2. Figma 디자인 데이터 수집31323개 MCP 도구를 **병렬** 호출합니다:33341. `mcp__figma-desktop__get_screenshot(nodeId)` — 시각적 참조 이미지352. `mcp__figma-desktop__get_design_context(nodeId)` — 레이아웃, 색상, 타이포, 크기, 자식 노드 구조363. `mcp__figma-desktop__get_variable_defs(nodeId)` — 바인딩된 디자인 토큰 변수명3738**clientLanguages:** `typescript`39**clientFrameworks:** `react`4041**에러 처리:**4243- MCP 도구 호출 실패 시: "Figma Desktop 앱을 실행하고 해당 파일을 열어주세요." 안내4445### Phase 3. 참조 패턴 탐색4647프로젝트의 기존 패턴을 파악합니다:48491. `src/shared/ui/` 내 유사 컴포넌트 패턴 확인:50 - `cn()` 유틸리티 사용 방식51 - `forwardRef` 패턴52 - named export 패턴53 - Props 타입 정의 방식542. 대상 디렉토리의 `index.ts`, 형제 파일 확인하여 일관된 패턴 파악5556### Phase 4. Figma → 디자인 토큰 매핑 분석5758이 프로젝트는 `@exem-fe/tailwindcss-plugin`을 통해 디자인 토큰을 Tailwind 클래스로 사용합니다.59**주의: 기본 Tailwind 토큰이 전부 교체(override)되어 있으므로 반드시 아래 토큰만 사용해야 합니다.**6061**색상 매핑 전략 (우선순위 순):**62631. Figma 변수 바인딩이 있으면 그 이름을 직접 사용 (예: `color/gray-05` → `text-gray-05`)642. 시맨틱 토큰 우선 사용:65 - 텍스트: `text-text-primary`, `text-text-secondary`, `text-text-tertiary`, `text-text-disabled`, `text-text-accent`, `text-text-critical` 등66 - 배경/면: `bg-surface-primary-default`, `bg-elevation-elevation-0` 등67 - 보더: `border-border-primary`, `border-border-secondary` 등68 - 아이콘: `text-icon-primary`, `text-icon-secondary` 등693. 원시 색상 스케일: `gray-00~10`, `red-00~10`, `blue-00~10` 등 + `mono-white`, `mono-black`704. 매칭 불가 시 가장 가까운 토큰 + `/* TODO: exact color #XXXXXX */` 코멘트7172**타이포그래피:**7374| Figma 크기 | Tailwind 클래스 |75| ---------- | --------------- |76| 28px/140% | `text-header-1` |77| 24px/140% | `text-header-2` |78| 20px/140% | `text-title-1` |79| 18px/140% | `text-title-2` |80| 16px/140% | `text-body-1` |81| 14px/140% | `text-body-2` |82| 12px/140% | `text-body-3` |83| 11px/140% | `text-caption` |8485폰트 두께: `font-regular`(400), `font-medium`(500), `font-semibold`(600), `font-bold`(700)8687**Border Radius:** `rounded-weak`(4px), `rounded-medium`(6px), `rounded-strong`(8px), `rounded-circle`(999px)8889**Box Shadow:** `shadow-weak`(16px), `shadow-medium`(20px), `shadow-strong`(24px), `shadow-preview`9091**레이아웃 매핑:**9293- Figma auto-layout direction → `flex flex-row` / `flex flex-col`94- gap, padding → Tailwind spacing (4px=1 단위) 또는 arbitrary `[Npx]`95- child sizing: fill → `flex-1`, fixed → `w-[Npx]`, hug → `w-fit`9697**컴포넌트 인식:**9899- Figma 내 컴포넌트 인스턴스 → `@exem-fe/react` 매핑 (Button, TextField, Select, Table, Tabs, Modal, Tooltip, Badge, Tag, Checkbox, Radio, Switch 등)100- 프로젝트 커스텀 UI → `src/shared/ui/` 참조 (Card, Form, DropdownMenu, Sheet, Popover, Skeleton 등)101- 아이콘 → `@exem-fe/icon` (`{Name}{Variant}Icon` 패턴, `iconSizes` 또는 `className="size-{n}"`)102103### Phase 5. 코드 생성104105Phase 2~4의 분석 결과를 기반으로 컴포넌트 코드를 생성합니다.106107**생성 규칙:**1081091. **import 순서**: 외부 패키지 → `@exem-fe/*` → `@/` 프로젝트 → 상대 경로1102. **`cn()` 유틸리티** (`@/shared/util`) 사용하여 className 합성1113. **Tailwind 클래스만 사용** — 인라인 스타일 지양, 동적 값만 예외1124. **디자인 토큰 전용** — hex 하드코딩 금지1135. **`@exem-fe/react` 컴포넌트 우선 사용** (Button > `<button>`, TextField > `<input>`)1146. **`@/` alias 사용**1157. **루트 요소에 `className` prop 전달** (합성 가능)1168. **named export** (default export 아님)1179. **Tailwind arbitrary values** `[Npx]`는 표준 spacing에 없을 때만 사용118119**Props 추론:**120121- 텍스트 노드 → string props122- 반복 요소 → array/children props123- 항상 `className?: string` 포함124125**코드 구조 예시:**126127```tsx128import { cn } from '@/shared/util'129130interface MyComponentProps {131 className?: string132 title: string133}134135export function MyComponent({ className, title }: MyComponentProps) {136 return (137 <div138 className={cn(139 'flex flex-col gap-2 p-4 bg-surface-primary-default rounded-strong',140 className141 )}142 >143 <span className="text-body-1 font-medium text-text-primary">{title}</span>144 </div>145 )146}147```148149### Phase 6. 검증 및 출력150151생성된 코드를 검증합니다:1521531. 모든 색상이 토큰 기반 Tailwind 클래스인지 확인 (hex 하드코딩 없음)1542. import 경로가 `@/` alias를 사용하는지 확인1553. `cn()` 사용 확인1564. named export 확인1575. `@exem-fe/react` 컴포넌트가 적절히 사용되었는지 확인158159**결과 요약 출력:**160161```162Figma → Code 완료: {ComponentName}163164사용된 디자인 토큰:165- 색상: {사용된 색상 토큰 목록}166- 타이포: {사용된 타이포 클래스 목록}167- 기타: {radius, shadow 등}168169사용된 컴포넌트:170- @exem-fe/react: {Button, TextField, ...}171- @exem-fe/icon: {SearchIcon, ...}172- @/shared/ui: {Card, ...}173174생성된 파일: {컴포넌트 경로}175```176177## 에러 처리178179| 상황 | 대응 |180| ------------------------- | --------------------------------------------------------------------------- |181| Figma URL 형식 오류 | URL에서 `node-id` 파라미터를 찾을 수 없다고 안내, 올바른 URL 형식 예시 제공 |182| MCP 도구 호출 실패 | "Figma Desktop 앱을 실행하고 해당 파일을 열어주세요." 안내 |183| 대상 파일이 비어있지 않음 | 사용자에게 덮어쓸지 확인 |184| 매핑 불가 색상 | 가장 가까운 토큰 사용 + `/* TODO: exact color #XXXXXX */` 코멘트 |185186## 예시187188### 입력189190```191/figma-to-code https://figma.com/design/abc123/MyProject?node-id=1-2 src/features/widget-builder/ui/ColumnHeader.tsx192```193194### 실행 과정1951961. **입력 파싱**: nodeId=`1:2`, Name=`ColumnHeader`, Layer=`Features`1972. **Figma 수집**: get_screenshot, get_design_context, get_variable_defs 병렬 호출1983. **참조 패턴**: `src/shared/ui/` 및 형제 파일 패턴 확인1994. **토큰 매핑**: Figma 속성 → Tailwind 토큰 클래스 변환2005. **코드 생성**: `ColumnHeader.tsx`에 컴포넌트 코드 작성2016. **검증**: 토큰 사용, import 경로, named export 확인202203---204> Converted and distributed by [TomeVault](https://tomevault.io/claim/gihwan-dev) — claim your Tome and manage your conversions.205<!-- tomevault:4.0:skill_md:2026-04-13 -->