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

Figmaの選択レイヤーURLを一括取得するプラグイン|fileKeyとノードID

複数のFigmaレイヤーへのリンクをまとめる場合、ファイルキーとノードIDからURLを作れます。この自作プラグインは選択中のレイヤーの名前とURLをタブ区切りで表示し、一覧へコピーするためのものです。URLを生成しても、閲覧権限が追加されるわけではありません。

目次

1件の標準コピーと一括生成の違い

1件だけならFigmaの選択範囲へのリンクをコピーする機能が使えます。同じファイルの多数のレイヤーを一覧化する場合に、このプラグインを使います。作成したリンクを開く人には、元のファイルのアクセス権限が必要です。

fileKeyは対象ファイルのURLから取得する

https://www.figma.com/design/FILE_KEY/ファイル名のFILE_KEYがファイルキーです。旧形式の/file/でも、次の部分がキーになります。入力するのはキーだけです。

figma.fileKeyはprivate pluginなどに限定されたAPIです。無料・有料の区分だけで利用可否を説明せず、この例では利用者がキーを入力します。誤ったキーを入力すると、ほかのファイルへのURLになるため、生成前に現在のファイルと照合してください。

node-idには選択ノードのIDをURLエンコードして入れます。pやtなどの追加パラメーターを付ける必要がある例としては扱いません。元記事のtを期限付きアクセスキーと断定する説明は採用していません。

出典:figma.fileKeyの利用条件、ファイルURLとID。

作成・利用する手順

  1. 以下の3ファイルを作り、デスクトップアプリでmanifestを読み込みます。
  2. 対象ファイルでレイヤーを複数選択し、プラグインを起動します。
  3. fileKeyを入力してリンクを生成します。
  4. 生成した最初のリンクを開き、対象と権限を確認します。
  5. 一覧をコピーします。コピーできない場合は出力欄を選んで手動でコピーします。

これはローカルプラグインの開発手順で、有料Dev Modeを有効にする手順ではありません。外部サーバーへの通信や、ファイル内容の変更はしません。

ファイルを作成する

FigmaのNew pluginで生成したmanifestを基に、次の設定を使います。掲載例ではidを省略しています。自分のmanifestに割り当てられたidがある場合はその値を保ち、サンプルの任意文字列に置き換えません。3ファイルを同じフォルダへ保存してください。

manifest.json

{
  "name": "選択レイヤーURL出力",
  "api": "1.0.0",
  "main": "code.js",
  "ui": "ui.html",
  "editorType": [
    "figma"
  ],
  "documentAccess": "dynamic-page",
  "networkAccess": {
    "allowedDomains": [
      "none"
    ]
  }
}

code.js

figma.showUI(__html__, { width: 400, height: 400 });
function linkRows(fileKey, nodes) {
  if (!/^[A-Za-z0-9]+$/.test(fileKey)) throw new Error("ファイルキーを確認してください");
  return nodes.map(node => ({ name: node.name, url: "https://www.figma.com/design/" +
    encodeURIComponent(fileKey) + "?node-id=" + encodeURIComponent(node.id) }));
}
figma.ui.onmessage = msg => {
  if (!msg || typeof msg.fileKey !== "string") return;
  try {
    const selection = figma.currentPage.selection;
    if (!selection.length) throw new Error("レイヤーを選択してください");
    figma.ui.postMessage({ urls: linkRows(msg.fileKey.trim(), selection) });
  } catch (e) { figma.ui.postMessage({ error: e.message }); }
};

ui.html

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <style>
      body {
        font-family: sans-serif;
        padding: 16px;
      }
      textarea {
        width: 100%;
        height: 150px;
        white-space: pre;
        margin-top: 8px;
      }
      input,
      button {
        margin: 8px 0;
        padding: 4px;
      }
    </style>
  </head>
  <body>
    <h3>fileKey を入力(デスクトップ用)</h3>
    <input
      type="text"
      id="fileKeyInput"
      placeholder="例: FoijeBRjomQCWZ4rLFxnSv"
    />

    <button id="send">リンクを生成</button>

    <h3>選択ノードのURL一覧(タブ区切り)</h3>
    <textarea id="output" readonly></textarea>
    <button id="copy">コピー</button>

    <script>
      // 送信ボタン押下 → fileKeyを送る
      document.getElementById("send").onclick = () => {
        const fileKey = document.getElementById("fileKeyInput").value.trim();
        parent.postMessage({ pluginMessage: { fileKey } }, "*");
      };

      // プラグインから受信
      window.onmessage = (event) => {
        if (event.source !== parent || !event.data || !event.data.pluginMessage) return;
        const { urls, error } = event.data.pluginMessage;
        const output = document.getElementById("output");

        if (error) {
          output.value = error;
          return;
        }

        const text = urls.map((u) => `${String(u.name).replace(/[\t\r\n]/g, " ")}\t${u.url}`).join("\n");
        output.value = text;
      };

      // コピー処理
      document.getElementById("copy").onclick = () => {
        const textarea = document.getElementById("output");
        textarea.select();
        if (!document.execCommand("copy")) alert("選択した文字を手動でコピーしてください");
      };
    </script>
  </body>
</html>

タブ区切りの一覧を扱う注意点

レイヤー名に含まれるTAB・改行は空白へ置き換えます。このため名前の表示は元の文字列と完全一致しない場合があります。表計算ソフトでは名前とURLの列を文字列として読み込み、名前が式として評価されないようにします。

取得したURLを共有しても、ファイルの公開設定を変える処理は行いません。共有先で開けない場合は、URLのキー、ノードID、ファイルの閲覧権限を確認します。IDからレイヤーを選ぶツールも使い分けられます。

元記事の操作例

以下は元記事で掲載していた開発時の画面です。今回のコード改稿後に撮影した検証画像ではありません。現行の表示や変更結果は、複製したファイルで確認してください。

右クリックメニューの「選択範囲へのリンクをコピー」からノードのURLを取得する通常の操作手順。
2025年06月の元記事の掲載例。改稿後コードの検証画像ではありません。
UIの入力欄にfileKeyを入力し、「リンクを生成」ボタンを押してURLを出力させた画面。
2025年06月の元記事の掲載例。改稿後コードの検証画像ではありません。
出力されたURLをコピーし、スプレッドシートなどに貼り付けて使用する様子。
2025年06月の元記事の掲載例。改稿後コードの検証画像ではありません。
ブラウザで開いた対象デザインファイルのURLからfileKeyを確認する画面。
2025年06月の元記事の掲載例。改稿後コードの検証画像ではありません。
Figmaメニューの「マニフェストからプラグインをインポート」からプラグインを登録する手順。
2025年06月の元記事の掲載例。改稿後コードの検証画像ではありません。
登録したプラグインを実行した際に表示される専用の画面。
2025年06月の元記事の掲載例。改稿後コードの検証画像ではありません。

検証範囲と関連ガイド

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

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

サービス

Service

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

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

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

Figmaのおすすめ書籍

Figma用PCの選び方

周辺機器の優先度

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