破綻しない配色設計:デザインシステムにおける「セマンティックカラー」の定義と実践
多くのWebサイトやアプリケーションをデザイン・開発する際、カラーパレットが肥大化し、最終的にどの色をどこに使うべきか分からなくなるという問題によく直面します。この問題を解決する強力なアプローチが、「セマンティックカラー(Semantic Colors)」の設計です。
セマンティックカラーとは、特定の色に「役割」や「意味」を持たせたカラー定義のことです。例えば、「エラー(危険)」「成功」「警告」「インフォメーション」といった意味を色に紐付けることで、UI全体の一貫性を保ち、ユーザーの認知負荷を減らすことができます。
セマンティックカラーが重要である理由
従来のWebデザインでは、「#E03131」などのカラーコードを直接CSSにハードコードしたり、「red-500」といった抽象的な色名トークンをデザインシステムで定義して使っていました。
しかし、このアプローチにはいくつかの問題があります。
- ダークモード対応の難しさ: ダークモードを導入する際、ハードコードされた赤色や青色は、暗い背景に対してコントラストが不足し、視認性が低下します。
- デザイン変更の伝播: ブランドカラーの青を微調整したい場合、UI全体で使われている青のうち、どこが「リンク」でどこが「プライマリボタン」なのかを識別して修正するのが困難になります。
- チーム間のミスコミュニケーション: デザイナーとエンジニアの間で、どのコンポーネントにどの色を適用するべきかの共通認識(コンテキスト)が失われやすくなります。
これらを解消するために、AppleのHuman Interface Guidelines や GoogleのMaterial 3 Color System では、セマンティックカラー(色の役割定義)による設計が標準的に取り入れられています。
セマンティックカラー定義の3ステップ
カラーシステムを構築する際は、カラーコードから直接セマンティックに紐付けるのではなく、「プリミティブ(ベース)」「セマンティック」「コンポーネント」の3層構造(階層型トークン)で設計するのがベストプラクティスです。
ステップ1:プリミティブカラーの定義
まずは、ブランドの基本色やグレースケールを純粋なカラーパレットとして定義します。ここでは色そのものの名前を使い、意味は持たせません。
blue-500:#1c7ed6red-500:#e03131green-500:#2b8a3egray-100:#f1f3f5
ステップ2:セマンティックカラーの定義
次に、プリミティブカラーを参照して、UIにおける「意味(役割)」を定義します。
color-primary:blue-500(主要なアクション)color-success:green-500(処理完了、成功)color-danger:red-500(エラー、危険なアクション)color-surface-bg:gray-100(カードなどの背景面)
ステップ3:コンポーネントカラーの定義(必要に応じて)
さらに特定のコンポーネントに特化したエイリアスを作成します。これにより、特定のコンポーネントのみ色を切り替える柔軟性が生まれます。
button-primary-bg:color-primarybadge-danger-text:color-danger
CSS変数(Custom Properties)を用いた実装
セマンティックカラーの実装には、ネイティブのCSS変数が最適です。ライトモードとダークモードの切り替えを、ルートセマンティクスの上書きだけでシンプルに管理できます。
:root {
/* プリミティブ(エイリアスとしてのベース定義) */
--blue-500: #1c7ed6;
--green-500: #2b8a3e;
--red-500: #e03131;
--gray-100: #f1f3f5;
--gray-900: #212529;
/* セマンティック */
--color-primary: var(--blue-500);
--color-success: var(--green-500);
--color-danger: var(--red-500);
--color-bg-main: #ffffff;
--color-text-main: var(--gray-900);
}
@media (prefers-color-scheme: dark) {
:root {
/* ダークモード用にセマンティックの参照先を変更 */
--color-primary: #3b5bdb; /* ダーク用に少し明度を調整した青 */
--color-bg-main: var(--gray-900);
--color-text-main: var(--gray-100);
}
}
このように、CSSカスタムプロパティを設計することで、HTMLのクラスを変更することなく、テーマに応じた自然な配色制御が可能になります。
意味を破綻させないための注意点
セマンティックカラーの運用で陥りがちな罠は、「役割の乱立」です。役割名が増えすぎると管理が煩雑になり、ルールが形骸化します。
最初は「primary, secondary, neutral, success, warning, danger, info」という最小限のセットから始めることをお勧めします。また、アクセシビリティ担保のために、デジタル庁のイラストレーション・カラーシステム でも示されているような、文字色と背景色のコントラスト比(最低4.5:1以上)をセマンティック定義の段階で検証・確定しておくことが極めて重要です。
美しく論理的なカラーシステムを構築し、デザインと開発の生産性を向上させましょう。
お役立ち情報
- Apple Human Interface Guidelines - Color Appleによるセマンティックカラーとシステムカラーパレットの実践的な設計指針(英語)。
- デジタル庁デザインシステム - カラー アクセシビリティ(WCAG 2.1)に配慮した配色設計とセマンティックな色定義の日本語による標準ガイドライン。
- Material 3 Color System GoogleのMaterial Design 3における、色の役割(Roles)に基づいた動的カラーパレット設計の解説。
出典: