OpenSource-Hub

design.md

CLI ツール

google-labs-code/design.md

フォーマット仕様を使用してコーディングエージェントにビジュアルアイデンティティを説明します。

概要

YAML デザイントークンと Markdown の説明を組み合わせたデザインフォーマットを定義します。検証と差分比較を行うコマンドラインツールを提供し、コーディングエージェントがデザインシステムを永続的に理解できるようにします。

README プレビュー

# DESIGN.md\n\nA format specification for describing a visual identity to coding agents. DESIGN.md gives agents a persistent, structured understanding of a design system.\n\n## The Format\n\nA DESIGN.md file combines machine-readable design tokens (YAML front matter) with human-readable design rationale (markdown prose). Tokens give agents exact values. Prose tells them *why* those values exist and how to apply them.\n\n```md\n---\nname: Heritage\ncolors:\n  primary: "#1A1C1E"\n  secondary: "#6C7278"\n  tertiary: "#B8422E"\n  neutral: "#F7F5F2"\ntypography:\n  h1:\n    fontFamily: Public Sans\n    fontSize: 3rem\n  body-md:\n    fontFamily: Public Sans\n    fontSize: 1rem\n  label-caps:\n    fontFamily: Space Grotesk\n    fontSize: 0.75rem\nrounded:\n  sm: 4px\n  md: 8px\nspacing:\n  sm: 8px\n  md: 16px\n---\n\n## Overview\n\nArchitectural Minimalism meets Journalistic Gravitas. The UI evokes a\npremium matte finish — a high-end broadsheet or contemporary gallery.\n\n## Colors\n\nThe palette is rooted in high-contrast neutrals and a single accent color.\n\n- **Primary (#1A1C1E):** Deep ink for headlines and core text.\n- **Secondary (#6C7278):** Sophisticated slate for borders, captions, metadata.\n- **Tertiary (#B8422E):** "Boston Clay" — the sole driver for interaction.\n- **Neutral (#F7F5F2):** Warm limestone foundation, softer than pure white.\n```\n\nAn agent that reads this file will produce a UI with deep ink headlines in Public Sans, a warm limestone background, and Boston Clay call-to-action buttons.\n\n## Getting Started\n\nValidate a DESIGN.md against the spec, catch broken token references, check WCAG contrast ratios, and surface structural findings — all as structured JSON that agents can act on.\n\n```bash\nnpx @google/design.md lint DESIGN.md\n```\n\n```json\n{\n  "findings": [\n    {\n      "severity": "warning",\n      "path": "components.button-primary",\n      "message": "textColor (#ffffff) on backgroundColor (#1A1C1E) has contrast ratio 15.42:1 

FAQ (5)

トラブル対応
git diff --check が失敗する原因となる、@google/design.md の css-tailwind エクスポート内の余分な末尾改行はどのように修正すればよいですか?

@google/design.md@0.3.0 では、serializeTailwindV4() はすでに末尾に改行を1つ追加していますが、CLI は console.log() を使用しているため、さらにもう1つ追加されてしまいます。css-tailwind のエクスポート出力について、console.log(output) を process.stdout.write(output) に置き換えてエクスポーターを修正してください。修正を含むリリースが利用可能になるまでは、エクスポート後に生成ファイルを正規化してください:

./node_modules/.bin/designmd export --format css-tailwind DESIGN.md \
  | perl -0pe 's/\n+\z/\n/' > out.css

ファイルがちょうど1つの改行で終わっていることを確認してください:

python3 -c "from pathlib import Path; b=Path('out.css').read_bytes(); print(len(b)-len(b.rstrip(b'\\n')))"

期待される結果は 1 です。これにより、チェックインされた生成 CSS に対して git diff --check などの厳密な空白チェックが失敗するのを防げます。

参照 Issue #139
how_to
DESIGN.mdからデザイントークンをネイティブのCSSカスタムプロパティとしてエクスポートするにはどうすればよいですか?

css-vars エクスポート形式を使用します:

npx @google/design.md export --format css-vars DESIGN.md > design.tokens.css

これにより、CSS カスタムプロパティを含む :root ブロックが生成されます。例:

:root {
  --color-primary: #1A1C1E;
  --spacing-md: 16px;
}

すべての変数に名前空間プレフィックスを追加するには、--prefix を使用します:

npx @google/design.md export --format css-vars --prefix ds DESIGN.md > design.tokens.css

ダークテーマやメディアクエリのバリアントは初期実装には含まれていません。サポートは PR #109 で追加されました。

参照 Issue #15
informational
量子コンピューティングとは何か、簡単な言葉で説明してください。

通常のコンピューターは、1(オン)または0(オフ)のいずれかのビットを使用します。量子コンピューターは量子ビットを使用し、量子ビットは結果が測定されるまで重ね合わせと呼ばれる複合的な状態で存在することができます。これにより、量子コンピューターは特定の複雑な計算において多数の可能性を一度に探索することができますが、通常のコンピューターを単に高速化したものではありません。

参照 Issue #129
トラブル対応
@google/design.md lint を実行したときに "raw.match is not a function" エラーを修正するにはどうすればよいですか?

このクラッシュは、DESIGN.md 内の spacing 値が unit: 8 のような YAML の文字列以外の値である場合に、@google/design.md@0.2.0 で発生します。ランタイム型ガードの修正が含まれる v0.3.0 にアップグレードしてください。回避策として、すべての寸法値を引用符で囲んでください:

spacing:
  unit: "8"
  "1": "4px"

unit: 8 や引用符なしの unit: 8px ではなく、unit: "8px" を使用してください。

参照 Issue #106
トラブル対応
Color と Dimension の型定義を spec-config.yaml からデータ駆動にするにはどうすればよいですか?

v0.4.0 にアップグレードします。このバージョンでは、プリミティブ型は spec-config.yaml からレンダリングされます。変更を手動で適用する場合は、たとえば次のように types セクションを追加します:

types:
  Color:
    description: "A color value is any valid CSS color string."
    formats:
      - "Hex: #RGB, #RGBA, #RRGGBB, #RRGGBBAA"
      - "Named colors: red, cornflowerblue, transparent"
      - "Functional: rgb(), rgba(), hsl(), hsla(), hwb()"
      - "Wide-gamut: oklch(), oklab(), lch(), lab()"
      - "Mixing: color-mix(in srgb, ...)"
    note: "All color values are internally converted to sRGB for WCAG contrast checking."
  Dimension:
    description: "A dimension value is a string with a unit suffix."
    units: [px, em, rem]

次に、spec.mdx から静的な Color と Dimension の説明文を削除し、typography_properties のレンダリングと同じ方法で spec-config.yaml 内の types を反復処理するように spec ジェネレーターを更新します。spec-config と spec-generator のテストを実行して、出力を確認します。

参照 Issue #97