コンテンツにスキップ

ADR-0024: トークンを、fukuemon.dev の値のプリミティブトークン、セマンティックトークン、テーマ変数の 3 つの層にし、生成りの地と旧サイトの差し色にする

Status

承認

Context

fukuemon.dev のデザインシステムのトークンの持ち方と、値の元を決める必要がある。

Decision

トークンを 3 つの層に分け、packages/ui/src/tokens/ に置く。値は fukuemon.dev が決める。
フォーカスの表示の判断は、ADR-0061 にある。

  • プリミティブトークンは、fukuemon.dev の値を持つ。
    • 地と罫と差し色は、旧サイトの packages/design-system/styles/tokens.css の値を使う。生成りの地、墨の文字、温かい灰の罫、くすんだ緑、藍、錆である。
    • 書体の太さ、文字の大きさ、行高は、DADS の @digital-go-jp/design-tokens 2.1.0 の値を使う。ファイルの冒頭に、出典の URL と MIT License の表示を残す。
      • コードを動かす画面の詰めたペインの、13px の等幅の行高だけは、DADS に無い値を使う。値は ADR-0062 が決める。
    • 名前は --fd-primitive- で始める。
  • セマンティックトークンは、役割の名前を --fd-color- で始め、プリミティブトークンを参照する。
  • テーマ変数は、Tailwind CSS の @theme inline に置き、Tailwind のデフォルトの色、文字の大きさ、角丸、影、ブレークポイントを消す。セマンティックトークンを通らない書き方を、画面のコードで書けなくするためである。
    • スタイリングは Tailwind CSS v4 のまま書く。
    • テーマ変数にないクラスと、任意の値のクラス(bg-[#fff] など)を、lint のエラーにする。テーマ変数にないクラスは CSS を出さないだけでビルドが通り、任意の値のクラスはテーマ変数を通らずに CSS を出すためである。
  • ライトとダークは、セマンティックトークンの参照先を @media (prefers-color-scheme: dark) で替えて作る。プリミティブトークンとテーマ変数のファイルは、テーマごとに分けない。
    • 画面とコンポーネントのコードに、テーマの条件を書かない。
    • どちらのテーマの組み合わせも、コントラストのチェックで確認する。
  • 差し色の役割は次のとおりにする。
    • くすんだ緑は、主の色と内部のリンクにする。訪問済みのリンクは、色で分けない。
    • 藍は、外部のリンクと情報にする。
    • 錆は、目次の現在地と注意にする。
    • エラーは赤、成功は緑の色相のまま、生成りの地の上で 4.5:1 以上になる値を選ぶ。

Considered Options

選択肢 強み 弱み
採用: 地と罫と差し色を旧サイトの値にする(案 A) 今のサイトの和の感じを、地、差し色、版面の全てで残せる 状態の色、コードの色、区別の色を、生成りの地に合わせて選び直す。DADS のコンポーネントの見た目から、角と影と入力欄の形が外れる
地と罫と差し色を旧サイトの値にし、角丸と影は DADS の値を使う(案 B) 角丸と影を DADS に合わせたまま、色で和の感じを出せる 角丸と影のある箱が、罫線で区切る旧サイトの版面と合わない
地と罫だけを旧サイトの値にし、差し色、角丸、影は DADS の値を使う(案 C) DADS から外れる値が最も少ない 差し色が DADS の緑と青のままで、和の感じが地にしか出ない
DADS の値をコピーして持つ DADS の色、文字、余白の考え方にそのまま沿う。buddy と同じ値になる 地が白、灰が冷たい色になり、和の感じが出ない
@digital-go-jp/design-tokens を依存のパッケージから読む DADS の修正をバージョンを上げて取り込める 使わない値も全て読む。fukuemon.dev の値を持てない
テーマごとにプリミティブトークンのファイルを分ける テーマごとの値を 1 つのファイルで読める 同じ階調を 2 回書く。コントラストのチェックの元が増える

Consequences

Positive

  • 画面のコードは、テーマを意識せずにテーマ変数のユーティリティだけを書ける。
  • 今のサイトの地、差し色、罫線の版面が、新しいコンポーネントにも出る。

Negative

  • ダークの組み合わせと、状態、コード、区別の色は、DADS の指針に頼れず、コントラストのチェックで確認する。
  • テーマ変数にないクラスと任意の値を見つける lint を持つ。テーマ変数を足したときは、lint が新しいクラスを受け付けることを確認する。