2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

medibaAdvent Calendar 2022

Day 14

デザイントークンを用いたUID/FEのデザインシステム連携

Last updated at Posted at 2022-12-13

はじめに

株式会社medibaでフロントエンドエンジニアをしている @kamabokochan です。
この記事は mediba Advent Calendar 2022 の14日目です。

今回は、最近気になっていた

を利用したUID/FE間の
デザイントークンの管理/連携について、実際に触れてみたため、感想を書いていきたいと思います!

実装

Tokens Studio for Figma

まずはFigmaにてトークン作成を行なっていきます。
トークンは、並列に定義するとname spaceでconflictが起きるため
以下のように区切っていきます。

- Color
    - background
    - text
...

New Token にてTokenを生成するフォームのNameにドット繋ぎで定義することで入れ子になるようです。

スクリーンショット 2022-12-12 20.53.04.png

右上の {} から、jsonをプレビューできます。
ここはeditorになっているので、既存のトークン群をペーストすることでimportも可能です。
基本となる型のようなものを1つ作っておくと、使い回しができて便利そうだなと思いました♪

スクリーンショット 2022-12-12 20.56.00.png

またgithubと連携することで、PR化も簡単に行えるようですが
今回は、お試しなので直接ソースコードに貼り付けたいと思います。

token.json
{
  "background": {
    "primary": {
      "value": "#f6b3f4",
      "type": "color"
    },
    "secondary": {
      "value": "#f0de71",
      "type": "color"
    }
  }
}

Style Dictionary

Style Dictionaryを使用して、先ほど作成したjsonを
扱いたい形式にconvertしていきたいと思います。

まずは

  1. packageのinstall
  2. 設定ファイル(config.json)の作成

を行なっていきます。
今回は、scssとjsにconvertしてみました。

config.json
{
  "source": ["token.json"],
  "platforms": {
    "scss": {
      "transformGroup": "scss",
      "buildPath": "./src/style-dictionary-dist/",
      "prefix": "token",
      "files": [
        {
          "destination": "variables.scss",
          "format": "scss/variables"
        }
      ]
    },
    "js": {
      "transformGroup": "js",
      "buildPath": "./src/style-dictionary-dist/",
      "files": [
        {
          "destination": "variables.js",
          "format": "javascript/es6"
        }
      ]
    }
  }
}

React

先ほど生成したjsをimportし、試しにstyle属性に適用させてみます。

App.tex
import {
  BackgroundPrimary,
  BackgroundSecondary,
} from './style-dictionary-dist/variables.js';

function App() {
  return (
    <>
      <div className="App" style={{ background: BackgroundPrimary }}>
        <p>BackgroundPrimary 要素</p>
      </div>
      <div className="App" style={{ background: BackgroundSecondary }}>
        <p>BackgroundSecondary 要素</p>
      </div>
    </>
  );
}

export default App;

スクリーンショット 2022-12-12 20.56.42.png

色が変わりました。

さて、tokenの background.primary の色を少し変えて、再度convertしてみます。

token.json
{
  "background": {
    "primary": {
      "value": "#c9f5b3",
      "type": "color"
    },
    "secondary": {
      "value": "#f0de71",
      "type": "color"
    }
  }
}

スクリーンショット 2022-12-12 20.58.55.png

新しい色に変更されました!

まとめ

今回は簡略的に手作業でtokenのコピペを行いましたが、こちらの手順を自動化することで
tokenのvalueに留まる変更であれば、デザインの変更のみで
クライアントアプリに反映される仕組みができそうだということが確認できました。

機械的に誰でも管理や更新ができるシステムの構築ができていく様は触っていてとても嬉しいですね!

ぜひまだやったことがない人はお試しください♪

今回作成したもの

最後に

弊社からのお知らせです🦀

現在、medibaの募集求人ページから応募され入社が決定すると、お祝い金として30万円をプレゼントするキャンペーンを実施中です!!
リモート環境を充実のためディスプレイやマイク等を買いそろえるも良し。スキル習熟のために自己研鑽に使うも良し。使途は完全自由です。
→ 募集・応募ページ
いきなり応募だとちょっとハードルが高い・・でも興味がある方は、カジュアル面談も行っていますので、まずはお話してみませんか?
→ カジュアル面談
※お祝い金は、試用期間(3か月)を経て、雇用が継続した場合に支給させて頂きます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?