Figmaのリファクタリングからはじめるデザインシステムの構築
こんにちは、GaudiyデザイナーのTORAJIRO(@jirosh1998)です。
『英単語アプリ mikan』の副業デザイナーとして、Figmaリファクタリング&デザインシステムの一歩目を構築した話を書こうと思います。
このnoteの最後に、今回作成した『mikan DesignSystem』のデータを公開していますので、ぜひご覧ください👋(mizoさんをはじめmikanのみなさん、具体的なアウトプットの公開まで許可いただき感謝です!心広すぎ!)
デザインシステム
本題に入る前に、このnoteで書いている「デザインシステム」の定義について触れておきます。デザインシステムとは「良いデザインを『効率的』かつ『一貫性』をもって提供するためのプロダクトのためのプロダクト」です。
この画像が示しているように、スタイルガイドやコンポーネントライブラリなどのたくさんの「構成要素」を含んだ1つのプロダクトのことを指しています。
もう少し具体的にすると、
ざっくりですが、このようなものだと理解しています。
ただこれら全てを揃え、厳密に運用するというのは多くのチームにとって現実的ではないはずです。このnoteでは「デザインシステム(=1プロダクト)は1~2ヶ月で作って終わりではない」という前提のもと、"最初の一歩"はこうやって進めたというプロセスを共有できればと思います。
これは断言できますが、デザインデータを綺麗にすること自体は何の意味も持たないです。副業デザイナーにデザインデータの整理を依頼しても、一時的に整うだけです。あくまで「Figmaのリファクタリング(デザインデータの整理)」は長期的な一貫性と効率化を作る上での一工程でしかありません。
小さなデザインシステムが走り出すまで
mikanでのプロジェクト概要とやったことをざっとまとめます。
結果として、約2ヶ月で少しずつ走り出せる体制を作れました。
0. 課題設定とロードマップ
次に、どんな課題があり、どんな目的を定義したかについて。先述したように、デザインシステムというのは「あるプロダクトやチームのための、1つのプロダクト」です。なので、デザインシステムの設計に唯一解はなく「対象のチームやプロダクトにあったもの=最適な形」になるので、チームやプロダクトの課題・構成を理解する必要があります。
mikanの抱えていた課題は大きく2つで、
この課題へのアプローチとして、デザイントークンやコンポーネントライブラリの構築を行い「デザイナーリソースを効率化する」ことを目指すことにしました。
展望としては実装されたコードに紐づいて「デザインシステム」が構築される未来があるのが理想ですが、特にスモールチームにおいてはそれが"Figmaの上の話"だとしても、この一歩目を適切に、スピード感を持って作ることが重要かなと思います。
0. Figmaリファクタ!のその前に
当然と言えば当然ですが、キャッチアップとして以下のようなことを行いました。
1. デザインシステムの設計とファイル構成の検討
この時点ではそこまでカッチリ考えすぎず進めてもいいと思いますが、ファイル構成を検討します。これはかなり組織やプロダクト構成が影響するので、あくまで参考程度にしてください。Figmaにおけるデザインシステムの構成は大きく3パターンに分類できます。(※以下、デザインシステムをレビューいただいたtottieさんの神図解を引用させていただいてます👇)
mikanでは複数プラットフォーム展開であることと、チーム規模を考慮して最もシンプルなCentralizedを選択しました。ちなみに同様のチーム規模で3つのサービスを開発しているGaudiyでは、Centralizedを応用した形にカスタマイズしています。
最近MasterComponentをファイル間で移行できるようになる神アップデートが行われました。これまではMasterというPluginを利用していたのですが、これによってファイル構成の変更やMasterComponentをデザインシステムに昇華することも容易になりました。最高です。
おまけ:Figmaの全体ファイル構成とページ構成表現
🔗 ファイル構成に関する参考記事
2. 命名規則とコンポーネント定義の方針
このあと様々な「定義」が待っているので、定義の仕方について一度考えます。
3-1. デザイントークンの定義 - Typography
デザイントークンの定義はとても重要なステップです。特に「色」や「タイポグラフィ」はこれから定義していくすべてのコンポーネントに含まれる要素になります。
Typographyの定義では、まず現状使われてるものを洗い出し一覧化した上で、どのフォントを今後も使用していくのかその必要性を疑いながら、できるだけミニマムな設計を検討していきます。
最終的に、少し増えてしまいましたが、iOS, AndroidにそれぞれJp, Enの計4種類×15styleを定義しました。
おまけ
ちなみに、めちゃくちゃ面倒な文字の定義を一括でやってくれる神Pluginあるのでどうぞ。
3-2. デザイントークンの定義 - Color
時系列で言うと最後に実施したのですが、デザイントークン定義で最も気をつけなければいけない1つがカラーの設計です。カラースケールの設計は、プロダクト全体のカラーマネジメントやアクセシビリティ、ダークモードの対応など、これから構築していくデザインシステムの広範囲において適用される、裏を返せば大きな負債になりうる部分だからです。
プロダクトの初期フェーズでなんとなく決めたそれっぽいカラーパレットでも、デザイントークンとして定義されていれば、後からのデザインデータ上での更新が容易になるので最悪それでいいと思っています。ただ、0→1フェーズでもこの段階でカラースケールを設計しておくことは、中長期的な目線での土台づくりの上でとても効果的だと思います。
最終的にはチームやプロダクトフェーズ、タイミングによって「どこまで突き詰めてやる必要があるのか」という判断になります。今回はアクセシビリティの厳密さについては、ブランドカラー変更などの大きな影響が出ると判断したので一旦許容するものとして作成しています。
ColorToken
ColorTokenでは、GreyスケールをメインにWhiteやPrimary、Secondaryの色調展開を行いました。ColorTokenとはデザイントークンのためのデザイントークンのようなものです。
Primaryなどの1色を軸としてカラースケールを展開して定義する(ColorToken)と、ColorPaletteで設計する実際に意味を持つ色(SemanticColor)の定義に置き換えることができるため、対応関係がわかりやすく変更しやすいというメリットがあります。
Greyスケールに関しては、透過させていくことでアクセシビリティを保てるという利点もあるため、この工程は時間をかけてでもマストで行えるといいと思います。
ColorPalette
それぞれの定義も、CyberAgentさんの記事で紹介されている定義方法が良かったのでそちらを参考にしています。あまりカラー定義を増やしたくなかったので、一部「Border」などの色は「UI」で定義した色を使うようにしています。
DarkModeの適用
先ほど作成したColorPaletteは、DarkMode Switcherというプラグインを使って一括でダークモードに反転できるようにしています。全画面は対応せず、主要画面をサンプルとして作成しておきました。
🔗 カラー設計に関する参考記事
カラー設計はとても専門的で奥深さがあるので、以下の記事を大変参考にさせていただきました。
4. コンポーネントを集める、削る、定義する
おつかれさまです。ここからはようやくリファクタリングっぽいことをしていきます。
やることは単純で、「ほとんど同じ見た目・役割なのに微妙に違うコンポーネント」を洗い出し、定義すべきコンポーネントを見極めることです。
全画面から現在使われてるAtomsレベルのコンポーネント(またはデザイントークンになりうる粒度)をひたすら収集し、分類、そこから定義するコンポーネントを選定していきます。
このような議論を繰り返して定義、作業しながら修正を繰り返してブラッシュアップしていきます。
今回はコンポーネントの粒度として、Foundationのような汎用性の高いコンポーネントより具体的な、「ある画面内で複数回使われる」または「デザイナーが頻繁に利用する」コンポーネントも定義していきました。
定義するコンポーネントの抽象度は、デザインシステムの設計にも通ずる部分ですが、提供しているプロダクトの特性に合わせて決めるといいです。それによってDesignSystemの担うべき役割や全体設計が変わってくるので、すり合わせを行いましょう。
実際、ここからはFigmaリファクタマンとして手を動かす作業をひたすらやっていきます。以下のように未作成画面を列挙してもらって進めるのがやりやすかったです。
🔗 コンポーネント関連記事
Variantsをいい感じに並び替えてくれるPlugin
スタイルを生成してくれるPlugin
🍊 mikan DesignSystem
というわけで、ここからmikan DesignSystem見れます。
レイヤー名まで綺麗にできてないとか、何かが足りないとか、そういう部分もたくさんありますが、リアルな1歩目が垣間見えると思います。改善がすべて!!!
学びと反省点
さいごに
デザインシステムの一歩目を構築するプロセスについて、結構具体的に書いてみました。副業デザイナーとして違うドメインや組織で設計〜構築まで関わる中で、本業にもブラッシュアップして還元できることがたくさんあり学びも多かったです。
自分もそうであるように、今回のmikanと似たような課題を持っている、事業会社のデザインチームがたくさんあると思います。「緊急度は低いけど長期的に重要」なデザインリファクタリングはメインの事業コンテキストと切り離して依頼できる分、副業デザイナーがバリューを発揮しやすい部分なのかなと感じます。
デザインシステム構築のプロセスがどこかのチームやデザイナーのお役に立てれば嬉しいです!
🍊mikanの採用はこちら
🐯 よかったらMeetyしましょ!&Gaudiyについて