{"id":741,"date":"2025-07-23T23:59:18","date_gmt":"2025-07-23T14:59:18","guid":{"rendered":"https:\/\/cg-method.com\/figma\/?p=741"},"modified":"2025-08-18T00:05:48","modified_gmt":"2025-08-17T15:05:48","slug":"figma-plugin-select-by-id","status":"publish","type":"post","link":"https:\/\/cg-method.com\/figma\/figma-plugin-select-by-id\/","title":{"rendered":"Figma\u30d7\u30e9\u30b0\u30a4\u30f3\u2502\u30ce\u30fc\u30c9ID\u3092\u53d6\u5f97\u3059\u308b\uff65\u9078\u629e\u3059\u308b\u30c4\u30fc\u30eb"},"content":{"rendered":"\n<p>\u30ec\u30a4\u30e4\u30fc\u306b\u306f\u30ce\u30fc\u30c9ID\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u305d\u306eID\u3092\u53d6\u5f97\u3057\u305f\u308a\u3001\u9078\u629e\u3057\u305f\u308a\u3067\u304d\u308b\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u4f5c\u308a\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u8907\u6570\u30ec\u30a4\u30e4\u30fc\u3092\u4e00\u62ec\u9078\u629e\u3082\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"661\" height=\"613\" src=\"https:\/\/cg-method.com\/figma\/wp-content\/uploads\/2025\/08\/2025-08-18_00h02_42.png\" alt=\"\" class=\"wp-image-742\" srcset=\"https:\/\/cg-method.com\/figma\/wp-content\/uploads\/2025\/08\/2025-08-18_00h02_42.png 661w, https:\/\/cg-method.com\/figma\/wp-content\/uploads\/2025\/08\/2025-08-18_00h02_42-300x278.png 300w\" sizes=\"(max-width: 661px) 100vw, 661px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Figma\u30d7\u30e9\u30b0\u30a4\u30f3\u2502\u30ce\u30fc\u30c9ID\u3092\u53d6\u5f97\u3059\u308b\uff65\u9078\u629e\u3059\u308b\u30c4\u30fc\u30eb<\/h2>\n\n\n\n<p>\u5225\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u3067\u30ce\u30fc\u30c9ID\u3092\u51fa\u529b\u3059\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5834\u5408\u306b\u3088\u3063\u3066Figma\u306e\u30ce\u30fc\u30c9ID\u304b\u3089\u9078\u629e\u3059\u308b\u3053\u3068\u3082\u3042\u308b\u306e\u3067\u4f5c\u308a\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">manifest.json<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><code>{\n  &quot;name&quot;: &quot;ID\u3092\u53d6\u5f97\uff65\u9078\u629e&quot;,\n  &quot;id&quot;: &quot;select-by-id&quot;,\n  &quot;api&quot;: &quot;1.0.0&quot;,\n  &quot;main&quot;: &quot;code.js&quot;,\n  &quot;ui&quot;: &quot;ui.html&quot;,\n  &quot;editorType&quot;: [&quot;figma&quot;]\n}\n<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">code.js<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\/\/ UI \u3092\u8868\u793a\nfigma.showUI(__html__, { width: 350, height: 520 });\n\n\/** \u4f59\u5206\u306a\u7a7a\u767d\u30fb\u672b\u5c3e :00 \u3092\u53d6\u308a\u9664\u304f\uff08Figma\u306eID\u30b3\u30d4\u30da\u5dee\u7570\u306b\u8010\u6027\uff09 *\/\nfunction normalizeId(rawId) {\n  if (!rawId) return &quot;&quot;;\n  var id = String(rawId).replace(\/\\s+\/g, &quot;&quot;); \/\/ \u5168\u7a7a\u767d\u524a\u9664\uff08\u5168\u89d2\u542b\u3080\uff09\n  id = id.replace(\/:00$\/, &quot;&quot;); \/\/ \u672b\u5c3e :00 \u3092\u9664\u53bb\n  return id.trim();\n}\n\n\/** \u751f\u914d\u5217 \u2192 \u6b63\u898f\u5316 \u2192 \u7a7a\u8981\u7d20\u9664\u53bb \u2192 \u91cd\u8907\u6392\u9664 *\/\nfunction toUniqueNormalizedIds(rawIds) {\n  var seen = {};\n  var result = [];\n  if (!Array.isArray(rawIds)) return result;\n  for (var i = 0; i &lt; rawIds.length; i++) {\n    var id = normalizeId(rawIds[i]);\n    if (id && !seen[id]) {\n      seen[id] = true;\n      result.push(id);\n    }\n  }\n  return result;\n}\n\n\/** ID -&gt; Node \u5909\u63db\uff08\u5b58\u5728\u3057\u306a\u3044ID\u306f\u7121\u8996\uff09 *\/\nfunction nodesFromIds(ids) {\n  var nodes = [];\n  for (var i = 0; i &lt; ids.length; i++) {\n    var n = figma.getNodeById(ids[i]);\n    \/\/ getNodeById \u306f DocumentNode \u3092\u8fd4\u3059\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u3067 SceneNode \u306e\u307f\u8a31\u53ef\n    if (n && &quot;type&quot; in n && &quot;visible&quot; in n) {\n      nodes.push(n);\n    }\n  }\n  return nodes;\n}\n\n\/** \u9078\u629e\u3068\u30ba\u30fc\u30e0 *\/\nfunction selectAndReveal(nodes) {\n  figma.currentPage.selection = nodes;\n  if (nodes.length &gt; 0) {\n    try {\n      figma.viewport.scrollAndZoomIntoView(nodes);\n    } catch (e) {}\n  }\n}\n\n\/** UI \u304b\u3089\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u53d7\u3051\u53d6\u308a *\/\nfigma.ui.onmessage = function (msg) {\n  if (!msg || typeof msg !== &quot;object&quot; || !(&quot;type&quot; in msg)) return;\n\n  if (msg.type === &quot;select-by-id&quot;) {\n    var inputIds = Array.isArray(msg.ids) ? msg.ids : [];\n    var ids = toUniqueNormalizedIds(inputIds);\n    var nodes = nodesFromIds(ids);\n\n    if (nodes.length &gt; 0) {\n      selectAndReveal(nodes);\n      figma.notify(nodes.length + &quot;\u4ef6\u306e\u30ec\u30a4\u30e4\u30fc\u3092\u9078\u629e\u3057\u307e\u3057\u305f&quot;);\n    } else {\n      figma.currentPage.selection = [];\n      figma.notify(&quot;\u6709\u52b9\u306a\u30ec\u30a4\u30e4\u30fcID\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f&quot;, { error: true });\n    }\n  }\n\n  if (msg.type === &quot;get-selected-ids&quot;) {\n    var selected = figma.currentPage.selection;\n    var lines = [];\n    for (var i = 0; i &lt; selected.length; i++) {\n      var node = selected[i];\n      lines.push(node.name + &quot;\\t&quot; + node.id); \/\/ \u300c\u540d\u524d[TAB]ID\u300d\n    }\n    figma.ui.postMessage({ type: &quot;selected-ids&quot;, ids: lines });\n  }\n};\n\n\/** \u30a8\u30c7\u30a3\u30bf\u5074\u3067\u9078\u629e\u304c\u5909\u308f\u3063\u305f\u3089 UI \u306b\u53cd\u6620 *\/\nfigma.on(&quot;selectionchange&quot;, function () {\n  var sel = figma.currentPage.selection;\n  var lines = [];\n  for (var i = 0; i &lt; sel.length; i++) {\n    lines.push(sel[i].name + &quot;\\t&quot; + sel[i].id);\n  }\n  figma.ui.postMessage({ type: &quot;selected-ids&quot;, ids: lines });\n});\n<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">ui.html<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;ja&quot;&gt;\n  &lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot; \/&gt;\n    &lt;title&gt;\u30ce\u30fc\u30c9ID\u3067\u9078\u629e&lt;\/title&gt;\n    &lt;style&gt;\n      body {\n        font: 13px\/1.6 -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto,\n          &quot;Hiragino Sans&quot;, &quot;Noto Sans JP&quot;, &quot;\u30e1\u30a4\u30ea\u30aa&quot;, sans-serif;\n        margin: 12px;\n      }\n      textarea {\n        width: 100%;\n        height: 110px;\n        box-sizing: border-box;\n      }\n      .row {\n        margin: 10px 0;\n      }\n      .btn {\n        padding: 8px 10px;\n        border: 1px solid #ccc;\n        background: #f7f7f7;\n        cursor: pointer;\n        border-radius: 6px;\n      }\n      .btn:active {\n        transform: translateY(1px);\n      }\n      .muted {\n        color: #666;\n        font-size: 12px;\n      }\n      .grid {\n        display: grid;\n        grid-template-columns: 1fr auto;\n        gap: 8px;\n        align-items: center;\n      }\n      .stack {\n        display: grid;\n        gap: 8px;\n      }\n      hr {\n        border: none;\n        border-top: 1px solid #e5e5e5;\n        margin: 14px 0;\n      }\n    &lt;\/style&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;div class=&quot;stack&quot;&gt;\n      &lt;div class=&quot;row&quot;&gt;\n        &lt;h3 style=&quot;margin: 0 0 8px&quot;&gt;\u30ec\u30a4\u30e4\u30fcID\u3067\u9078\u629e&lt;\/h3&gt;\n        &lt;textarea\n          id=&quot;idsInput&quot;\n          placeholder=&quot;\u8907\u6570\u884c\u306bID\u3092\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\uff08\u4f8b\uff1aI123:45\uff09&quot;\n        &gt;&lt;\/textarea&gt;\n        &lt;div class=&quot;grid&quot;&gt;\n          &lt;span class=&quot;muted&quot;&gt;\u5404\u884c\u30921\u3064\u306eID\u3068\u3057\u3066\u51e6\u7406\u3057\u307e\u3059\u3002&lt;\/span&gt;\n          &lt;button id=&quot;selectBtn&quot; class=&quot;btn&quot;&gt;\u9078\u629e&lt;\/button&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n\n      &lt;hr \/&gt;\n\n      &lt;div class=&quot;row&quot;&gt;\n        &lt;h3 style=&quot;margin: 0 0 8px&quot;&gt;\u73fe\u5728\u306e\u9078\u629e\u304b\u3089ID\u53d6\u5f97&lt;\/h3&gt;\n        &lt;div class=&quot;grid&quot;&gt;\n          &lt;span class=&quot;muted&quot;&gt;\u300c\u540d\u524d ID\u300d\u5f62\u5f0f\u3067\u51fa\u529b\u3057\u307e\u3059\u3002&lt;\/span&gt;\n        &lt;\/div&gt;\n        &lt;textarea id=&quot;output&quot; readonly&gt;&lt;\/textarea&gt;\n        &lt;div style=&quot;text-align: right&quot;&gt;\n          &lt;button id=&quot;getBtn&quot; class=&quot;btn&quot;&gt;\u53d6\u5f97&lt;\/button&gt;\n          &lt;button id=&quot;copyBtn&quot; class=&quot;btn&quot;&gt;\u30b3\u30d4\u30fc&lt;\/button&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n\n    &lt;script&gt;\n      function splitLines(text) {\n        return text.split(\/\\r?\\n\/);\n      }\n      function post(type, payload) {\n        parent.postMessage(\n          { pluginMessage: Object.assign({ type: type }, payload || {}) },\n          &quot;*&quot;\n        );\n      }\n\n      document.getElementById(&quot;selectBtn&quot;).onclick = function () {\n        var raw = document.getElementById(&quot;idsInput&quot;).value;\n        var ids = splitLines(raw);\n        post(&quot;select-by-id&quot;, { ids: ids });\n      };\n\n      document.getElementById(&quot;getBtn&quot;).onclick = function () {\n        post(&quot;get-selected-ids&quot;, {});\n      };\n\n      document.getElementById(&quot;copyBtn&quot;).onclick = function () {\n        var text = document.getElementById(&quot;output&quot;).value;\n        if (!text) {\n          alert(&quot;\u30b3\u30d4\u30fc\u3059\u308b\u5185\u5bb9\u304c\u3042\u308a\u307e\u305b\u3093&quot;);\n          return;\n        }\n        \/\/ Clipboard API\uff08Figma\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\/\u30d6\u30e9\u30a6\u30b6\u53cc\u65b9\u3067\u52d5\u4f5c\uff09\n        navigator.clipboard.writeText(text).then(\n          function () {\n            alert(&quot;\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f&quot;);\n          },\n          function () {\n            \/\/ \u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\n            var ta = document.getElementById(&quot;output&quot;);\n            ta.focus();\n            ta.select();\n            try {\n              document.execCommand(&quot;copy&quot;);\n              alert(&quot;\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f&quot;);\n            } catch (e) {\n              alert(&quot;\u30b3\u30d4\u30fc\u306b\u5931\u6557\u3057\u307e\u3057\u305f&quot;);\n            }\n          }\n        );\n      };\n\n      \/\/ \u30d7\u30e9\u30b0\u30a4\u30f3\u672c\u4f53\u304b\u3089\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u53d7\u4fe1\n      window.onmessage = function (event) {\n        var msg =\n          event.data && event.data.pluginMessage\n            ? event.data.pluginMessage\n            : null;\n        if (!msg) return;\n        if (msg.type === &quot;selected-ids&quot; && msg.ids) {\n          document.getElementById(&quot;output&quot;).value = msg.ids.join(&quot;\\n&quot;);\n        }\n      };\n    &lt;\/script&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre><\/div>\n\n\n\n<p>\u5b9f\u969b\u306b\u4f7f\u3063\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"661\" height=\"613\" src=\"https:\/\/cg-method.com\/figma\/wp-content\/uploads\/2025\/08\/2025-08-18_00h02_42.png\" alt=\"\" class=\"wp-image-742\" srcset=\"https:\/\/cg-method.com\/figma\/wp-content\/uploads\/2025\/08\/2025-08-18_00h02_42.png 661w, https:\/\/cg-method.com\/figma\/wp-content\/uploads\/2025\/08\/2025-08-18_00h02_42-300x278.png 300w\" sizes=\"(max-width: 661px) 100vw, 661px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u30ec\u30a4\u30e4\u30fc\u306b\u306f\u30ce\u30fc\u30c9ID\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u307e\u3059\u3002 \u305d\u306eID\u3092\u53d6\u5f97\u3057\u305f\u308a\u3001\u9078\u629e\u3057\u305f\u308a\u3067\u304d\u308b\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u4f5c\u308a\u307e\u3057\u305f\u3002 \u8907\u6570\u30ec\u30a4\u30e4\u30fc\u3092\u4e00\u62ec\u9078\u629e\u3082\u3067\u304d\u307e\u3059\u3002 Figma\u30d7\u30e9\u30b0\u30a4\u30f3\u2502\u30ce\u30fc\u30c9ID\u3092\u53d6\u5f97\u3059\u308b\uff65\u9078\u629e\u3059\u308b\u30c4\u30fc\u30eb \u5225\u306e\u30d7\u30e9\u30b0\u30a4 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":743,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":"","footnotes":""},"categories":[145],"tags":[146],"class_list":["post-741","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-figma-tools","tag-146"],"_links":{"self":[{"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/posts\/741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/comments?post=741"}],"version-history":[{"count":1,"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/posts\/741\/revisions"}],"predecessor-version":[{"id":744,"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/posts\/741\/revisions\/744"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/media\/743"}],"wp:attachment":[{"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/media?parent=741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/categories?post=741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cg-method.com\/figma\/wp-json\/wp\/v2\/tags?post=741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}