DESIGN.md 仕様

DESIGN.md フォーマットの正式仕様 — トークンスキーマ、セクション構造、型システム。

DESIGN.md ファイルには 2 つのレイヤーがあります。YAML front matter には、エージェントが一貫性を保つために使う正確な値、すなわち機械可読なデザイントークンが含まれます。markdown 本文は、## セクションに整理された、人間が読めるデザインの根拠を提供します。文章では、体系的なトークン名(例:primary)に対応する説明的なカラー名(例:「Midnight Forest Green」)を使ってもかまいません。規範となる値はトークンであり、文章はそれらをどのように適用するかの文脈を提供します。

この仕様は処方箋ではなく土台です。エージェント、ツール、チームが依拠できる共通の基盤を提供しつつ、ドメイン固有のニーズに合わせてフォーマットを拡張する自由を保ちます。

デザイントークン

DESIGN.md は、ファイルの先頭に YAML front matter としてデザイントークンを埋め込みます。front matter ブロックは、--- のみを含む行で始まり、--- のみを含む行で終わる必要があります。この区切り文字の間にある YAML コンテンツは、以下で定義するスキーマに従います。

トークンシステムは W3C Design Token Format に着想を得ています。トークンは tokens.json、Figma 変数、Tailwind テーマ設定との間で簡単に相互変換できます。

---
version: alpha
name: Daylight Prestige
colors:
  primary: "#1A1C1E"
  secondary: "#6C7278"
  tertiary: "#B8422E"
typography:
  h1:
    fontFamily: Public Sans
    fontSize: 48px
    fontWeight: 600
    lineHeight: 1.1
    letterSpacing: -0.02em
rounded:
  sm: 4px
  md: 8px
spacing:
  sm: 8px
  md: 16px
components:
  button-primary:
    backgroundColor: "{colors.primary-60}"
    textColor: "{colors.primary-20}"
    rounded: "{rounded.md}"
    padding: 12px
---

スキーマ

version: <string>          # optional, current version: "alpha"
name: <string>
description: <string>      # optional
colors:
  <token-name>: <Color>
typography:
  <token-name>: <Typography>
rounded:
  <scale-level>: <Dimension>
spacing:
  <scale-level>: <Dimension | number>
components:
  <component-name>:
    <token-name>: <string | token reference>

<scale-level> プレースホルダーは、サイズまたは余白のスケールにおける名前付きレベルを表します。一般的なレベル名には xs、sm、md、lg、xl、full があります。説明的な文字列キーであれば、どのようなものでも有効です。

トークンの種類

種類フォーマット例
カラー# + hex コード(sRGB)"#1A1C1E"
ディメンション数値 + 単位(px、em、rem)48px, -0.02em
トークン参照{path.to.token}{colors.primary}
タイポグラフィ複合オブジェクト以下のプロパティを参照

タイポグラフィのプロパティ

プロパティ型説明
fontFamilystringフォントファミリー名
fontSizeDimensionフォントサイズ
fontWeightnumber数値のウェイト(例:400、700)。YAML では、裸の数値と引用符付き文字列は同等です
lineHeightDimensionnumber
letterSpacingDimension字間の調整
fontFeaturestringfont-feature-settings を設定します
fontVariationstringfont-variation-settings を設定します

トークン参照

トークン参照は波括弧で囲まれ、YAML ツリー内の別の値へのオブジェクトパスを含みます。ほとんどのトークングループでは、参照はグループではなくプリミティブ値(例:{colors.primary-60})を指す必要があります。components セクション内では、複合値(例:{typography.label-md})への参照が許可されます。

components:
  button-primary:
    backgroundColor: "{colors.primary-60}"
    textColor: "{colors.primary-20}"
    rounded: "{rounded.md}"

セクション

すべての DESIGN.md は同じ構造に従います。プロジェクトに関係のないセクションは省略できますが、存在するセクションは以下に示す順序で並べる必要があります。すべてのセクションは ## 見出しを使用します。文書タイトル用に任意の # 見出しを置いてもかまいませんが、セクションとして解析されません。

セクション構造は意図的に開かれています。標準セクションは共通の語彙を提供し、デザインシステムはそれらに加えてドメイン固有のセクションを自由に追加できます。

セクションの順序

#セクション別名
1概要ブランドとスタイル
2カラー
3タイポグラフィ
4レイアウトレイアウトと余白
5エレベーションと奥行きエレベーション
6シェイプ
7コンポーネント
8すべきことと避けること

概要

「Brand & Style」とも呼ばれます。プロダクトの見た目と印象を包括的に説明するセクションです。ブランドのパーソナリティ、ターゲットオーディエンス、UI が呼び起こすべき感情的な反応を定義します。特定のルールやトークンが定義されていない場合の基盤となる文脈として機能します。

## Overview
A calm, professional interface for a healthcare scheduling platform.
Accessibility-first design with high contrast and generous touch targets.

カラー

デザインシステムのカラーパレットを定義します。少なくとも primary パレットを定義する必要があります。追加のパレットには自由に名前を付けられます。一般的な慣例は primary、secondary、tertiary、neutral です。

## Colors

The palette is rooted in high-contrast neutrals and a single accent color.

- **Primary (#1A1C1E):** Deep ink for headlines and core text.
- **Secondary (#6C7278):** Sophisticated slate for borders, captions, metadata.
- **Tertiary (#B8422E):** The sole driver for interaction.
- **Neutral (#F7F5F2):** Warm limestone foundation.

デザイントークン: トークン名を hex 値にマッピングする map<string, Color> です。

colors:
  primary: "#1A1C1E"
  secondary: "#6C7278"
  tertiary: "#B8422E"
  neutral: "#F7F5F2"

タイポグラフィ

タイポグラフィのレベルを定義します。ほとんどのデザインシステムには 9〜15 のレベルがあり、それぞれに意味的な役割(見出し、本文、ラベル)とサイズのバリエーション(小、中、大)があります。

## Typography

- **Headlines:** Public Sans Semi-Bold for an institutional voice.
- **Body:** Public Sans Regular at 16px for long-form readability.
- **Labels:** Space Grotesk for technical data and metadata.

デザイントークン: トークン名をタイポグラフィプロパティにマッピングする map<string, Typography> です。

typography:
  h1:
    fontFamily: Public Sans
    fontSize: 48px
    fontWeight: 600
    lineHeight: 1.1
    letterSpacing: -0.02em
  body-md:
    fontFamily: Public Sans
    fontSize: 16px
    fontWeight: 400
    lineHeight: 1.6
  label-caps:
    fontFamily: Space Grotesk
    fontSize: 12px
    fontWeight: 500
    lineHeight: 1
    letterSpacing: 0.1em

レイアウト

「Layout & Spacing」とも呼ばれます。レイアウトと余白の戦略(グリッドモデル、余白スケール、コンテインメントの原則)を説明します。

## Layout

The layout follows a Fluid Grid model for mobile and a Fixed-Max-Width
Grid for desktop (max 1200px). A strict 8px spacing scale is used.

デザイントークン: 余白スケールの識別子をディメンションまたは単位なしの数値(例:列数や比率)にマッピングする map<string, Dimension | number> です。

spacing:
  base: 16px
  xs: 4px
  sm: 8px
  md: 16px
  lg: 32px
  xl: 64px
  gutter: 24px
  margin: 32px

エレベーションと奥行き

「Elevation」とも呼ばれます。視覚的な階層がどのように伝えられるかを説明します。影を使うデザインでは影のプロパティを定義します。フラットなデザインでは、代替手段(ボーダー、色調レイヤー、カラーコントラスト)を説明します。

## Elevation & Depth

Depth is achieved through tonal layers rather than heavy shadows.
Background uses a soft off-white; primary content sits on pure white cards.

シェイプ

視覚要素の形(コーナー半径、エッジの処理、全体的な形状言語)を説明します。

## Shapes

All interactive elements use a minimal 4px corner radius.
Modern enough to feel current, rigid enough to feel engineered.

デザイントークン: スケールレベルをコーナー半径にマッピングする map<string, Dimension> です。

rounded:
  sm: 4px
  md: 8px
  lg: 12px
  full: 9999px

コンポーネント

コンポーネントを構成する基本要素のスタイルガイドです。仕様では一般的なコンポーネントの種類(ボタン、チップ、リスト、入力欄、チェックボックス、ラジオボタン、ツールチップ)を定義していますが、デザインシステムはドメインに関連する追加コンポーネントを定義することが推奨されます。

## Components
- **Buttons**: Rounded (8px), primary uses brand blue fill, secondary uses outline
- **Inputs**: 1px border, surface-variant background, 12px padding
- **Cards**: No elevation, 1px outline border, 12px corner radius

デザイントークン: コンポーネント識別子をサブトークンプロパティのグループにマッピングする map<string, map<string, string>> です。トークンの値は、リテラル値または既に定義されたトークンへの参照にできます。

バリアント。 コンポーネントは、異なる UI 状態(hover、active、pressed)のバリアントを持てます。バリアントは、関連するキー名を持つ別個のコンポーネントエントリとして定義します。

components:
  button-primary:
    backgroundColor: "{colors.primary-60}"
    textColor: "{colors.primary-20}"
    rounded: "{rounded.md}"
    padding: 12px
  button-primary-hover:
    backgroundColor: "{colors.primary-70}"

コンポーネントプロパティトークン

プロパティ型
backgroundColorColor
textColorColor
typographyTypography
roundedDimension
paddingDimension
sizeDimension
heightDimension
widthDimension

すべきことと避けること

実践的なガイドラインとよくある落とし穴です。生成時のガードレールとして機能します。

## Do's and Don'ts

- Do use the primary color only for the single most important action per screen
- Don't mix rounded and sharp corners in the same view
- Do maintain WCAG AA contrast ratios (4.5:1 for normal text)
- Don't use more than two font weights on a single screen

未知のコンテンツに対する利用側の動作

この仕様は拡張できるように設計されています。利用側がこの仕様で定義されていないコンテンツに遭遇した場合:

シナリオ動作例
未知のセクション見出し保持する。エラーにしない## Iconography
未知のカラートークン名値が有効であれば受け入れるsurface-container-high: '#ede7dd'
未知のタイポグラフィトークン名有効なタイポグラフィとして受け入れるtelemetry-data
未知の余白値受け入れる。有効なディメンションでない場合は文字列として保存grid-columns: '5'
未知のコンポーネントプロパティ警告付きで受け入れるborderColor
重複したセクション見出しエラー。ファイルを拒否する## Colors 見出しが 2 つ

推奨トークン名

次の名前は、さまざまなデザインシステムでよく使われています。必須ではありませんが、一貫性のための指針として提供されています。

カラー: primary、secondary、tertiary、neutral、surface、on-surface、error

タイポグラフィ: headline-display、headline-lg、headline-md、body-lg、body-md、body-sm、label-lg、label-md、label-sm

角丸: none、sm、md、lg、xl、full

原文: https://stitch.withgoogle.com/docs/design-md/specification/

本ページは Google Stitch 公式ドキュメントの翻訳です。原文の著作権は Google LLC に帰属します。本サイトは独立した非公式の翻訳です。