🎨

デザインシステムの作成に役立つ色の考え方

2023/05/31に公開

Color based on Elements

色構成は、要素で考え、以下の4つの要素で分ければ良いと考えます。

  • Text
  • Icon
  • Border
  • Background

イメージとしては、以下のような感じです。

Color based on Usage

色のバリエーションは、用途で考え、以下の10パターンを用意すれば良いと考えます。

  • Main
  • Sub
  • Critical
  • Warning
  • Success
  • Disabled
  • On(OnFill)
  • Link
  • Focused
  • Primary

例えば、以下のように使い分けます。

  • 文章で使う色は「Main」
  • 補足文章で使う色は「Sub」
  • エラーに使う色は「Critical」
  • 注意に使う色は「Warning」
  • 処理完了に使う色は「Success」
  • 無効な要素に使う色は「Disabled」
  • 塗りつぶしの上に使う色は「On」
  • リンクに使う色は「Link」
  • フォーカスされた時の色は「Focused」
  • アクセントに使う色は「Primary」

Create Color Scheme

以上を元に、カラースキーマは、要素×用途で作成します。

Text Color

スキーマ名 色の例 使用例
text-main 見出し、文章、入力値
text-sub グレー 説明、備考、プレースホルダー
text-critical エラーメッセージ、削除の文字など
text-warning 黄色 注意メッセージの文字
text-success 完了メッセージの文字
text-disabled グレー 無効となっている文字
text-on 塗り潰しの上の文字
text-link リンク
text-primary 目立たせたい文字、ブランドカラー

Icon Color

スキーマ名 色の例 使用例
icon-main 基本的なアイコンボタン
icon-sub グレー 特に目立つ必要のないアイコンボタン(Likeボタンなど)
icon-critical エラーメッセージ、削除のアイコン
icon-warning 黄色 注意メッセージのアイコン
icon-success 完了メッセージのアイコン
icon-disabled グレー 無効となっているアイコンボタン
icon-on 塗り潰しの上のアイコン
icon-primary 目立たせたいアイコン、ブランドカラー

Border Color

スキーマ名 色の例 使用例
border-main 基本的な線
border-sub グレー コンテンツを区切る線
border-critical エラーメッセージ、削除の外枠
border-warning 黄色 注意メッセージの外枠
border-success 完了メッセージの外枠
border-disabled グレー 無効となっている要素の外枠
border-on 塗り潰しの上の線
border-focused オレンジ フォーカスされた入力欄の外枠
border-primary 目立たせたい線、ブランドカラー

Background Color

スキーマ名 色の例 使用例
background-main 塗りつぶしのボタンの背景(基本色)
background-sub グレー 塗りつぶしのボタンの背景(特に目立つ必要のない)
background-critical 塗りつぶしのボタンの背景(エラー、削除)
background-warning 黄色 塗りつぶしのボタンの背景(注意)
background-success 塗りつぶしのボタンの背景(完了)
background-disabled グレー 塗りつぶしのボタンの背景(無効)
background-primary 塗りつぶしのボタンの背景(特に目立たせたい)
background-main-container 基本的な背景
background-sub-container 薄いグレー 他の部分と微妙に変えたい背景
background-critical-container 薄い赤 エラーメッセージ、削除の背景
background-warning-container 薄い黄色 注意メッセージの背景
background-success-container 薄い緑 完了メッセージの背景
background-disabled-container 薄いグレー 無効となっている要素の背景
background-primary-container 薄い紫 外枠のボタンの背景

まとめ

この記事は、「デザインシステムを作る時の参考になれば...」「この考え方を共有したい...」と思いまとめてみました。

ただ、この色の分け方にはもちろんデメリットもあります。

  • 同じ色を使う部分もあるから、これだけ用意するのは面倒
  • HoverやActive時の色などが定義されていない (→自分はそれはOpacityやShadowなどで調整すれば良いと考えています)

ですが、この色の分け方の真骨頂はメリットにあります。

  • どこにどの色を当てるかわかりやすい
  • ダークモードにも対応しやすい
  • 様々なデザインに応用しやすい

また、全てこれ通りでなく、「CriticalをErrorという名前に変更」したり、「Primaryだけでなく、Secondary、Tertiaryを追加」したりするのも良いと思います。

【余談】
この考え方に思い至ったのは、デザインと開発で色を固定したいと思ったからです。
さらに言えば、「デザインツールの色設定」と「Webの色設定」と「アプリの色設定」をなるべく同じにしたかったわけです。
また、自分の中でダークモードを実装できるかどうかも必要要件でした。
当初は、Flutterの「Material Design 3」の考え方がとても素晴らしくそれを基準にしようと思ったのですが、自分が必要だと思った色が足りないと感じました。
なので、今回紹介した色構成に一旦落ち着きました。
色の設定については、「デザインはFigmaのローカルスタイルを用意」、「WebはTailwindCSSを使った定数を用意」、「アプリはFlutterのThemeExtensionで色のカスタム設定を用意」することで実現できます。(それぞれやり方に工夫が必要ですが)
別の良い方法があれば、また更新したいと思います。

Discussion