FigmaのREST APIの使い方を調べる機会があったので、調べた内容をメモ。
アクセストークンの取得
Figma REST APIのエンドポイントにアクセスする認証方法として、以下の2つが用意されています。
- アクセストークン
- OAuth2
今回はアクセストークンを使った方法を試してみます。
Figmaのホーム画面で、左上のアカウントメニューから設定を選択します。
セキュリティタブを選択して、個人アクセストークンの項目で新規トークンを作成をクリックします。
トークンの名前と有効期限、スコープを設定します。
今回は「ファイルのコンテンツ」を読み取りのみに変更しました。
設定が終わったら右下のトークンを生成をクリックします。
トークンが表示されるので、コピペして保存しておいてください。
次回以降は確認できないため、わからなくなった場合は作り直す必要があります。
使用方法
まずは取得したいFigmaデータのファイルキーを取得します。
ファイルキーはFigmaファイルのURLから取得することができ、例えばデザインデータの場合は以下のようなURL構造になります。
https://www.figma.com/design/ファイルキー/ファイル名
これでアクセストークンとファイルキーの取得ができたので、下記JavaScriptコードで使ってみます。
const FILE_KEY = 'ファイルキー'; // ファイルキー const ACCESS_TOKEN = 'アクセストークン'; // アクセストークン const url = `https://api.figma.com/v1/files/${FILE_KEY}`; async function fetchFigmaFile() { try { const response = await fetch(url, { method: 'GET', headers: { 'X-Figma-Token': ACCESS_TOKEN } }); if (!response.ok) { throw new Error(`API error: ${response.status} ${response.statusText}`); } const data = await response.json(); console.log(JSON.stringify(data, null, 2)); } catch (error) { console.error(error.message); } } fetchFigmaFile();
これで動作を試してみたところ、以下のようなjsonを取得できていることを確認できました。
(一部調整しています。)
{ "document": { "id": "0:0", "name": "Document", "type": "DOCUMENT", "scrollBehavior": "SCROLLS", "children": [ { "id": "0:1", "name": "Page 1", "type": "CANVAS", "scrollBehavior": "SCROLLS", "children": [ { "id": "1:2", "name": "APIテスト用。これはテキストレイヤーで記述しています。", "type": "TEXT", "scrollBehavior": "SCROLLS", "blendMode": "PASS_THROUGH", "fills": [ { "blendMode": "NORMAL", "type": "SOLID", "color": { "r": 0, "g": 0, "b": 0, "a": 1 } } ], "strokes": [], "strokeWeight": 1, "strokeAlign": "OUTSIDE", "absoluteBoundingBox": { "x": 50, "y": 50, "width": 317, "height": 15 }, "absoluteRenderBounds": { "x": 50.306819915771484, "y": 51.93199920654297, "width": 308.474365234375, "height": 11.088001251220703 }, "constraints": { "vertical": "TOP", "horizontal": "LEFT" }, "characters": "APIテスト用。これはテキストレイヤーで記述しています。", "characterStyleOverrides": [], "styleOverrideTable": {}, "lineTypes": [ "NONE" ], "lineIndentations": [ 0 ], "style": { "fontFamily": "Inter", "fontPostScriptName": null, "fontStyle": "Regular", "fontWeight": 400, "textAutoResize": "WIDTH_AND_HEIGHT", "fontSize": 12, "textAlignHorizontal": "LEFT", "textAlignVertical": "TOP", "letterSpacing": 0, "lineHeightPx": 14.522727012634277, "lineHeightPercent": 100, "lineHeightUnit": "INTRINSIC_%" }, "layoutVersion": 4, "effects": [], "interactions": [] } ], "backgroundColor": { "r": 0.9607843160629272, "g": 0.9607843160629272, "b": 0.9607843160629272, "a": 1 }, "prototypeStartNodeID": null, "flowStartingPoints": [], "prototypeDevice": { "type": "NONE", "rotation": "NONE" } } ] }, "components": {}, "componentSets": {}, "schemaVersion": 0, "styles": {}, "name": "APIテスト用ファイル", "lastModified": "YYYY-MM-DDTHH:MM:SSZ", "thumbnailUrl": "https://s3-alpha.figma.com/thumbnails/XXXXX", "version": "XXXXXXXXXXXXXXXXXXX", "role": "owner", "editorType": "figma", "linkAccess": "view" }
コメントが承認されるまで時間がかかります。