") top/contain no-repeat}.external-link:visited:after{background-color:#3f0071}main{font:400 1rem/2.08rem f-sans,sans-serif;margin:0 auto;padding:24px 0 64px;width:calc(min(100%,840px) - 32px)}main h1{font:400 1.82rem/3.12rem f-sans,sans-serif}main h2{font:400 1.56rem/2.08rem f-sans,sans-serif}main h3{font:400 1.43rem/1.56rem f-sans,sans-serif}main h4{font:400 1.3rem/1.56rem f-sans,sans-serif}main h5{font:400 1.17rem/1.56rem f-sans,sans-serif}main h6{font:400 1rem/1.56rem f-sans,sans-serif}main h1:not(:first-child),main h2:not(:first-child),main h3:not(:first-child),main h4:not(:first-child),main h5:not(:first-child),main h6:not(:first-child){margin-top:24px}main p{text-align:justify}main ol,main ul{padding-left:24px}main ol{list-style:decimal}main ul{list-style:disc}main strong{font-weight:700}main h1,main h2,main h3,main h4,main h5,main h6,main p,main ul,main ol,main img,main pre{margin-bottom:16px}main img{display:block;max-width:100%;height:auto;margin:0 auto}main table{border-collapse:collapse;margin:16px auto}main table td,main table th{border:0;padding:2px 8px}main table tr:first-child th{border-top:2px solid #74796c;border-bottom:1px solid #74796c}main table tr:last-child td{border-bottom:2px solid #74796c}main hr{width:100%}main blockquote{margin:0;padding:0 0 0 12px;border-left:2px solid #74796c}main code{font-family:f-mono,f-sans,monospace}main pre{outline:1px solid #74796c;border-radius:2px}main pre code{display:block;width:fit-content;padding:12px}main details summary{cursor:pointer;list-style:none;width:fit-content;border-radius:2px}main details summary:before{content:"";display:inline-block;margin-right:.25em;width:1em;height:1em;vertical-align:-7.5%;background-color:#1a1d16;mask:url("data:image/svg+xml;utf8,") center/contain no-repeat}@media (hover: hover){main details summary:hover{color:#0001b4;outline:1px dashed}main details summary:hover:before{background-color:#0001b4}}main details summary:active{color:#0001b4;text-decoration:none;outline:1px solid}main details summary:active:before{background-color:#0001b4}main details[open] summary:before{mask:url("data:image/svg+xml;utf8,") center/contain no-repeat}main .footnotes{padding-top:32px}main .footnote{overflow:hidden;width:100%;height:0px;border:none;border-bottom:1px solid #74796c}main sup a{font-weight:700;text-decoration:none;border-radius:2px}main sup a:visited{color:#0001b4}@media (hover: hover){main sup a:hover{text-decoration:none;outline:1px dashed}}main sup a:active{text-decoration:none;outline:1px solid}main .data-footnote-backref{font-weight:700;text-decoration:none;border-radius:2px}main .data-footnote-backref:visited{color:#0001b4}@media (hover: hover){main .data-footnote-backref:hover{outline:1px dashed}}main .data-footnote-backref:active{outline:1px solid}main .footnotes p{margin:0 0 8px}.aa--l-pm{margin-left:-.5em}.aa--r-pm{margin-right:-.5em}.aa--m-pm{margin:0 -.25em}.aa--jw-aki:after{font-size:57.5862068966%;vertical-align:top;content:" "}.aa--lr-pm-aki:after{font-size:172.4137931034%;vertical-align:top;content:" "}.aa--m-pm-aki:after{font-size:86.2068965517%;vertical-align:top;content:" "}.aa--d-pm-aki:after{font-size:344.8275862069%;vertical-align:top;content:" "}math{font-family:"Fira Math",f-sans,sans-serif;font-style:normal;font-weight:400;line-height:normal;font-size-adjust:none;text-indent:0;text-transform:none;letter-spacing:normal;word-wrap:normal;direction:ltr;font-feature-settings:"dtls" off;display:inline-flex;flex-wrap:wrap;align-items:baseline}math .tml-display{display:block}math *{border-color:currentColor}mo.prime-pad{padding-left:.08em}menclose{-webkit-print-color-adjust:exact;print-color-adjust:exact}.tml-right{text-align:right}.tml-left{text-align:left}@supports (not (-webkit-backdrop-filter: blur(1px))) and (not (-moz-appearance: none)){menclose{position:relative;padding:.5ex 0ex}.tml-overline{padding:.1em 0 0;border-top:.065em solid}.tml-underline{padding:0 0 .1em;border-bottom:.065em solid}.tml-cancel{display:inline-block;position:absolute;left:.5px;bottom:0;width:100%;height:100%;background-color:currentColor}.upstrike{clip-path:polygon(.05em 100%,0em calc(100% - .05em),calc(100% - .05em) 0em,100% .05em)}.downstrike{clip-path:polygon(0em .05em,.05em 0em,100% calc(100% - .05em),calc(100% - .05em) 100%)}.sout{clip-path:polygon(0em calc(55% + .0333em),0em calc(55% - .0333em),100% calc(55% - .0333em),100% calc(55% + .0333em))}.tml-xcancel{background:linear-gradient(to top left,#0000 0% calc(50% - .06em),#000 50%,#0000 calc(50% + .06em) 100%),linear-gradient(to top right,#0000 0% calc(50% - .06em),#000 50%,#0000 calc(50% + .06em) 100%)}.longdiv-top{border-top:.067em solid;padding:.1em .2em .2em .433em}.longdiv-arc{position:absolute;top:0;bottom:.1em;left:-.4em;width:.7em;border:.067em solid;transform:translateY(-.067em);border-radius:70%;clip-path:inset(0 0 0 .4em);box-sizing:border-box}.menclose{display:inline-block;text-align:left;position:relative}.phasor-bottom{border-bottom:.067em solid;padding:.2em .2em .1em .6em}.phasor-angle{display:inline-block;position:absolute;left:.5px;bottom:-.04em;height:100%;aspect-ratio:.5;background-color:currentColor;clip-path:polygon(.05em 100%,0em calc(100% - .05em),calc(100% - .05em) 0em,100% .05em)}.tml-box{padding:3pt 0;border:1px solid}.tml-fbox{padding:3pt;border:1px solid}.circle-pad{padding:.267em}.textcircle{position:absolute;inset:0;border:.067em solid;border-radius:50%}.actuarial{padding:.03889em .03889em 0;border-width:.08em .08em 0em 0em;border-style:solid;margin-right:.03889em}.tml-crooked-2{transform:scale(2,1.1)}.tml-crooked-3{transform:scale(3,1.3)}.tml-crooked-4{transform:scale(4,1.4)}.tml-right{text-align:-webkit-right}.tml-left{text-align:-webkit-left}}@supports (-webkit-backdrop-filter: blur(1px)){.tml-xshift{transform:translateY(.45em)}.tml-capshift{transform:translateY(.35em)}}math>mrow{padding:.5ex 0ex}mtable.tml-jot mtd{padding-top:.7ex;padding-bottom:.7ex}mtable.tml-small mtd{padding-top:.35ex;padding-bottom:.35ex}@-moz-document url-prefix(){math{display:inline}math>mrow{padding:0}mtd,mtable.tml-small mtd{padding-top:0;padding-bottom:0}mtable.tml-jot mtd{padding-top:.2ex;padding-bottom:0ex}}.tml-eqn:before{counter-increment:tmlEqnNo;content:"(" counter(tmlEqnNo) ")"}body{counter-reset:tmlEqnNo}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2]{display:flex;align-items:baseline;margin:0 auto;padding:24px 0 18px;width:calc(min(100%,840px) - 32px)}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{color:inherit;text-decoration:none;border-radius:2px}@media (hover: hover){header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]:hover{color:#0001b4;outline:1px dashed}}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]:active{color:#0001b4;outline:1px solid}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] .title[data-astro-cid-3ef6ksr2]{font:500 1rem/1.56rem f-sans,sans-serif;margin-bottom:6px}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2]{font:500 .91rem/1.56rem f-sans,sans-serif;margin-left:auto}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] ul[data-astro-cid-3ef6ksr2]{display:flex}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] ul[data-astro-cid-3ef6ksr2] li[data-astro-cid-3ef6ksr2]:not(:first-child){margin-left:12px}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] ul[data-astro-cid-3ef6ksr2] .nav-item[data-astro-cid-3ef6ksr2]{display:inline}@media (hover: hover){header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] ul[data-astro-cid-3ef6ksr2] .nav-item[data-astro-cid-3ef6ksr2]:hover{color:#0001b4;outline:1px dashed}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] ul[data-astro-cid-3ef6ksr2] .nav-item[data-astro-cid-3ef6ksr2]:hover:before{background-color:#0001b4}}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] ul[data-astro-cid-3ef6ksr2] .nav-item[data-astro-cid-3ef6ksr2]:active{color:#0001b4;outline:1px solid}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] ul[data-astro-cid-3ef6ksr2] .nav-item[data-astro-cid-3ef6ksr2]:active:before{background-color:#0001b4}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] ul[data-astro-cid-3ef6ksr2] .posts[data-astro-cid-3ef6ksr2]:before{content:"";display:inline-block;margin-right:.25em;width:1em;height:1em;vertical-align:-7.5%;background-color:#1a1d16;mask:url("data:image/svg+xml;utf8,") center/contain no-repeat}header[data-astro-cid-3ef6ksr2] .header-content[data-astro-cid-3ef6ksr2] nav[data-astro-cid-3ef6ksr2] ul[data-astro-cid-3ef6ksr2] .tags[data-astro-cid-3ef6ksr2]:before{content:"";display:inline-block;margin-right:.25em;width:1em;height:1em;vertical-align:-7.5%;background-color:#1a1d16;mask:url("data:image/svg+xml;utf8,") center/contain no-repeat}footer[data-astro-cid-sz7xmlte]{position:sticky;top:100lvh}footer[data-astro-cid-sz7xmlte] .footer-content[data-astro-cid-sz7xmlte]{display:flex;margin:0 auto;padding:8px 0 24px;width:calc(min(100%,840px) - 32px)}footer[data-astro-cid-sz7xmlte] .footer-content[data-astro-cid-sz7xmlte] .copyright[data-astro-cid-sz7xmlte]{font:500 .91rem/1.56rem f-sans,sans-serif;margin-right:12px}footer[data-astro-cid-sz7xmlte] .footer-content[data-astro-cid-sz7xmlte] .nav[data-astro-cid-sz7xmlte]{font:500 .91rem/1.56rem f-sans,sans-serif;margin-left:auto}footer[data-astro-cid-sz7xmlte] .footer-content[data-astro-cid-sz7xmlte] .nav[data-astro-cid-sz7xmlte] li[data-astro-cid-sz7xmlte]:not(:first-child){margin-top:8px}footer[data-astro-cid-sz7xmlte] .footer-content[data-astro-cid-sz7xmlte] .nav[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{text-decoration:none}@media (hover: hover){footer[data-astro-cid-sz7xmlte] .footer-content[data-astro-cid-sz7xmlte] .nav[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{text-decoration:underline 8%}}footer[data-astro-cid-sz7xmlte] .footer-content[data-astro-cid-sz7xmlte] .nav[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:active{text-decoration:underline 8%}
.date[data-astro-cid-egg7nqdx]{font:400 .91rem/1.56rem f-sans,sans-serif;color:#44483e;display:flex;margin-top:4px}.date[data-astro-cid-egg7nqdx] .updated[data-astro-cid-egg7nqdx]{margin-left:12px}.date[data-astro-cid-egg7nqdx] .space[data-astro-cid-egg7nqdx]{margin-left:4px}.tags[data-astro-cid-egg7nqdx]{font:400 .91rem/1.56rem f-sans,sans-serif;margin:2px -8px 32px 0}.tags[data-astro-cid-egg7nqdx] .tag[data-astro-cid-egg7nqdx]{display:inline-block;margin-right:8px;color:#44483e;text-decoration:none;border-radius:2px}@media (hover: hover){.tags[data-astro-cid-egg7nqdx] .tag[data-astro-cid-egg7nqdx]:hover{color:#0001b4;outline:1px dashed}}.tags[data-astro-cid-egg7nqdx] .tag[data-astro-cid-egg7nqdx]:active{color:#0001b4;outline:1px solid}
デザインシステムにおけるカラーコンポーネントの比較 | Daiji256デザインシステムにおけるカラーコンポーネントの比較
はじめに
デザインシステム1における色について説明します。色はデザインシステムのほんの1要素にすぎませんが、コンポーネントやガイドラインなど広範囲に影響を与える重要な要素です。ここでは、いくつかのデザインシステムを紹介した後、色の定義・参照方法を比較しまとめます。
本記事では、色の定義・参照方法に焦点を当て、デザインシステム全体や色彩学、ブランディングなどの詳細には触れません。また、比較を容易にするためにデザインシステムの詳細については省略します。
デザインシステムの紹介
Material DesignはGoogleが開発したデザインシステムで、汎用的でアクセシビリティに配慮した特徴があります。Googleが開発することもあり、とくにAndroidでよく採用されています。
Material Designではキーとなる色からカラーパレットを作成し、Surface、On Surface、Primaryなどのロールを定義します。これらのロールはUIのどのマテリアル・オブジェクトで利用するかを意識して定義されています。
ロール | パレット | 値 |
---|
primary | primary40 | #6750A4 |
on-primary | primary100 | #FFFFFF |
surface | neutral98 | #FEF7FF |
on-surface | neutral10 | #1D1B20 |
Carbon Design SystemはIBM Design Languageを実装したシステムです。Web向けのライブラリの提供が豊富です。
Carbon Design Systemではカラーパレットを作成し、ui-background、active-primary、text-01のようなロールを定義します。これらのロールは、どのUIコンポーネントに利用するかを意識して定義されています。
ロール | パレット | 値 |
---|
ui-background | White | #FFFFFF |
active-primary | Blue 80 | #002D9C |
hover-primary | Blue 60 hover | #0353E9 |
text-01 | Gray 100 | #161616 |
AcornはFirefoxというブラウザで利用されるデザインシステムです。
Acornでは “コンポーネントトークン → … → カラートークン → 値” といったコンポーネントトークンがコンポーネントトークンを参照する構造で定義されています。これにより、少ない労力でコンポーネントトークンを増やすことが可能です。
- background-color-box → color-white →
#FFFFFF
- button-background-color-primary → color-accent-primary → color-blue-50 →
#0060DF
- button-background-color-primary-hover → color-accent-primary-hover → color-blue-60 →
#0250BB
- button-text-color → color-gray-100 →
#15141A
- button-text-color-hover → button-text-color → color-gray-100 →
#15141A
デジタル庁デザインシステムは、デジタル庁をはじめとした官公庁や地方自治体などの行政機関での利用を想定した構築されたデザインシステムです。サービスの使い勝手や情報の探しやすさ、アクセシビリティ等の向上に力を入れています。
パレットを定義し、UIコンポーネントからパレットを参照します。ごく一部だけ、Success-1のようなセマンティックを定義し、それをUIコンポーネントから参照します。
セマンティック | パレット | 値 |
---|
| White | #FFFFFF |
| Blue-600 | #3460FB |
Success-1 | Green-600 | #259D63 |
Error-1 | Red-800 | #EC0000 |
SmartHR Design SystemはSmartHRという労務ソフトで利用されるデザインシステムです。
頻繁に利用する色についてはセマンティックトークンが定義され、それ以外の場合はプリミティブトークンを参照します。
セマンティックトークン | プリミティブトークン | 値 |
---|
MAIN | BLUE_100 | #0077C7 |
DANGER | RED_100 | #E01E5A |
TEXT_BLACK | GREY_100 | #23221E |
| GREY_5 | #F8F7F6 |
| GREY_6 | #F5F4F3 |
Human Interface GuidelinesはAppleが定めたデザインガイドラインです。iOSなどのApple製品で利用されるため、GoogleのMaterial Designと比較されることが多いです。
アプリ内でシステムカラー値をハードコーディングすることは避け、動的システムカラーを意図通りに使用することが推奨しています。これにより、プラットフォームの外観が変わった際にも一貫した体験を提供します。
SpindleはAmebaのためのデザインシステムで、Ameba関連のサービスで末永く効率よく運用されることを目指しています。
Surface Primary — On Surface Accent Primaryのようにコントラスト比を意識した色の組み合わせや、Cautionなどの部分的に利用する色を定義しています。
UIカラー | プリミティブカラー | 値 |
---|
Surface Primary | White 100 | #FFFFFF |
On Surface High Emphasis | Gray 100 | #08121A |
On Surface Accent Primary | Primary Green 80 | #237B31 |
Caution | Caution Red 100 | #D91C0B |
定義方法の比較・まとめ
デザインシステムはUIのあるアプリケーションと共に発展してきました。そのため、20年程度の歴史しかなく、日々開拓されています。紹介したデザインシステムからも察せられるように、多種多様な概念があり、色の定義方法も異なります。何か1つがベストというわけではなく、デザインの対象や思想などにより最終的な形が異なるのです。
紹介したデザインシステムは共通して、UIコンポーネントが直接色を指定・参照するわけではなく、色を参照するための何かを参照しています。これは、サービス全体で色を統一するためにはカラーコンポーネントが必要だからです。
デジタル庁デザインシステムのようにパレット(プリミティブ)を参照するタイプと、Material Designのようにロール(セマンティック、UIカラー)を参照するタイプがありました。ロールは、Carbon Design SystemのようにどのUIコンポーネントに使うかを定義するタイプと、Material DesignのようにUIのどのマテリアル・オブジェクトに使うかを定義するタイプがありました。
タイプの分類
便宜上、以下のように分類します。
- パレットタイプ:
UIからBlue 10のようなパレットを参照する
デジタル庁デザインシステムβ版、SmartHR Design Systemなど
- 弱いロールタイプ:
UIからPrimary Containerのようなロールを参照する
Material Design、Spindleなど
- 強いロールタイプ:
UIからButton Backgroundのようなロールを参照する
Carbon Design System、Acornなど
各タイプの特徴
- パレットタイプ:
UIコンポーネントの追加・変更時にカラーコンポーネントを変更する必要がないため、UIコンポーネントが自由に色を選択できます。しかし、コントラスト比の担保やUIコンポーネントの色の変更が困難です。
- 弱いロールタイプ:
コントラスト比の担保や役割を明確に分けることができ、カラーコンポーネントの追加が少ないです。しかし、UIコンポーネントが利用できる色の自由度が少なく、ロールの定義を慎重に行う必要があります。
- 強いロールタイプ:
UIコンポーネントが何を参照すればよいか明確です。しかし、UIコンポーネントを追加・変更するたびにカラーコンポーネントに変更を加える可能性が高く、項目数が増えてしまいます。
感想
多様なデザインシステムを調査した結果、弱いロール > パレット > 強いロールの順で多い印象を受けました。カラーコンポーネントにある程度の役割を持たせつつ、メンテナンスコストを考慮すると、この順が妥当と感じました。
色とは何か、印刷などディスプレイ以外の対応、色空間、ブランディングなど、色には考えるべきことが無数にあります。色の管理・参照方法だけでこれだけ奥が深いことを実感しました。
文献
- Material Design
- Carbon Design System
- Acorn
- デジタル庁デザインシステムβ版
- SmartHR Design System
- Human Interface Guidelines
- Spindle