@google/design.md

コーディングエージェント向けにビジュアル ID を記述する DESIGN.md フォーマットと、その検証・差分・エクスポートを行う CLI(npm: @google/design.md)。

1 — 概要

DESIGN.md は、ブランドの見た目・雰囲気・振る舞いをプレーンテキストで記述するオープンフォーマット。YAML フロントマターに機械可読なデザイントークン、Markdown 本文に人間(とエージェント)向けの設計意図を書く。同梱 CLI が構造検証・WCAG コントラスト・トークン参照の解決・Tailwind / DTCG への変換を JSON 出力で返す。

alpha フォーマット版
4 CLI サブコマンド
9 Lint ルール
3 export 形式

lint diff export spec Tailwind v3/v4 DTCG WCAG AA

Awesome DESIGN.md との違い: google-labs-code/design.md はフォーマット仕様とリンター本体。Awesome DESIGN.md は既存サービスから抽出した DESIGN.md ファイルのキュレーション集。
2 — ファイル構造

1 ファイルにトークン(規範値)と散文(適用文脈)を同居させる。トークンは正確な値、散文は「なぜその値か」「どこに使うか」をエージェントへ伝える。

YAML front matter

先頭 --- で囲んだトークン群。colors / typography / rounded / spacing / components など。参照は {colors.primary} 形式。

Markdown body

## 見出しで区切った散文セクション。Overview → Colors → Typography → … の順序が推奨。未知のセクションは保持され、エラーにならない。

flowchart TB
  subgraph file["DESIGN.md"]
    FM["YAML front matter\n(name, colors, typography, components…)"]
    MD["Markdown body\n(Overview, Colors, Do's and Don'ts…)"]
  end
  FM -->|"規範値"| Agent["コーディングエージェント"]
  MD -->|"意図・制約"| Agent
  Agent --> UI["一貫した UI 生成"]
        

最小スキーマ

---
name: Heritage
colors:
  primary: "#1A1C1E"
  tertiary: "#B8422E"
typography:
  h1:
    fontFamily: Public Sans
    fontSize: 3rem
components:
  button-primary:
    backgroundColor: "{colors.tertiary}"
    textColor: "{colors.on-tertiary}"
---

## Overview
Architectural Minimalism meets Journalistic Gravitas…

## Colors
- **Primary (#1A1C1E):** Deep ink for headlines…

セクション順(存在する場合)

#セクション別名
1OverviewBrand & Style
2Colors—
3Typography—
4LayoutLayout & Spacing
5Elevation & DepthElevation
6Shapes—
7Components—
8Do's and Don'ts—
拡張: motion や iconography など仕様外キーも受理される。リンターは既知スキーマキーの typo のみ警告し、カスタム拡張は黙認する。
3 — 設計思想

PHILOSOPHY.md の中心命題: 生成品質は値の精度より、意図の記述の明確さで決まる。トークンは散文の参照用コンテキストであり、レンダリング命令ではない。

  • →具体参照 > 形容詞: 「1970 年代の大学院配布資料」は「モダンでクリーンで信頼感」より情報量が大きい。参照が点を、形容詞が領域を示す。
  • →否定制約: 参照が具体なら「グラデーション禁止」等は暗黙に伝わる。Do's and Don'ts は意図的な補強として併用する。
  • →ユーザー主導の成長: 仕様は colors / typography 等の最小集合を標準化し、motion 等は各チームが prose + 任意 YAML で拡張する。

モノレポ(Bun + Turbo)。packages/cli が @google/design.md 本体。examples/ に Atmospheric Glass・Paws and Paths・Totality Festival など実例 DESIGN.md と design_tokens.json が同梱される。

4 — CLI
npm install @google/design.md

# 検証(JSON 出力、エラー時 exit 1)
npx @google/design.md lint DESIGN.md

# 2 版のトークン差分
npx @google/design.md diff DESIGN.md DESIGN-v2.md

# Tailwind / DTCG へエクスポート
npx @google/design.md export --format css-tailwind DESIGN.md > theme.css

# 仕様本文をプロンプトへ注入
npx @google/design.md spec --rules
Windows: design.md バイナリ名が .md ファイル関連付けと衝突する場合がある。npx -p @google/design.md designmd lint DESIGN.md または package.json scripts で designmd エイリアスを使う。

サブコマンド一覧

コマンド役割終了コード
lint構造・参照・コントラスト・セクション順を検査。findings + summary を JSON 出力error ありで 1
diff2 ファイル間のトークン added / removed / modified と prose 回帰フラグ回帰ありで 1
exportjson-tailwind / css-tailwind / dtcg へ変換—
specフォーマット仕様(--rules で Lint 表付き)を stdout へ—

プログラム API

import { lint } from '@google/design.md/linter';

const report = lint(markdownString);
// report.findings, report.summary, report.designSystem
flowchart LR
  MD["DESIGN.md"] --> Parse["parser"]
  Parse --> Lint["lint / 9 rules"]
  Parse --> Export["export"]
  Lint --> JSON["structured JSON"]
  Export --> TW["Tailwind v3/v4"]
  Export --> DTCG["tokens.json (DTCG)"]
        
5 — Lint ルール
ルール重大度内容
broken-referror{colors.primary} 等の参照が未定義トークンを指す
missing-primarywarningcolors があるのに primary が無い
contrast-ratiowarningcomponent の backgroundColor / textColor が WCAG AA 未満(4.5:1)
orphaned-tokenswarning定義された color がどの component からも参照されない
missing-typographywarningcolors のみで typography が無い
section-orderwarningMarkdown セクションが canonical 順序から外れている
unknown-keywarning既知 YAML キーの typo(例: colours:)
token-summaryinfoセクション別トークン数のサマリ
missing-sectionsinfospacing / rounded 等の推奨セクション欠落

lint 出力例

{
  "findings": [
    {
      "severity": "warning",
      "path": "components.button-primary",
      "message": "textColor (#ffffff) on backgroundColor (#1A1C1E) has contrast ratio 15.42:1 — passes WCAG AA."
    }
  ],
  "summary": { "errors": 0, "warnings": 1, "info": 1 }
}
6 — エクスポート

トークン体系は W3C Design Tokens Format を参考に設計。CLI が既存ツールチェーンへ橋渡しする。

--format出力用途
json-tailwind / tailwindJSONTailwind v3 theme.extend
css-tailwindCSS @theme { … }Tailwind v4 の CSS 変数(--color-*, --font-* 等)
dtcgJSONW3C DTCG tokens.json(Figma variables 等と相互変換しやすい)