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

Figma APIで空のコンポーネントを検出する方法|未取得・削除との違い

Figma REST APIでコンポーネントを取得したとき、childrenが空配列でも「削除済み」とは断定できません。空の有効なコンポーネント、取得深度不足、取得できないノードを分けて確認します。この記事では元データを残したまま確認候補を抽出します。

目次

空・未取得・取得不可を分ける

取得状態記録先判断
COMPONENTでchildrenが空配列reviewIds空の確認候補。削除の証拠ではない
COMPONENTでchildrenがないchildrenUnknownIds子要素の取得条件を確認する
nodes内の値がnull、documentがないunavailableIds対象ファイル・ID・アクセスを確認する
子要素があるnamesに保持今回の空候補には含めない

「幽霊コンポーネント」は本サイトで使っていた便宜的な呼び方で、公式の削除状態ではありません。キャッシュが原因と決めつけず、同じファイル、ノードID、ファイル版を照合します。

nodesエンドポイントをdepth=1で取得する

GET /v1/files/:key/nodesではdepth=1が指定ノードの直下の子要素を返します。ファイル全体のGET /v1/files/:keyではdepth=1がPagesを返すため、同じ数字でも取得範囲が異なります。depthは正の整数で指定し、0は使いません。

対象のノードIDをidsで指定し、取得結果のnodesを次の関数へ渡します。URL生成と分類の関数であり、認証・HTTPリクエストは含みません。既存の取得処理に組み込み、file_content:readのスコープとファイルの閲覧権限を確認します。

出典:REST APIのファイルエンドポイント。

code.js

function buildNodesUrl(fileKey, nodeIds) {
  if (!fileKey || !Array.isArray(nodeIds) || nodeIds.length === 0)
    throw new Error("ファイルキーとノードIDが必要です");
  return "https://api.figma.com/v1/files/" + encodeURIComponent(fileKey) +
    "/nodes?depth=1&ids=" + encodeURIComponent(nodeIds.join(","));
}
function buildNodeMap(nodes) {
  const names = Object.create(null);
  const reviewIds = [], unavailableIds = [], childrenUnknownIds = [];
  for (const id of Object.keys(nodes || {})) {
    const entry = nodes[id];
    const doc = entry && entry.document;
    if (!doc) { unavailableIds.push(id); continue; }
    names[id] = doc.name;
    if (doc.type !== "COMPONENT") continue;
    if (!Array.isArray(doc.children)) childrenUnknownIds.push(id);
    else if (doc.children.length === 0) reviewIds.push(id);
  }
  return { names, reviewIds, unavailableIds, childrenUnknownIds };
}

判定結果を使うときの手順

  1. 成功したHTTPレスポンスのnodesを分類します。HTTP失敗を空データとして扱いません。
  2. reviewIdsのノードを元ファイルで開き、空の部品として必要か確認します。
  3. childrenUnknownIdsは取得深度とレスポンスを確認します。
  4. unavailableIdsは存在しないIDと決めつけず、ファイル・版・権限を確認します。
  5. 除外が必要と確定したIDだけ、連携先の一覧に反映します。

このコードに削除処理はありません。namesに空の候補も残し、取得した情報と判断後の情報を分けます。名前だけで除外すると、同名の別コンポーネントを落とす可能性があります。

コンポーネントの参照元を調べる場合は、APIとPlugin APIの比較で処理場所を選びます。

検証範囲と関連ガイド

今回確認したのは掲載コードの構文と、該当する入力・例外処理のローカル模擬検証です。Figmaデスクトップアプリ上での動作確認とは区別しています。改稿後のコードと、元記事が参照していたGitHub上の版が一致するとは限りません。

開発環境と登録手順はFigmaプラグイン開発入門、公開はCommunityへの申請を参照してください。

サービス

Service

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

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

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

Figmaのおすすめ書籍

Figma用PCの選び方

周辺機器の優先度

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