Figmaのバリアントプロパティでアイコンの色まで制御したい

こんにちは!SaaS・DX事業部デザイナーの鍜治本(@KAJIJI_design)です。
SaaSではtoB向けツールのUIを作成するにあたり、デザインシステムを設計したり、独自のコンポーネントを活用しています。
今回はその中の一つであるButtonにフォーカスして、発見したFigmaのTipsを共有します!🙌

デザインシステムって?

日本の行政機関で初めてデジタルに特化したデジタル庁では、デザインシステムについて次のような記載をしています。

構築と推進の目的
デザインと開発を効率化し、利用者の課題解決に集中する
大規模なサービスで素早く改善サイクルを回す
一貫性を担保し、行政サービスを使いやすくする
開発チームの円滑なコミュニケーション
デジタル庁 デザインシステムより引用 www.digital.go.jp

制作側、特にデザイナーにとっては「一貫性を担保」や「開発チームの円滑なコミュニケーション」がメリットになると思います。
SaaSは今までデザイナーがひとり体制だったので、ある程度伴走しながら設計していく運用でなんとかなっていました。今年からインターン生が増えたり、チームとしてより活発に回り始めたこともあり、誰が作ってもズレのない表現ができるデザインシステムの構築を進めています。

Buttonをバリアントで切り替える

KUROTEN ComponentsのButton Filled
これはSaaS・DX事業部で提供している「KUROTEN」というツールで使われているボタンの一部です。
Componentsの仕組み自体はGoogleMaterial Design3を参考にしていますが、マウスホバー・押下といった状態変化をバリアントのグループにしています。

プロパティのON/OFFでアイコンの表示/非表示を切り替えられる
テキストとアイコンを組み合わせられるプロパティにしているので、アイコンを任意で表示/非表示の切り替えができるようにしています。

別保管しているアイコンを呼び出して変更できる
さらに、インスタンスの入れ替えプロパティを使ってアイコン自体も入れ替えができるようにしています。今回はここのアイコン変更について悩んでいた事象を解決しました。

アイコンがデフォルトの色から変わってくれない


アイコン自体は #3F4B5B のカラーを指定しており、Filled ButtonのPrimary でアイコンを使用する場合には #FFFFFF に変更しています。
本当であれば、バリアントを入れ替えた時に色まで変わってくれると便利なのですが…

バツアイコンから別のアイコンに切り替えている様子
なぜかうまく反応せず、エクスポート(右斜め上矢印付きのもの)アイコンではデフォルトカラーが残っていたり、クエスチョンアイコン(?マークのもの)に至っては色が全く変わりません。

原因を探してみる

インスタンスの入れ替えで変わるもの・変わらないものがあったことから、アイコン側に原因があると仮説しました。そして、アイコン自体の構造を見直しながら切り替えたところ、2つの原因が見えてきました。

①パスやシェイプの名称が一致していない

アイコンをレイヤーから見てみると、それぞれのパスやシェイプが一致していない場合があります。今回で言うと、closeアイコンは「Vector」、external linkアイコンは「Union」になっていました。
アイコン作成時にAdobe Illustratorを使ったり、Figmaのシェイプで描画することで、最終的な名称のズレが生じてしまうようです。

closeアイコンは「Vector」に対しexternal linkアイコンは「Union」になっている
(手間ではありますが)名称を一致させることで、同じシェイプと認識され、インスタンス入れ替えも反応するようになりました。
closeアイコンとexternal linkアイコンを切り替えて反応している様子

②パス・シェイプが複数に分かれている

もう一つの原因で、シェイプがグループ化されていたりフレームになっているなど、1つのシェイプにまとまっていないことが挙げられます。

folderアイコンがGroup化され、2つのシェイプから成っている
画像のfolderアイコンは「Group 8」の中に2つのVectorが組み合わさってできているため、うまく反応しなかったようです。
Groupごと選択し「選択範囲の結合」すると、1つのUnionに
Groupを選択した状態で、画面上部の「ブーリアングループ」内の「選択範囲の結合」をすることで1つのUnionに変換できます。
ただし、このままではUnion内に2つのVectorが存在したままです。
Union内に2つのVectorがある状態
もう一度Unionを選択し、「ブーリアングループ」内の「選択範囲を結合」(⌘+E)をすると、1つにまとまったシェイプに変換できます。
Unionグループを選択して「選択範囲を結合」(⌘+E)
1つにまとまったシェイプかどうかの確認は、下記の2種類があります。
レイヤーとオブジェクトそれぞれでの確認方法

  • レイヤーであればUnionやVectorより下に階層ができていないかどうか
  • オブジェクトの編集モードにしたときに、余計な線の重なりがないか

中にはシェイプ内に余計な線が入っているものもあり、これも削除しておいた方が無難です。Illustratorと異なり線だけ消すことができないため、ベクターネットワークを作った上で削除するとスムーズです。

UnionやVector内に余計な線が含まれている
ベクターネットワークを作成してから、不要なポイントを削除

まとめ

今回はバリアントのプロパティ切り替えにおける、アイコンの色の制御についてわかったことをまとめました。

  1. アイコン作成時にシェイプの名称を一致させる
  2. 複数のシェイプで構成されないように、シェイプを1つにまとめる
  3. 余計な線が残らないようにする

自分流で見つけた手法なので、「こっちの方がわかりやすいよ!」などあれば是非教えてください…!