Amazonで商品を見るセール会場へ

Figma VariablesをJSONへ書き出す方法|Export modes・DTCG・APIの違い

FigmaのVariablesは、Variables画面のExport mode/Export modesからJSONへ書き出せます。画面で書き出すJSONと、Plugin API・REST APIで取得した変数オブジェクトは同じ形式ではありません。 APIの取得結果をそのまま保存しても、DTCG形式のデザイントークンになったとは限りません。

この記事は2026年10月3日に確認した公式仕様に基づく手順です。Figmaでの実際の書き出し・再読み込みやAPI接続は未検証です。モードのインポート・エクスポート

目次

書き出す方法を選ぶ

目的方法確認すること
1モードの値を手動で取り出すExport mode対象コレクションとモード
コレクションの全モードを取り出すExport modesモードごとの値・参照
独自の監査用JSONを作るPlugin API型・モードID・エイリアスの保持
サーバーやCIで取得するVariables REST APIEnterpriseの条件・スコープ・ファイル権限
Tokens StudioのJSONからCSSを作るStyle Dictionaryとsd-transforms形式、テーマ、単位、ビルド設定

変数の作成・適用はVariablesの基本、モードが切り替わらない場合はモードの確認手順を参照してください。

Variables画面からJSONを書き出す

  1. 対象のDesignファイルでVariables画面を開きます。
  2. 1モードなら、コレクションを開いてそのモードを右クリックします。
  3. Export modeを選びます。
  4. コレクションの全モードなら、コレクションを右クリックしてExport modesを選びます。
  5. 保存されたJSONを開き、名前・型・値・参照を確認します。

名前だけでLight/Darkなどを判断せず、対象モードの値も確認します。読み込む側では既存モードのImport modeを使う方法がありますが、既存値を変更する前に書き出して保管し、コピーで試してください。

DTCG形式とFigma固有の型を確認する

DTCG形式では$typeと$valueで型と値を表します。次は説明用の小さな例で、Figmaの実ファイルから取得した値ではありません。

{
  "spacing-small": { "$type": "number", "$value": 8 },
  "spacing-button": { "$type": "number", "$value": "{spacing-small}" },
  "label": { "$type": "string", "$value": "送信" }
}

{spacing-small}はエイリアスです。参照先を落として1項目だけ移すと、参照を解決できなくなる場合があります。また、numberの8をCSSの8pxとして使うかどうかは、出力側の変換設計です。Figmaから数値を取得しただけで単位は決まりません。

FigmaのインポートにはDTCG形式に加え、Figma固有の扱いがあります。dimensionはpx、durationはs、fontFamilyは単一のフォント名文字列が対応条件です。Booleanはnumberとcom.figma.type拡張で表現され、stringは公式DTCGの型として定義されていませんがFigmaでは受け付けられます。すべてのトークン形式を同じまま相互変換できるとは考えないでください。対応する型・拡張・参照

Plugin APIで変数の元情報を取得する

Plugin APIでは非同期メソッドでローカル変数とコレクションを取得できます。次はプラグインのメインコードへ組み込むための、監査用JSONを作る例です。ファイルのダウンロード処理やDTCG変換までは含みません。

async function variablesSnapshot() {
  const collections = await figma.variables.getLocalVariableCollectionsAsync();
  const variables = await figma.variables.getLocalVariablesAsync();
  return {
    collections: collections.map(c => ({
      id: c.id,
      name: c.name,
      defaultModeId: c.defaultModeId,
      modes: c.modes,
      variableIds: c.variableIds
    })),
    variables: variables.map(v => ({
      id: v.id,
      name: v.name,
      collectionId: v.variableCollectionId,
      type: v.resolvedType,
      valuesByMode: v.valuesByMode
    }))
  };
}
const snapshot = await variablesSnapshot();
console.log(JSON.stringify(snapshot, null, 2));

getLocalVariablesAsync('STRING')のように種類を渡すと、取得対象が絞られます。全型を対象にする場合は引数なしで取得します。コレクションのmodesと変数のvaluesByModeを対応付け、エイリアスをIDのまま残すか名前へ変換するかを決めます。Plugin APIの変数取得

公式のvariables-import-exportサンプルもありますが、基本的な入出力のサンプルです。公式READMEではcolor・number・aliasに対応し、読み込みは1回に1コレクション・1モードという制限を説明しています。Figma本体の全機能を扱う完成版ではありません。開発環境はプラグイン開発入門を参照してください。

REST APIで取得する場合

GET /v1/files/:file_key/variables/localは、公式資料でEnterprise組織のfull member向けとされています。file_variables:readスコープが必要で、Tier 2に分類されます。通常のファイル内容を取得できるトークンでも、同じ条件でVariablesを取得できるとは限りません。Variables REST API

localはファイル内のローカル変数と使用しているリモート変数を列挙します。publishedのエンドポイントはモードを返さないため、モードの値を確認する場合は公開元ファイルのlocalを確認します。返り値をDTCGへ変換するなら、型、モード、エイリアス、色の表現と単位を処理する必要があります。

JSONをCSSへ変換する前に

JSONの構文が正しいことと、変換先が意味を正しく解釈することは別です。少数のトークンで、色、数値、単位、参照、モード、名前の衝突を確認します。複数モードを全部読み込んで同じ名前へ上書きしないよう、出力するテーマを決めてください。Tokens StudioとStyle DictionaryのCSS出力

サービス

Service

デザイン制作に関心がありましたら、ぜひ詳細をご覧ください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Figmaのおすすめ書籍

Figma用PCの選び方

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次