見出し画像

Figmaコンポーネントづくりきほんの考え方 2024 Xmas版

Money Forward Design Advent Calendar 2024。ついにクリスマスイブですね!

今年はFigmaのアップデートでこれまでできなったことが色々解消され、より効率的でシンプルに使えるようになりました。そこで、あらためてコンポーネントをつくるときに私が心がけている「きほん」を整理してまとめてみました。

毎度のニッチなノウハウやケース紹介ですが、お楽しみください!


ともかく命名する

MainNavigationコンポーネントを例に、すべてのレイヤー名にNavigationのものであることが分かる命名がされている図
たくさんレイヤーがあってもちゃんと命名する

さて、まずは、もっとも重要と言っても過言ではない命名です。命名しないといけない場所はたくさんあります。

  • コンポーネント名

  • レイヤー名

  • バリアント、プロパティ名

  • バリアブル、コレクション、モード名

Figmaのコンポーネントにおいてはこれらの命名はすべて大切です。

とくにアップデートするとき、バリアントを切り替えたり、似たようなコンポーネントをスワップしたりするときなどは名称をキーとして入れ替え先を見つけることが多いです。うまくオーバーライドが引き継がれなかった!とかの事故はおおむね命名がずれている場合ではないでしょうか。

命名規則
全規則共通
必ず英語(US)による命名を行います。 MUST
文字種は半角英数とします。 MUST
特定のドメインに必要なコンポーネントで自然な英訳が不能な場合や実装コンポーネントの命名規則と揃える目的の場合のみローマ字を許容します。 MUST
ドメイン用語については翻訳資料などを別途参考にしてください。 SHOULD
レイヤー名、コンポーネント名共通
表記法は UpperCamelCase とします。 MUST
単語の先頭は大文字にして単語同士をスペースやアンダースコアを使わずに繋げてください。
例:UpperCamelCase
レイヤー名
レイヤー名は必ずそのレイヤーの意図を示す命名を行います。 MUST
Frame Frame 12345 などのデフォルトのレイヤー名が残っていることを禁止します。 MUST NOT
リストアイテムなど同じ構造のレイヤーが連続する場合には連番を設定します。 SHOULD
特にコンポーネント内のレイヤーの場合にはそれぞれのレイヤーに違う名前がついていることが重要です。
オーバーライドしたときのバリアント切り替えや、スワップが正しく機能する条件は置き換え前後でのレイヤー名とレイヤー構造が同じであることです。同名レイヤーが存在すると意図しない変更が起きる原因になります。
連番については以下の規則で命名します
1から採番します SHOULD
その連番内で最大の桁数に合わせた0埋めを利用します SHOULD
最大の番号が 123 であれば、 001〜123 とする
昇順(レイヤーの上にあるほど小さい、下にあるほど大きい)を基本とします SHOULD が、Auto layoutなどとの整合性と合わせて変更しても構いません。 MAY
命名規則の抜粋

命名規則を用意して、複数のコンポーネント間でブレないようにすること、パブリッシュ前にはよく確認して命名されてないレイヤーが無いか、スペルが間違ってないかのチェックはとても重要です。

また、大きな影響はありませんが、複数コンポーネント間でプロパティ名の順番などもきれいに揃えると使い勝手も良いと思います。

ともかくバリアブルつかう

あるコンポーネントをDevModeで見た状態。多くの値が枠で囲われ、バリアブルが利用されていることが分かる。
バリアブルだらけ

コンポーネントを構成するありとあらゆるバリアブルが使える場所にはバリアブルを使います。

これにはデザインを構造化するとか、共通言語化して実装コンポーネントと連携したりすることを容易にする、というのがもっとも重要な側面ですが、コンポーネントライブラリを運用するひととしても重要なポイントがひとつあります。

それは、デタッチへのちょっとしたフェールセーフになるということです。

デタッチ、されたくないですよね?でもどうしてもされてしまうことあると思います。コンポーネントをデタッチした場合でもその中で利用されているバリアブルの指定は消えません。(もちろん消されてしまえば消えますが…)

ダイアログ状のコンポーネントがデタッチされているが、プロパティパネルではpadding/sheet/horizontalというトークンが有効である事が分かる。
あえなくデタッチされてもトークンは残っている

可能な限りの要素にトークンが利用されていれば、自分の知らないバリエーションが作られてしまった場合でも、大きなズレは起こりにくく、またトークンのアップデートは受けられるので、更新性もすこし担保されます。

それはそれとして、ビジネスプラン以上だったらデタッチされているかどうかは解析をみるなどしてチェックもしましょう!

ともかくプロパティつかう

ともかくプロパティが使える部分はプロパティを使う、ということも心がけています。

いろいろな理由がありますが、個人的に重要なのは、組み合わせ爆発を防ぐということと、変更できる場所を明確にすること、アップデートが行いやすくなることなどです。

組み合わせ爆発をふせぐ

ラベルの前後にアイコンが設定できるボタンコンポーネントが2つある。一つはオンオフをプロパティで実現し、一つはバリアントで実現している。バリアント例は前後の表示組み合わせのため4つのバリアントを必要としている。
アイコンのオンオフをプロパティ(上)とバリアント(下)でやると

たとえば特定のレイヤーのオンオフはバリアントとして作っても、プロパティのBooleanを利用しても出来ますが、そういったすべてをバリアントで作ってしまうと、状態の組み合わせを表現するためにバリアントがどんどん膨らんでしまいます。

画像の例だと、アイコン無し、左に有り、右に有り、左右に有りの4パターンですが、プロパティは一つのコンポーネントで表現できますが、バリアントでやると4つのコンポーネントレイヤーが必要です。

これが3つだと9、4つだと16…となってしまうのでプロパティを使えるときはプロパティを使うのはとても大切だと思っています。

プロパティで良いところはそのようにして、必要な所だけバリアントにすることで管理のしやすいコンポーネントにできると思っています。

明確にする

ボタンのラベルのようにコンポーネントをつかうときに変更して使う部分をプロパティにしておくことで、明確に「そこは変えて良い場所だ」ということを伝えることができます。

また、プロパティがしっかり設定されていれば、対応するテキストレイヤーなどが変わってしまってもオーバーライドが引き継がれます。この点からも変更して使う場所については確実にプロパティ化するのが安心です。

ともかくシンプルにする

特にコンポーネントをつかうのが自分以外のとき、いろいろな使われ方をして期待通りに使ってもらえるかは重要なポイントです。

そのときに効くのはここまで書いてきたことに加えて、可能な限りシンプルにつくると言うことです。

とくに使ってもらってから問題が起きやすいのはオートレイアウト周辺で幅高さをちゃんと変えられるか?コンテンツによって適切に伸び縮みするか、の所ではないでしょうか?

Figmaのオートレイアウト、折り返しなども出来るようになりとても便利になりました。それでもなお、レイヤーがネストしているときに期待通りの挙動をさせることが難しいときもあります。

これはFillやHugなどの計算がどうしてもレイヤーの親子構造によってしまうためです。つまり、構造が深ければ深いほど意図しない挙動になる可能性がたかくなります。

必要最低限の深さかどうか?無駄に深くしていないか?もっとシンプルに出来ないか?という視点でブラッシュアップします。

構造がシンプルになると命名しないといけないレイヤーも減ってハッピーです。逆に命名しにくいレイヤーがあるとき、それは構造上おかしな部分のシグナルだったりするときもあります。

メリークリスマス!

ひとつでもヒントになることがあったら幸いです。それでは良いクリスマスを!


それぞれのプロダクトでもっとユーザーフォーカスを実現するための大規模なデザイン基盤をつくっています。こんな細部に気を配りながらも、大きなチャレンジを一緒にしてくれる人、募集中です。


あしたはセルジオさんから「CDOってどんな仕事?その参」をお送りします。おたのしみに!

いいなと思ったら応援しよう!

この記事が参加している募集