Claude Code は優秀なコーディングエージェントです。Figma スクリーンのスクリーンショットを与えると、なんとなく正しそうなものを生成します。しかし構造化されたコンテキストバンドル — 型付きデザイントークン、レイアウト IR、参照レンダリング、機械可読スペック — を与えると、実際にリリースできるコードが生成されます。

figmascope はそのバンドルをクライアントサイドで、完全にブラウザ上で生成します。バックエンドなし、アップロードなし、Figma ファイルへのアクセス権を持つ仲介サービスなし。このガイドでは、Figma → figmascope → Claude Code の完全なワークフローを実際の CLI の例を交えて説明します。Claude Code の代わりに Cursor を使う場合は Figma から Cursor へ を参照してください。

前提条件

figmascope からコンテキストバンドルをエクスポートする

figmascope.dev を開き、Figma ファイルの URL とトークンを貼り付け、Export Context Bundle をクリックします。figmascope-ABC123.zip のような zip が得られます。

プロジェクトの design/ ディレクトリに展開します。

unzip figmascope-ABC123.zip -d design/

展開後のツリー:

design/
├── CONTEXT.md
├── tokens.json
├── _meta.json
├── components/
│   └── inventory.json
├── screens/
│   ├── Home.json
│   ├── Home.png
│   ├── Settings.json
│   └── Settings.png
└── strings.json

ソース管理にコミットします。_meta.json マニフェストにはエクスポートのタイムスタンプと Figma ファイルキーが記録されているため、チームはバンドルがどのバージョンのデザインに対応しているかを常に確認できます。

Claude Code がコンテキストバンドルを読む仕組み

CONTEXT.md がエントリーポイントです。エージェントに以下を伝える構造化スペックドキュメントです。

Claude Code はアクションを起こす前にファイルを読みます。CONTEXT.md でセッションを開始することで、スクリーン JSON に触れる前にエージェントが方向付けられます。

Claude Code セッションを開始する

最も直接的なアプローチ — プロジェクトルートで claude を起動し、design ディレクトリに向けます。

claude

インタラクティブセッションで:

Read design/CONTEXT.md, then implement the Home screen as a React component.

Use:
- design/tokens.json for all design token values
- design/screens/Home.json for the layout tree
- design/screens/Home.png as visual reference
- design/strings.json for all copy (use dot-notation keys as i18n identifiers)

Constraints:
- Tailwind CSS for styles, mapping token values to theme config
- TypeScript
- No hardcoded color or spacing values — all values must come from tokens

Claude Code はファイルを順次読み込み、IR からトークン参照を解決し、汎用的な近似ではなく実際のデザインシステムを反映したコンポーネントを生成します。

--print を使ったワンショットプロンプト

CI パイプラインやスクリプト化されたコード生成には、非インタラクティブな --print モードを使います。

claude --print "$(cat <<'EOF'
Read design/CONTEXT.md. Then implement design/screens/Home.json as
src/screens/Home.tsx (React + Tailwind + TypeScript).
- All tokens from design/tokens.json
- All strings from design/strings.json using dot-notation keys
- Visual reference: design/screens/Home.png
- Component names from design/components/inventory.json
EOF
)"

heredoc でシェルスクリプト内のプロンプトが読みやすくなります。--print は Claude の応答を stdout に書き出すので、パイプや変数への格納が可能です。

Claude Code は 1 度に 1 スクリーンを与えると最もうまく動作します。単一スクリーンのレイアウト IR はすでに密度が高いので、セッションを集中させましょう。

マルチスクリーンプロジェクト — 現実的なアプローチ

多くのフレームを持つファイルでは、段階的に作業します。スクリーンファイルをループする方法:

for screen_json in design/screens/*.json; do
  screen=$(basename "$screen_json" .json)
  echo "Implementing $screen..."
  claude --print "$(cat <

「すでに存在するコンポーネントを再実装しない」という指示は、コンポーネントインベントリが共有されている場合に重要です。Claude Code は design/components/inventory.json を読んで、どのコンポーネントがすでに実装されているかを特定し、再生成せずにインポートできます。

デザイントークンの配線

figmascope がエクスポートする tokens.json は、$value$type フィールドを持つ W3C に準じたネスト構造を使います。

{
  "color": {
    "surface":    { "$value": "#f6f2ea", "$type": "color" },
    "ink":        { "$value": "#1f1d1a", "$type": "color" },
    "accent":     { "$value": "#d96a3a", "$type": "color" }
  },
  "spacing": {
    "1": { "$value": "4px",  "$type": "dimension" },
    "2": { "$value": "8px",  "$type": "dimension" },
    "4": { "$value": "16px", "$type": "dimension" },
    "8": { "$value": "32px", "$type": "dimension" }
  },
  "typography": {
    "body": {
      "fontFamily": { "$value": "Inter",  "$type": "fontFamily" },
      "fontSize":   { "$value": "14px",   "$type": "dimension" },
      "lineHeight": { "$value": 1.45,     "$type": "number" }
    }
  }
}

スクリーンを実装する前の最初のステップとして、このファイルから tailwind.config.ts の theme extension ブロックを生成するよう Claude Code に依頼します。そうすることで以降のすべてのスクリーン実装が Tailwind トークンエイリアスを一貫して使えるようになります。

claude --print "Read design/tokens.json and generate a tailwind.config.ts
theme.extend block. Map color tokens to theme.extend.colors,
spacing tokens to theme.extend.spacing, and typography to
theme.extend.fontFamily / fontSize. Output only the config object."

トークンフォーマットと、Figma Variables が設定されていない場合に figmascope が使用する頻度推論フォールバックについての詳細は AI エージェント向けデザイントークンエクスポート を参照してください。

文字列レイヤーの処理

Figma ファイル内のすべてのテキストノードが strings.json にスロットとして格納されます。キーはフレーム階層から導出されたドット記法です。

{
  "home.hero.title":        "Everything you need",
  "home.hero.subtitle":    "Ship faster with structured context",
  "home.cta.primary":      "Get started",
  "settings.account.heading": "Account settings"
}

これらのキーを i18n 識別子として使用するよう Claude Code に指示します。JSX に文字列 "Everything you need" をハードコードするのではなく、生成されたコンポーネントが t('home.hero.title')(または使用する i18n ライブラリの同等のもの)を呼び出します。リソースファイルはすでに strings.json にあります — あとは i18n セットアップにインポートまたは接続するだけです。

figmascope が衝突を検出した場合 — 同じキーにハッシュされる 2 つのノード — は _meta.jsonstrings-collision 警告を出力し、数値サフィックスで曖昧さを解消します。セッションを開始する前に _meta.json を確認しておきましょう。

CLAUDE.md との統合

CLAUDE.md プロジェクトコンテキストファイルを使用している場合は、design ディレクトリにエージェントを向ける短いセクションを追加します。これは AI デザインハンドオフ で説明されたアプローチとうまく組み合わせられ、figmascope が Figma インスペクタープラグインと異なる理由を補完します。

以下のような design セクションを追加します。

## Design context

Design tokens, layout IR, reference renders, and strings live in `design/`.
Always read `design/CONTEXT.md` before implementing any screen.
Token values are in `design/tokens.json` — never hardcode color or spacing.
Component canonical names are in `design/components/inventory.json`.

これにより、プロジェクト内のすべての Claude Code セッションが、毎回プロンプトに繰り返すことなく、design コンテキストを自動的に作業知識として持つようになります。

エージェントが実際に正しく処理できること

構造化されたコンテキストがあると、Claude Code は以下を確実に処理できます。

  • スペーシング値 — tokens.jsonspacing.4 → 16px として存在するため、スクリーンショットから目測する必要がありません
  • カラー — 「暖かいオレンジに見える」ではなく正確な hex 値
  • タイポグラフィ — フォントファミリー、サイズ、ウェイト、行間、すべて型付き
  • レイアウト方向 — スタックノードに明示的な directiongap フィールドがあります
  • コンポーネント命名 — inventory.json が正規ソースであるため、でたらめな名前はありません
  • コピー — strings.json でエージェントが言い換えたりプレースホルダーテキストを作ったりするのを防ぎます

人間によるレビューが依然として必要なもの:静的な Figma フレームでは見えないインタラクション状態(ホバー、フォーカス、アクティブ)、アニメーションタイミング、ファイル内で明示的にデザインされていないレスポンシブブレークポイント。IR は静的レイアウトをキャプチャします。動的な挙動はスコープ外です。

制御された環境での --dangerously-skip-permissions の使用

デザイン更新後にコンポーネントスタブを生成する CI ステップなど、インタラクティブな承認プロンプトなしに Claude Code を動作させたい自動化パイプラインでは、--dangerously-skip-permissions を使用できます。本番の認証情報がないサンドボックス環境でのみ適切です。

claude --dangerously-skip-permissions --print "$(cat <<'EOF'
Read design/CONTEXT.md. Generate component stub files for any components
in design/components/inventory.json that don't already exist in src/components/.
Use TypeScript + React functional component format. Include a TODO comment
for each component referencing the relevant screen JSON.
EOF
)"

本番の開発者ワークフローでは、権限をインタラクティブなままにします。プロンプトには正当な理由があります。Claude Code はファイルを書き込むことができるので、どのファイルかを事前に確認することが重要です。

プロンプトを送る前にエクスポート警告を確認する

figmascope は出力品質に影響する可能性のある状態について _meta.json に警告を出力します。Claude Code セッションを開始する前に確認します。

python3 -c "
import json
meta = json.load(open('design/_meta.json'))
for w in meta.get('warnings', []):
    print(f\"{w['code']}: {w['message']}\")
print(f\"Frames exported: {meta['frameCount']}\")
print(f\"Tokens source: {meta.get('tokensSource', 'variables')}\")
"

注意すべき 2 つの警告:

  • layout-mode-none-inferred — フレームに auto-layout が設定されていません。figmascope は子要素の絶対位置からレイアウトを推論しましたが、信頼性が低い場合があります。プロンプトで該当スクリーンにフラグを立てましょう:「このスクリーンは絶対配置を使っています。それに合わせて生成してください。」
  • strings-collision — 2 つのテキストノードが同じリソースキーを生成しました。figmascope は数値サフィックスで曖昧さを解消しますが、エージェントが i18n コールを生成する前に strings.json の文字列が正しいことを確認してください。

Android および iOS ワークフロー

Claude Code は Web フレームワークに限りません。コンテキストバンドルはフレームワーク非依存です。レイアウト IR とトークンはデータであり、CSS ではありません。Jetpack Compose の場合:

claude --print "$(cat <<'EOF'
Read design/CONTEXT.md and design/tokens.json.

Implement design/screens/Home.json as a Jetpack Compose screen.
- Map color tokens to a MaterialTheme ColorScheme
- Map spacing tokens to Dp values (strip 'px' suffix, use .dp)
- Map typography tokens to MaterialTheme.typography
- Use the component names from design/components/inventory.json as Composable names
- Reference design/screens/Home.png for visual accuracy
EOF
)"

IR の stack ノードは Compose の Column(direction: vertical)と Row(direction: horizontal)に自然にマッピングされます。type: "text"leaf ノードは Text コンポーザブルになり、type: "image"Image またはプレースホルダーになります。完全なパターンについては Jetpack Compose from Figma を参照してください。

デザインバンドルのバージョン管理

design/ ディレクトリを他のプロジェクト依存関係と同様に扱います。デザインが大きく変わったら figmascope.dev から再エクスポートし、コミットして、PR に変更を記載します。

# Check when the bundle was last exported vs when Figma file was last modified
python3 -c "
import json
from datetime import datetime
meta = json.load(open('design/_meta.json'))
exported = datetime.fromisoformat(meta['exportedAt'].replace('Z', '+00:00'))
modified = datetime.fromisoformat(meta['figmaLastModified'].replace('Z', '+00:00'))
delta = modified - exported
if delta.total_seconds() > 0:
    print(f'WARNING: Figma file was modified {delta} after last export')
else:
    print('Bundle is current')
"

バンドルが古い場合、エージェントは古いデザインから作業していることになります。タイムスタンプチェックにより、時代遅れのスペックに基づくコード生成セッションに時間を費やす前にこれを検知できます。