Figma Pluginとデザイントークンで開発を効率化する！

# はじめに
:evergreen_tree: **メリークリスマス** :evergreen_tree::santa_tone1:

本記事は、[「**Figmaを使ったコラボレーションUPの方法（社内・チーム内等）**」](https://qiita.com/advent-calendar/2022/figma
)のアドベントカレンダー 24日目の記事になります！

https://qiita.com/advent-calendar/2022/figma

この記事では「**Figma Pluginとデザイントークン**」を用いて、**デザインとエンジニアリングのコラボレーション**を実現するための取り組みについてご紹介したいと思います。

# 今回作ったもの
![designtoken_sd.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/28851324-7841-c688-a233-9d839a55e26a.gif)



先に作っているものを見せてしまうと、このようなものになっています。
**これは一体何をしているの？** という詳しい内容を次項から話していきたいと思います！

# そもそもデザイントークンとは

デザインシステム における「色」や「文字」、「余白」など、デザインを構成するスタイルの情報をまとめたものになります。
文章ではイメージしにくいと思いますので、具体例で言いますと

![スクリーンショット 2022-12-21 21.19.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/e5b68b46-48ab-a5ca-63ce-4b6f12e2b1c2.png)

上記のようなデザインシステムがある時、「色」の構成要素を分解すると
- 名前
- カラーコード

という情報が含まれているのが分かります。
これらの**デザインを構成する最小単位の情報**が「**デザイントークン**」と呼んでいるものの正体です。

[@seyaさん](https://twitter.com/sekikazu01)が デザイントークン について、とても分かりやすくまとめてくださっているのでよろしければこちらもどうぞ！

https://note.com/seyanote/n/n7b327a9cfd72

# FigmaPluginとデザイントークンで開発を加速させる
弊社Relicでは「**新規事業**」という分野の開発を行う関係上、新しくサービスを作るという機会が多いです。
その際に上がる課題として、
- **デザインシステムを毎回構築する必要がある**
- **デザイン変更が多く行われるため、デザイナーとエンジニア側で頻繁にコミュニケーションコストや反映コストが発生する**

というものがあります。
これらを解決するために**Figma Plugin**と**デザイントークン**をうまく活用できたら幸せなのでは？という発想のもと、社内で取り組みを検討しました。

参考になったのが[Figma Token](https://www.figma.com/community/plugin/843461159747178978/Tokens-Studio-for-Figma-(Figma-Tokens))というFigma Pluginで、プラグイン内で**デザイントークンを生成**したり、**Githubへ変更したデザインスタイルのプルリク**を出したりとリッチな機能が搭載されたものでした。
これをベースに現状の課題を解決するべく、以下の構成を考えました。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/eb2cde2c-455a-fefb-a7da-cf48542a22a3.png)


これが実現できれば、
- デザインシステムを毎回構築する必要がある
-> プラグインが自動でデザインシステムを生成してくれる
- デザイン変更が多く行われるため、デザイナーとエンジニア側で頻繁にコミュニケーションコストや反映コストが発生する
-> デザイナーが修正したもののプルリクをエンジニアが確認するだけで良くなる

という形で不要なコストを大きく削減することができます！


# 具体的にはどのように実現しているの？

前項でお見せした理想像を実現するために、私たちのチームは「**標準化されたデザインシステムの自動構築**」と「**デザインとコードの同期**」について優先的に取り組んでいます。
本項ではそれらの内容を紹介したいと思います！

## 1. 標準化されたデザインシステムの自動構築
弊社ではデザイナーとエンジニアが意見を交わしながら、 「**Design Square**」というRelicのデザインシステムを作成しています。
こちらはRelicで大切にするデザイン原則をまとめたガイドラインとなるのですが、前項でも話した通りこのガイドラインに沿ってプロジェクトが始まる度にデザインシステムを再構築するのはとても骨が折れます。

![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/e6d44dce-4451-eb2f-9a61-14dba50c510c.png)


上記の課題を解決するための取り組みとして、**Figma Pluginを用いて、デザイントークンからデザインシステムを自動作成する仕組み** を作っています。
Figma Pluginには便利なことに[Figma Plugin API](https://www.figma.com/plugin-docs/)というものが用意されており、プラグインの画面はもちろん、Figma上のフレームやテキストを`TypeScript`で生成することができます。

例えば、以下のようにPlugin上の実行ボタンを押したら、Figma上にテキストを描画するような機能も簡単に作成することができます。

![サンプル.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/a96a6477-81ab-ded6-45da-8ce7f4a0c12a.gif)


この仕組みを利用し、デザインシステムを自動構築するプラグインを作っています！
β版のデザインシステムとなりますが、こちらをベースにデザインシステムの自動構築を進めております。
![スクリーンショット 2022-12-21 23.24.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/b6dbda69-d716-8ef8-8d91-7949815c6013.png)

このようにデザイントークンの情報を入力した後に実行ボタンを押すことで、このように自動でデザインシステムを構築することができました。(フォーム画面がイケてないのはご愛嬌...)
![designtoken.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/576e7e0b-109d-67aa-1965-9a4d8fd8511c.gif)


現在は「色」のみの自動構築になりますが、これから自動構築できる範囲や過去に作成したデザイントークンのインポートなど、どんどん使いやすい機能を増やしていきたいと思います！



## 2. デザインとコードの同期
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/5e8a5d73-bd3e-e9bc-4313-e2804bc6fc3a.png)

新しいサービスではデザインの方向性が変わりやすく、多くのデザイン修正が発生するケースが多いです。
そのようなケースが発生した場合でも、エンジニア, デザイナーが最低限のコストで対応出来るように、**デザイントークン + Style Dictionaryでスタイルファイルを自動生成する仕組み** を作っています。 (※Githubとの連携は優先度的に後回しにしています。)

Figma上には[**Client Storage**](https://www.figma.com/plugin-docs/api/figma-clientStorage/)と呼ばれるキーバリュー形式の内部ストレージが用意されており、先ほどのFigma Plugin上で入力したデザイントークン(スタイル情報)を格納することができます。
この[Client Storage](https://www.figma.com/plugin-docs/api/figma-clientStorage/)に格納されたデザイントークンを**JSON形式でエクスポート**し、別のツールで利用できるようにします。

![export.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/e9fb0aca-29b3-7ade-ea28-6b34854b457e.gif)


**JSON形式でエクスポートしたデザイントークン**ですが、この状態ではプログラム上で利用することができません。
それを解決してくれるのが[**Style Dictionary**](https://amzn.github.io/style-dictionary/#/README)になります。

このライブラリはとても優秀で、JSONファイルやJSファイルなどに入力されたデザイントークンを、様々なプラットフォームのスタイルへ変換してくれます。
configファイルを少し修正し、コマンドを実行すると**CSSファイル**が出力されているのが分かります。
また[Style Dictionary](https://amzn.github.io/style-dictionary/#/README)は**CSSだけでなく、AndroidやIOS,Flutterなど様々なプラットフォームに対応したスタイルファイルが出力できる**ため、サービスが成長してプラットフォームが増えた時にも強い力を発揮します！

![sd.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/b87b7b4b-78e5-76e6-42c4-7c90777935c0.gif)


こちらの機能もFigma Plugin内に組み込んだり、Githubへ連携したりと改善の余地はたくさんありそうですね...！

https://www.figma.com/plugin-docs/api/figma-clientStorage/

https://amzn.github.io/style-dictionary/#/README


# 最後に
まだまだ動き出しの途中ですが、**Figma Pluginとデザイントークン**を使った、**デザインとエンジニアリングのコラボレーション**の取り組みについて知ってもらえたら幸いです！

Relic社内でもアドベントカレンダーを実施していますので、よろしければ見ていってください！

https://qiita.com/advent-calendar/2022/relic