本文へ移動

ホーム / デザイナー / 第3部 デザインシステムと実装

第3部 デザインシステムと実装・第6章

デザインシステムとトークン

★★☆ 重要8トピック・面接 4問

デザインとコードのずれを減らし、速く一貫した画面を作る仕組みがデザインシステムです。この章では、デザインシステムの全体像と、色・文字・余白のトークン、ダークモード、トークンの受け渡しと運用を押さえます。部品(コンポーネント)は次の章で扱います。

6.1デザインシステムとは

用語★★☆ 重要
ひとことで

色・文字などのトークン、ボタンなどのコンポーネント、画面の組み方のパターン、原則と使い方の説明をまとめ、デザインとコードで共有する仕組み。

デザインシステムは層になっている原則・ガイドライン何を大事にするか・書き方パターンよくある画面の組み方(フォーム・一覧)コンポーネントボタン・入力欄・カードトークン色・文字・余白・角の丸み下の層ほど細かく、上の層はそれを組み合わせて使う。全部の層に「使い方の説明」が付く
デザインシステムの層

デザインシステムは、画面を作るための部品と、その使い方のルールをまとめたものです。デザイナーだけのものではなく、デザインとコードで同じ部品を共有することに価値があります。

あるとよいこと効果
Figma のライブラリとコードの部品が1対1で対応デザインがそのまま実装に移せる。「どの部品ですか?」が減る
トークンの名前がデザインとコードで同じ色・余白の指定がずれない。ダークモードやブランドの変更が1か所で済む
部品ごとの状態と使い方の説明新しい人でも迷わない。アクセシビリティの配慮が部品に入る
追加・変更の流れその場しのぎの部品が増えない

公開されている例として、Google の Material Design、IBM の Carbon、デジタル庁のデザインシステムなどがあり、構成や書き方の参考になります。ただし、他社のものをそのまま使うより、自分たちのプロダクトで実際に使う部品から少しずつ作るほうが定着しやすいです。

面接ではこう答える

デザインシステムは、色や文字のトークン、ボタンなどのコンポーネント、フォームや一覧のようなパターン、そしてそれらの原則と使い方の説明をまとめた、チームの共通の部品と言葉です。Figma のライブラリとコードの部品が対応していることが大事で、デザインとコードの両方で同じ部品を使うから、速く一貫した画面が作れます。作って終わりではなく、追加や変更の流れを決めて育て続けるものだと考えています。

ひとことで

色・余白・文字・角の丸みなどを名前付きの値にして、デザインとコードで共有する。ダークモードもトークンで切り替える。

デザイントークンは、色・余白・文字の大きさ・角の丸みなどの値に名前をつけたものです。「#1A73E8」ではなく「color.text.link」のように名前で使うと、デザインとコードで同じ値を共有でき、変えるときも1か所を直すだけで済みます。

基本(値)意味(用途)部品(必要なときだけ)blue.600gray.0gray.900red.600color.bg.accentcolor.bg.surfaceライト:gray.0/ダーク:gray.900color.bg.dangerbutton.primary.bgcard.bg画面では主に「意味」を使う。ダークモードは、意味のトークンの指す先を切り替える
トークンの階層:基本 → 意味 → 部品(点線はダークモードのときの指す先)
階層名前の例役割
基本(プリミティブ)blue.600、gray.100、space.4使える値の一覧。色そのものを表す
意味(セマンティック)color.text.primary、color.bg.danger用途を表す。値は基本のトークンを指す
部品(コンポーネント)button.primary.bg部品ごとの値。意味のトークンを指す

画面では意味のトークンを使うのが基本です。「blue.600」を直接使うと、ブランドの色を変えたりダークモードにしたりするときに、使っている場所を全部探すことになります。ダークモードは、意味のトークンの指す先を切り替えて実現します(color.bg.surface がライトでは white、ダークでは gray.900)。部品のトークンは、部品ごとに細かく調整したいときだけ足します。全部の部品に作ると数が増えすぎて管理しきれなくなります。

面接ではこう答える

デザイントークンは、色・余白・文字の大きさ・角の丸みなどの値に名前をつけたものです。基本のトークンは blue.600 のような値そのもの、意味のトークンは color.text.primary のような用途、部品のトークンは button.primary.bg のような部品ごとの値で、上の階層が下の階層を指します。画面では意味のトークンを使うのが基本で、そうするとブランドの色の変更やダークモードが、指す先を変えるだけで済みます。デザインとコードで同じ名前を使うので、指定のずれも減ります。

6.3色のトークンの作り方

用語★★☆ 重要
ひとことで

色は、明るさの段階を持つ基本の色(blue.100〜900 など)を作り、そこから用途ごとの意味の色(文字・背景・枠・状態)を選んで定義する。

色は「段階のある基本の色」から、意味の色を選ぶ100200300400500600700800900color.bg.subtlecolor.bordercolor.text.link文字に使う色は背景とのコントラスト比を確かめた組み合わせだけを意味の色にする
色のトークン:基本の色の段階と意味の色

色のトークンは、2段階で作るのが基本です。①明るさの段階を持つ基本の色(パレット)、②そこから用途ごとに選んだ意味の色です。

意味の色の分類例気をつけること
文字text.primary・text.secondary・text.link背景とのコントラスト比(4.5:1 以上)
背景bg.surface・bg.subtle・bg.inverse重なりの段階(カードの上のメニューなど)
枠border.default・border.strong入力欄の枠は 3:1 以上
状態danger・warning・success・info色だけに頼らず、アイコン・文言と組み合わせる
操作action.primary・action.primary.hoverホバー・押下・無効の色も一緒に決める

状態の色(赤・黄・緑)は、文字の色・背景の色・枠の色をそれぞれ用意すると使いやすくなります。「エラーの赤い文字」と「エラーの薄い赤の背景」は別のトークンです。

面接ではこう答える

色のトークンは、まず明るさの段階を持つ基本の色を作り、そこから文字・背景・枠・成功やエラーなどの用途ごとに意味の色を選んで定義します。画面では意味の色だけを使うので、ブランドの色を変えたりダークモードにしたりしても、意味の色の指す先を変えるだけで済みます。文字と背景の組み合わせは、意味の色を決める段階でコントラスト比を確かめておくと、画面ごとに測る必要がなくなります。

ひとことで

文字の大きさ・太さ・行の高さを組みにして「本文」「見出し」などの名前で定義する。画面ではその名前で使い、大きさを個別に指定しない。

文字は、大きさだけでなく、太さ・行の高さ・文字の間隔を組みにしてトークンにします。画面では組みの名前で使います。

名前の例大きさ/行の高さ(例)使う場所
display32px/40pxページの大見出し
heading.lg24px/32px画面のタイトル
heading.md20px/28px区切りの見出し
body16px/24px本文
body.sm14px/20px補足の文
caption12px/16px注釈・図の説明

数値は一例です。日本語は漢字が詰まって見えやすいので、本文の行の高さは文字の大きさの 1.5〜1.8 倍程度にすることが多いです。種類は 6〜8 個程度に絞ると、迷いにくくなります。

決めておくこと理由
フォントの種類と太さWeb フォントは太さごとに読み込むので、太さの数が表示の速さに効く
OS の文字のスタイルとの対応iOS の Dynamic Type などに連動させやすい
数字の書体金額や表で桁がそろう書体(等幅の数字)を使うか

面接ではこう答える

文字のトークンは、大きさ・太さ・行の高さ・文字の間隔を組みにして、本文・見出し・注釈などの名前で定義します。画面では「body」「heading.lg」のような名前で使い、個別に 15px などを指定しないようにします。こうしておくと、文字の大きさの種類が増えすぎず、実装でも同じ名前のスタイルを当てるだけで済みます。行の高さを決めておくと、デザインと実装で文字の上下の余白もそろいます。

ひとことで

余白は 4 や 8 の倍数など決まった段階から選び、名前(space.4 など)で指定する。画面の列のグリッドもブレイクポイントごとに決める。

余白は決まった段階から選ぶ(4 の倍数の例)space.14pxspace.28pxspace.312pxspace.416pxspace.624pxspace.832pxspace.1248px
余白のトークンの例

余白も色と同じように、決まった段階をトークンにして、そこから選びます。4 や 8 の倍数がよく使われます。

トークン決めること
余白の段階4・8・12・16・24・32・48 など。大きいほど間隔を広く
列のグリッドブレイクポイントごとの列の数(4・8・12 など)・列の間隔・左右の余白
本文の最大の幅読みやすい行の長さ(例:本文は 720px まで)
角の丸み・影小・中・大などの段階

落とし穴:トークンにない値(13px の余白など)をデザインで使うと、実装で近い値に丸められるか、例外の値が増えていきます。迷ったら既存のトークンに合わせるか、トークンとして追加するかを決めます。

面接ではこう答える

余白は、4 や 8 の倍数のように決まった段階をトークンにして、そこから選びます。段階が決まっていると、デザインのたびに 13px や 15px のような半端な値が生まれず、実装でも同じ名前で指定できます。画面全体の列のグリッドも、ブレイクポイントごとに列の数・列の間隔・左右の余白を決めておきます。迷ったら近い段階に合わせ、どうしても必要な値はトークンとして足すかをチームで決めるようにしています。

6.6ダークモードとテーマ

用語★★☆ 重要
ひとことで

ダークモードは色を反転するのではなく、意味のトークンの指す先を切り替えて作る。両方のモードでコントラストを確かめる。

ライトモード・bg.surface → white・text.primary → gray.900・重なりは影で表すダークモード・bg.surface → gray.900・text.primary → gray.100・重なりは明るい面で表す
ダークモードは、意味のトークンの指す先を切り替えて作る

ダークモードは、OS の設定に合わせて画面を暗い配色にするものです。色を反転するのではなく、意味のトークンの指す先を切り替えて作ります。そのため、画面で基本の色(blue.600 など)を直接使っていないことが前提になります。

気をつけること理由と対応
重なりの表し方暗い背景では影が見えにくい。手前のもの(カード・メニュー)ほど少し明るい面にする
鮮やかな色暗い背景ではまぶしく見えやすい。彩度や明るさを調整したダーク用の色を用意
コントラストライトとダークの両方で、文字と背景の組み合わせを確かめる
画像・ロゴ白い背景を前提にした画像は浮いて見える。ダーク用の素材を用意するか
ユーザーの選択OS の設定に従う・アプリ内でライト/ダークを選べる、のどちらにするか

Web では、OS の設定を prefers-color-scheme で受け取り、CSS のカスタムプロパティの値を切り替えます。

:root { --color-text-primary: #1f2328; --color-bg-surface: #ffffff; }
@media (prefers-color-scheme: dark) {
  :root { --color-text-primary: #e6e8eb; --color-bg-surface: #16181c; }
}

面接ではこう答える

ダークモードは、画面の色をそのまま反転するのではなく、意味のトークンの指す先をライト用とダーク用で切り替えて作ります。例えば背景のトークンは、ライトでは白、ダークでは濃いグレーを指します。ダークでは影が見えにくいので、重なりは少し明るい面で表すことが多く、鮮やかな色はまぶしく見えるので彩度を下げた色を用意します。両方のモードでコントラスト比を確かめ、ロゴや画像も暗い背景で見え方を確かめるようにしています。

ひとことで

Figma の変数で定義したトークンを、JSON などの形式で書き出し、変換の道具で CSS・iOS・Android の定義に自動で変える。どちらを正にするかを決める。

1つの定義から、各プラットフォームの値を作るFigma の変数モード:ライト/ダークトークンの定義JSON などの形式変換の道具自動で生成各コードCSS・iOS・Androidどちらを「正」にするかを決める(Figma を正にするか、コードの定義を正にするか)
トークンの受け渡しの流れ(例)

Figma の変数とコード:Figma の「変数(Variables)」でトークンを定義し、「モード」でライト・ダークを切り替えられます。コードでは CSS のカスタムプロパティ(--color-text-primary など)や、iOS・Android の色の定義になります。名前の付け方をデザインとコードでそろえ、どちらを正にするか(Figma から書き出すか、コードの定義を正にするか)と、更新の手順をエンジニアと決めておきます。

決めること例
正の置き場所Figma の変数を正にして書き出す/コードのトークンの定義を正にして Figma に取り込む
形式JSON など。W3C のコミュニティグループで共通の形式づくりも進んでいる
変換変換の道具で CSS・Swift・Kotlin のコードを自動で作る
名前の付け方color.text.primary ↔ --color-text-primary のように規則で変換できる名前
更新の流れ変更の提案 → レビュー → 両方に反映 → 変更点の周知

面接ではこう答える

トークンは、Figma の変数で定義し、JSON などの形式に書き出して、変換の道具で CSS のカスタムプロパティや iOS・Android の色の定義に自動で変える、という流れがよく使われます。手で写すと必ずずれるので、自動にするのが大事です。そのうえで、Figma とコードのどちらの定義を正にするか、誰がいつ更新して、変更をどう知らせるかを決めておきます。名前の付け方をデザインとコードでそろえることが前提です。

その場しのぎを増やさない流れ要望画面で必要に既存で足りるか組み合わせで済む?レビューデザインとコード両方に追加Figma とコード周知変更点の一覧
新しい部品・トークンを足す流れ(例)

デザインシステムは、作ることより使われ続けることが大事です。追加・変更・廃止の流れが決まっていないと、画面ごとのその場しのぎの部品が増え、Figma とコードがずれていきます。

場面決めておくこと
追加どこに要望を出すか。既存の組み合わせやバリアントで足りないかを先に確かめる
変更影響する画面の範囲。見た目が変わる変更は事前に知らせる
廃止すぐ消さず「非推奨」にして、置き換え先と期限を示す
版の管理コードの部品は版の番号で管理されることが多い。どの版でどう変わったかの一覧
例外その画面だけの部品を作るときの基準(ほかで使う見込みがなければ画面側で持つ)

定期的に、デザインシステムの担当(デザイナーとエンジニア)で要望と使われ方を見直す場を持つと、ずれが小さいうちに直せます。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • デザインシステムは、原則・トークン・コンポーネント・使い方の説明をまとめた「チームの共通の部品と言葉」
  • 画面では意味のトークン(color.text.primary など)を使い、ダークモードは指す先を切り替えて作る
  • トークンはデザインとコードで同じ名前にし、どちらを正にするかと更新の流れを決める
  • デザインシステムとは:色・文字などのトークン、ボタンなどのコンポーネント、画面の組み方のパターン、原則と使い方の説明をまとめ、デザインとコードで共有する仕組み。
  • デザイントークンと3つの階層:色・余白・文字・角の丸みなどを名前付きの値にして、デザインとコードで共有する。ダークモードもトークンで切り替える。
  • 色のトークンの作り方:色は、明るさの段階を持つ基本の色(blue.100〜900 など)を作り、そこから用途ごとの意味の色(文字・背景・枠・状態)を選んで定義する。
  • 文字のトークン(文字のスケール・行の高さ):文字の大きさ・太さ・行の高さを組みにして「本文」「見出し」などの名前で定義する。画面ではその名前で使い、大きさを個別に指定しない。
  • 余白とグリッドのトークン:余白は 4 や 8 の倍数など決まった段階から選び、名前(space.4 など)で指定する。画面の列のグリッドもブレイクポイントごとに決める。
  • ダークモードとテーマ:ダークモードは色を反転するのではなく、意味のトークンの指す先を切り替えて作る。両方のモードでコントラストを確かめる。
  • Figma の変数からコードへ(トークンの受け渡し):Figma の変数で定義したトークンを、JSON などの形式で書き出し、変換の道具で CSS・iOS・Android の定義に自動で変える。どちらを正にするかを決める。

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1デザインシステムを運用するうえで大事なことは?

模範回答

作ることよりも、使われ続けることが大事だと考えています。そのために、デザインの部品とコードの部品を1対1で対応させ、名前やバリアントを props とそろえます。トークンもデザインとコードで同じ名前にして、どちらを正にするかを決めておきます。

更新の流れも決めておきます。新しい部品や変更の提案を受け付ける場所があり、デザイナーとエンジニアで見て、決まったら Figma と Storybook の両方を更新し、変更点を周知する、という流れです。デザインシステムはデザイナーだけのものにせず、エンジニアと共同で持つことで、実装と離れずに保てます。使われていない部品や例外の値が増えていないかも、定期的に見直します。

深掘りされたら

  • デザインシステムにない部品が必要になったら、どうしますか?
  • デザインシステムが使われているかは、どう確かめますか?

見られているポイント使われ続ける仕組み・更新の流れ・エンジニアとの共同所有

Q2デザイントークンの「基本」と「意味」の違いは何ですか?なぜ分けるのですか?

模範回答

基本のトークンは「blue.600」のように値そのものを表し、意味のトークンは「color.text.link」「color.bg.danger」のように用途を表します。意味のトークンが基本のトークンを指す、という関係です。

分けておくと、画面では用途の名前で色を使うので、ブランドの色を変えるときやダークモードにするときに、意味のトークンの指す先を変えるだけで済みます。基本のトークンを画面で直接使うと、変更のたびに使っている場所を全部探すことになります。部品ごとのトークンは、部品だけ調整したいときに足す程度にして、数を増やしすぎないようにします。

深掘りされたら

  • ダークモードのデザインで気をつけることは何ですか?

見られているポイント階層の役割とダークモード・変更への強さ

Q3ダークモードに対応するとき、デザインで気をつけることは何ですか?

模範回答

色を反転するのではなく、意味のトークンの指す先をライト用とダーク用で切り替える形で作ります。そのため、まず画面で基本の色を直接使っている場所をなくし、意味のトークンだけを使うようにします。

そのうえで、暗い背景では影が見えにくいので重なりは少し明るい面で表す、鮮やかな色は彩度を下げたダーク用の色を用意する、ロゴや画像が浮かないか確かめる、両方のモードで文字と背景のコントラスト比を確かめる、といった点に気をつけます。OS の設定に従うか、アプリ内で選べるようにするかも決めておきます。

深掘りされたら

  • ダークモードの色は、どうやって決めますか?

見られているポイントトークンの仕組みと、ダーク特有の注意点の両方

Q4Figma のトークンとコードのトークンがずれないように、どうしていますか?

模範回答

手で写さず、1つの定義から自動で作るようにしています。例えば Figma の変数でトークンを定義して JSON などに書き出し、変換の道具で CSS や iOS・Android の定義を作る流れです。逆に、コードの定義を正にして Figma に取り込む形もあります。

大事なのは、どちらを正にするかを決めることと、名前の付け方をそろえることです。color.text.primary が --color-text-primary になる、というように規則で変換できる名前にしておきます。変更するときは、提案、デザイナーとエンジニアのレビュー、両方への反映、変更点の周知、という流れにしています。

深掘りされたら

  • トークンの名前は、どんな規則で付けていますか?

見られているポイント自動化と、正の置き場所・名前の規則を決めているか