セマンティックトークン
原文は Francesco Puppo により に公開されました。 このブログを購読する
セマンティックトークンなしでデザインシステムを運用しているなら、スケーラビリティと効率性を高めるための重要なツールを逃しています。
セマンティックトークンとは
セマンティックトークンを使えば、デザイン上の意思決定を具体的な値ではなく、目的によって定義する、構造化された柔軟なシステムを作ることができます。ボタンやテキストに固定のカラーコードを割り当てる代わりに、primary-button-bgやwarning-textのようなトークンを使います。
つまり、プライマリボタンの背景色はblue/500そのものではなく、primary-button-bgになります。このprimary-button-bgにはblue/500という値が紐づけられており、そのblue/500にはHEXカラーコード#5A8DD7が適用されています。
視覚的な例で見てみましょう。ただし、実際に使ってみるまでは、その有用性はなかなか実感しにくいということは覚えておいてください。
通常、要素に変数を適用すると次のようになります:

ここで、component-2のストロークを#0D0D0Dに変更したいとします。その場合は次のようにする必要があります:

一見大したことではないように思えますが、このシステムをスケールさせていくと、どのHEX値をどのコンポーネントや要素に適用すべきかがすぐに分からなくなってしまいます。
代わりにやるべきなのは、各要素にどの変数を適用すべきかを明確にするために、セマンティックトークンを活用することです。

これでアップデートが簡単になります — トークンを一箇所で変更するだけで、すべての箇所に反映されるのです。その方法をお見せしましょう…
なぜ使うのか
スケーラビリティ
デザインシステムが成長するにつれて、複数のコンポーネントにわたってスタイルを手作業で更新するのは管理しきれなくなります。セマンティックトークンを使えば、一箇所で変更を加えるだけで、システム全体に一貫して反映させることができます。
たとえば、プライマリカラーを変更したいけれど、対象はpage-titleコンポーネントだけにしたいとします。セマンティックトークンを正しく適用していれば、コンポーネント自体を修正する必要はありません。変数ウィンドウで関連するトークンを変更するだけで済みます。
あるいは、#black/600がデザインシステムの背景色としてうまく機能しないことに気づいたとします。その場合は、変数設定に移動して、surface-altを別のプリミティブトークンに置き換えるだけで済みます。
一貫性と保守性
具体的な値ではなく機能に焦点を当てることで、セマンティックトークンはプロダクト全体でよりまとまりのある、一貫した見た目を保証します。もうどの値を使えばよいか推測したり覚えたりする必要はありません — 適切な名前のセマンティックトークンを選ぶだけです。
メインのボーダーにどの色を使うべきか思い出そうとしていますか?簡単です、stroke-primaryです。
テーマとカスタマイズ
ダークモードの導入、ブランドごとのカスタマイズ、異なるスタイルでのA/Bテストなど、どんな場合でもセマンティックトークンがプロセスを効率化してくれます。すべての箇所で生のカラー値を修正する代わりに、より上位のレイヤーでトークンを入れ替えるだけで済みます。
将来に強いデザインシステム
デザインと実装の間に明確な抽象化レイヤーを設けることで、セマンティックトークンは既存のデザインを壊すことなく、長期的にシステムを進化させやすくします。
会社のブランド刷新に合わせて新しいカラースキームをリリースする必要がありますか?プリミティブな値を修正するだけで済みます。
使い方
コアとなるデザイントークンを定義する
まずは、色、タイポグラフィ、スペーシング、その他主要なデザイン要素のための基盤となるトークンを作成することから始めましょう。
私は通常、これらの生の値をprimitivesという別のコレクションに作成しています。

ワンポイントアドバイス:Tailwind CSS Color Generatorを使えばプライマリカラーのパレットを素早く読み込めますし、Export/Import Variablesプラグインを使えばファイル間で設定をインポート・エクスポートできます。
コアトークンをセマンティックトークンにマッピングする
次に、これらの値がUIでどのように使われるかを記述するセマンティックトークンを定義します。これらは抽象化レイヤーとして機能し、基盤となる構造に影響を与えることなくスタイルを更新しやすくします。

セマンティックトークンのセットアップには時間がかかり、その過程でアプローチを調整する必要が出てくるかもしれません。しかし、一度導入してしまえば、スケーラビリティと保守性が大幅に向上し、不整合が減り、開発が加速します。それだけの価値がある投資です。
変数のスコープを制限する
最後に、特定の変数をどの要素に適用できるかを制限します。そのためには、まずprimitivesに移動して、すべてを無効にします。

次に、各トークンのスコープを定義していきます。下の例では、border関連のものをストローク要素にのみ適用できるように制限しています。

これで、ストロークに変数を適用しようとすると、適用可能な変数だけが表示されるようになり、適切なものを選ぶのがとても簡単になります!

これは完全なチュートリアルではありません
セマンティックトークンをデザインシステムに適用する方法についてもっと学びたい場合は、まずFigmaによるこちらのチュートリアルから始めることをおすすめします。その後は、実際に触って、自分のデザインシステムに適用してみるのが、自分に合った使い方を理解するための一番の近道です。
確かに、セマンティックトークンのセットアップは長く面倒なプロセスになることもありますが、そのメリットは計り知れません。まだデザインシステムでセマンティックトークンを使っていないなら、ぜひ試してみてください!
忘れないでください、大切なのはアウトプットよりもアウトカムです。完璧なドキュメントではなく、チームが本当に必要としていることに焦点を当てましょう。
記事をランダムに読む
コメント
ログインしてコメントする