【Figma】プラグインの作り方
必要なもの
Node 今回はv16.6.1を使用しています
プラグインをテンプレートから選択する
デスクトップアプリをダウンロードする
テンプレートを選ぶ
Pluginsを選択する
Create new pluginを選択
プラグインのディレクトリの名前を書く
言語切り替えなどはRun once、画像書き出しなどの操作はWith UI & Browser APIを使用する
表示テストする
ソースコードはテンプレート作成の時に開いたプラグインから開けます Indevelopmentの中にあるはずです
Typescriptで書かれたコードがコンパイルされて使えるようになる前なので、そのまま開くとコンパイルしてくれとエラーがでます
コンパイルする
pacakage.json
をみるとscriptsにbuild
があるので、これを使ってコンパイルします
まず、ライブラリのインストールが必要です
以下のコマンドをターミナルで叩くことでインストールします
npm i
npm install -D typescript @figma/plugin-typings
ターミナルから以下のコマンドを叩きます
npm run build
これで先ほどと同じようにプラグインを開きます
テンプレートにもともと入っていた正方形作成用のウィンドウが開くはずです
デバッグ
アプリにコンソールを出すことができます
表示されたコンソールにfigma.currentPage
などと入力すると中身が見られます
consoleを使う
consoleを使うには@types/node
が必要です
インストールしておきましょう
npm install -D @types/node
UIからコードにイベントを送る
UI(ui.html
)からプラグインコード(code.ts
)にイベントを送ることができます
<!-- ui.html -->
<script>
parent.postMessage({ pluginMessage: { type: "メッセージの名前" } }, "*");
</script>
メッセージの名前
を使って、プラグインコード(code.ts
)で呼び出せます
figma.ui.onmessage = (message) => {
if (message.type === "メッセージの名前") {
// anything
}
}
コードからUIにイベントを送る
プラグインコード(code.ts
)からUI(ui.html
)にイベントを送ることができます
// code.ts
figma.ui.postMessage({ name: "from-code" });
<!-- ui.html -->
<script>
onmessage = (event) => {
console.log(event.data.pluginMessage);
// { name: "from-code" }
}
</script>
Nodeを取得する
figma.ui.getNodeById(id);
id
はfigma.currentPage.selection
などで取得できるIDです
プラグインを終了する
figma.closePlugin();
実際に使うときはmsg.type
にcancelなど設定したら良さそう
if (msg.type == "cancel") {
figma.closePlugin();
}
ホットリロードさせる
いちいちプラグイン起動し直すのは面倒なので、ホットリロード(保存すると更新)させるようにします
nodemon
を使いました
package.json
のscripts
にdev
を足します
{
"scripts": {
"build": "tsc -p tsconfig.json",
"dev": "nodemon --watch code.ts --watch ui.html --exec 'tsc -p tsconfig.json && ./applescript.sh'"
}
}
プラグインのルートにapplescript.sh
を作成して
#!/usr/bin/env bash
osascript <<'EOF'
tell application "Figma" to activate
tell application "System Events" to tell process "Figma"
keystroke "p" using {command down, option down}
end tell
EOF
nodemon
をインストールします
npm i -D nodemon
ターミナルから実行
npm run dev
権限エラーで怒られたら
./applescript.sh
で権限エラーを吐くかもしれないので、権限を変更しておくと良いかも
chmod 755 ./applesctipt.sh
Macの権限で、アプリに変更を加えるのに失敗したら、
apple > システム環境設定 > セキュリティとプライバシー
のアクセシビリティ
で
VSCodeなどにチェックを入れてあげれば実行できるはず
ここら辺は個人の責任で
参考
Figma Components
Figma Plugin API Reference
Writing a figma plugin with hot reload, react and graphql