Open7

Figmaプラグインの作成

おかたくおかたく

ありがたく使わせてもらっている、Figmaのプラグイン。
自分でも作ってみたいので、作り方をメモしていく。

おかたくおかたく

3タイプから作り始められる。Draftはハードルが高そうなので、Custom UIを選択

おかたくおかたく

保存すると以下ファイル群が生成される。

プロジェクトのファイル構成と説明

1. README.md

  • 役割: プロジェクトの概要や使い方を記述する説明書。
  • 使用シーン:
    • プロジェクトを他の開発者と共有する際に使う。
    • プラグインのインストール手順や操作方法をドキュメント化。

2. code.js

  • 役割: プラグインのバックエンドロジックを記述するスクリプトファイル。
    • TypeScript (code.ts) をビルドして生成される。
  • 使用シーン:
    • Figma APIを利用して、プラグインがFigmaドキュメントや要素を操作する際に使用。

3. code.ts

  • 役割: TypeScriptで記述されたメインスクリプト。
    • プラグインのロジックを記述するファイル。
  • 使用シーン:
    • TypeScriptを利用して型チェックや開発効率を向上させたいとき。
    • ビルド後に code.js としてFigmaに読み込まれる。

4. manifest.json

  • 役割: プラグインの設定ファイル。
    • プラグインの名前、ID、使用するスクリプトやUIファイルを定義。
  • 使用シーン:
    • プラグインの基本情報をFigmaに認識させる際に必須。

5. node_modules

  • 役割: npmでインストールされたライブラリや依存関係が格納されるフォルダ。
  • 使用シーン:
    • 開発時に必要なパッケージ(例: TypeScript、Webpack)を管理。

6. package-lock.json

  • 役割: npmパッケージのバージョンを固定し、一貫した依存関係を保証。
  • 使用シーン:
    • 他の開発者が同じ環境でプロジェクトを動作させられるようにする。

7. package.json

  • 役割: プロジェクトの依存関係とスクリプトを管理。
    • npmでインストールするパッケージや実行スクリプトを記述。
  • 使用シーン:
    • 必要なライブラリのインストール (npm install)。
    • 開発用スクリプトの実行(例: TypeScriptのビルドコマンド)。

8. tsconfig.json

  • 役割: TypeScriptのコンパイル設定ファイル。
    • 出力フォルダやJavaScriptバージョンなどを定義。
  • 使用シーン:
    • TypeScriptコードをJavaScriptに変換する際の設定をカスタマイズ。

9. ui.html

  • 役割: プラグインのカスタムUIを記述するファイル。
    • HTML、CSS、JavaScriptを使用してUIを設計。
  • 使用シーン:
    • プラグインにカスタムUI(ボタン、入力フィールドなど)を実装する際に使用。
おかたくおかたく

UI.htmlに以下コードを追加して、

UI.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Demo Plugin</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      margin: 20px;
    }
    button {
      padding: 10px 20px;
      background-color: #007bff;
      color: white;
      border: none;
      border-radius: 5px;
      cursor: pointer;
    }
    button:hover {
      background-color: #0056b3;
    }
  </style>
</head>
<body>
  <h1>Welcome to Demo Plugin</h1>
  <button id="showMessage">Click Me</button>
  <script>
    const button = document.getElementById('showMessage');
    button.addEventListener('click', () => {
      parent.postMessage({ pluginMessage: { type: 'showMessage' } }, '*');
    });
  </script>
</body>
</html>

code.jsには以下コードを追加してFigmaから実行してみる

code.js
figma.showUI(__html__);

figma.ui.onmessage = (msg) => {
  if (msg.type === 'showMessage') {
    figma.notify('Hello from Demo Plugin!');
  }
};
おかたくおかたく

実行できた!
ボタンをクリックすると、code.jsで定義されたメッセージが呼び出される