Skip to main content
ClaudeWave

人間にも、AIにも、読めるデザインシステム — AI-Ready Design System for Claude Code & Cursor

ToolsOfficial Registry201 stars21 forks● TypeScriptMITUpdated today
ClaudeWave Trust Score
100/100
✓ Verified
Passed
  • ✓Open-source license (MIT)
  • ✓Actively maintained (<30d)
  • ✓Healthy fork ratio
  • ✓Clear description
  • ✓Topics declared
  • ✓Documented (README)
Last scanned: 10/10/2026
Get started
Method: Clone
Terminal
git clone https://github.com/tsubotax/melta-ui
1. Clone the repository.
2. Follow the README for installation and usage instructions.
Use cases

Tools overview

<!-- sec: hero -->
# melta UI

[![Design System Check](https://github.com/tsubotax/melta-ui/actions/workflows/design-check.yml/badge.svg?branch=main)](https://github.com/tsubotax/melta-ui/actions/workflows/design-check.yml)

**AI 向けデザインガイドラインを、違反を止める実行可能な契約へ。**

> 🇬🇧 English: [README.en.md](./README.en.md) · Showcase: https://melta.tsubotax.com (ドキュメント・契約の正本はこのリポジトリ)

<!-- sec: lead -->
AI にガイドラインを読ませることはできる。守るかどうかは AI 任せになる。melta UI は、その「任せ」を機械に置き換える。生成の**前**(MCP で契約を参照させる)・**直後**(lint / hook が違反を突き返す)・**マージ前**(CI が止める)・**その後**(drift 検査がドキュメントと実装の腐りを検知し続ける)の 4 点で機械が関与する。読ませるだけでなく、守らせる。

**境界**: melta UI は完成済みの CSS コンポーネント集ではない。配るのは値(tokens)・規則(rules)・仕様(contracts)・検証器(lint / MCP)で、`import` して貼れば動く UI ライブラリではない。web の実装は HTML + Tailwind クラスの参照実装として同梱している。

<!-- sec: who -->
## 誰のためのものか

**向いている**

- AI コーディングエージェント(Claude Code / Cursor / Codex 等)で UI を生成・運用しているチーム
- 「ガイドラインは書いたのに守られない」を仕組みで潰したい個人・少人数チーム
- web と React Native で 1 つのデザイン契約を共有したいプロダクト

**向いていない**

- 完成済みの Web コンポーネント集(React コンポーネントを install してすぐ使いたい)が欲しい場合
- Tailwind / class ベース以外のスタイリング(CSS-in-JS の props 経由など)が主体で、スタイルがマークアップに現れない場合。静的 lint が効かない

<!-- sec: proof -->
## Proof — 主張には検証経路をつける

- **107 禁止ルールのうち 49 / 107 を静的に自動検出**。残りも「なぜ自動検出しないか」を `automationStatus` で分類・可視化する([rules.json](./design/contracts/rules.json) / 内訳は[制約と正直な範囲](#制約と正直な範囲))
- **Playwright + axe-core 372 tests** が CI 必須ゲート([.github/workflows/design-check.yml](./.github/workflows/design-check.yml) / [実行履歴](https://github.com/tsubotax/melta-ui/actions/workflows/design-check.yml))
- **5 種の代表的リセット CSS 環境で VRT 差分ピクセル 0**。pixelmatch の literal 比較で機械検証([tests/reset-vrt.spec.ts](./tests/reset-vrt.spec.ts)、`npm run test:reset-vrt`)
- **npm 3 パッケージ + MCP Registry で配布**([melta-contracts](https://www.npmjs.com/package/melta-contracts) / [melta-ds-mcp](https://www.npmjs.com/package/melta-ds-mcp) / [melta-app](https://www.npmjs.com/package/melta-app)、Registry ID `io.github.tsubotax/melta-ui`)
- **別リポジトリの React Native 実装が同じ契約を購読**し、契約の破壊的変更は APP 側が契約バージョンを取り込んだ時点で consumer テストが検出する([melta-app](https://github.com/tsubotax/melta-app) / npm 公開版との互換は `npm run design:compat` が publish 前に検査)
- **外部プロジェクトで「AI が違反を書く → 即検出 → 自己修正」ループを実測**(2026-08、非公開 RN アプリへ npm 経由で導入。[melta-app README の成熟度・メンテナンス節](https://github.com/tsubotax/melta-app/blob/main/README.md#成熟度メンテナンス))
- **drift 検査自身に負のテストがある**(わざと壊して発火することを固定:[tests/drift-heal.spec.ts](./tests/drift-heal.spec.ts))

<!-- sec: ships -->
## 配布物 — いま install できるもの

| パッケージ | 役割 | 使い方 |
|---|---|---|
| [`melta-contracts`](https://www.npmjs.com/package/melta-contracts) | **契約データ**(tokens / rules / component contracts / recipes の JSON)。ビルド不要・フレームワーク非依存 | `npm install melta-contracts` |
| [`melta-ds-mcp`](https://www.npmjs.com/package/melta-ds-mcp) | **MCP サーバー + lint エンジン**(このリポジトリ)。`check_html` は CI / hook と同一ロジック | `npx -y melta-ds-mcp` / `melta-ds-mcp/lint` |
| [`melta-app`](https://www.npmjs.com/package/melta-app) | **React Native 実装**。消費者プロジェクト向け eslint plugin を同梱 | `npm install melta-app` |

> `melta-ds-mcp` 自体の bare import(`import "melta-ds-mcp"`)は非サポート。entry は import しただけで stdio サーバーが起動する CLI なので、`npx melta-ds-mcp` か subpath 経由で使う。entry 規約・deep import 互換・パッケージ分割の予定は [docs/distribution.md](./docs/distribution.md)。

> **自分のデザインシステムで検査したい場合(BYO-DS)**: `melta-ds-mcp` は起動時に読み込むアセット root を自分の DS bundle へ切り替えられる(melta のルールとは混在しない)。4 ファイルの最小構成から始める手順と限界は [docs/distribution.md の BYO-DS 節](./docs/distribution.md#自分のデザインシステムを持ち込むbyo-ds)。

<!-- sec: requirements -->
## 前提条件・互換性

| 項目 | 値 |
|---|---|
| Node | 22 以上(CI は 22 で検証) |
| MCP クライアント | stdio MCP に対応したもの(Claude Code で検証。Cursor は同梱の `.cursor/mcp.json` をプロジェクト設定として読む(有効化は Cursor 側の操作に従う)。Codex は同じ stdio コマンドで登録) |
| スタイリング | **Tailwind CSS の class ベース前提**。静的 lint は class 属性 / HTML 属性 / DOM 構造を読む |
| 生成物の表示 | プロトタイプは Tailwind CDN + `DESIGN.md` の `tailwind.config`、プロダクションは `foundations/theme.md` の v4 `@theme` |
| JSX / Vue | class 属性と HTML 属性の lint は効く。**composition lint(ネスト構造・a11y DOM)は HTML のみ**。JSX の変数経由 class・spread は静的には追えない |
| ライセンス | MIT |

<!-- sec: quickstart -->
## 5 分クイックスタート

### 経路 A — npm(MCP サーバー、推奨)

clone せずに、契約参照と自己検証だけを既存プロジェクトへ足す経路。

```bash
claude mcp add melta-ui -- npx -y melta-ds-mcp
claude mcp list
```

**成功判定** — `claude mcp list` にこの行が出る:

```text
melta-ui: npx -y melta-ds-mcp - ✔ Connected
```

接続時に MCP `instructions` が渡るので、「melta は完成 CSS ライブラリではない」「先に `melta://design-constitution` を読む」「生成後は `check_html` で自己検証する」を利用側が毎回プロンプトに書く必要はない。あとは UI を指示するだけ:

> ユーザー一覧のテーブルを作って

**成功判定** — AI が生成 HTML を `check_html` に通し、この形の応答を得る(違反があれば修正して再検証する):

```jsonc
{
  "passed": false,
  "errorCount": 2,
  "warnCount": 0,
  "violations": [
    { "ruleId": "AI_NO_CARD_COLOR_BAR_TOP", "severity": "error", "token": "border-t-4",
      "reason": "AI生成UIの典型パターン。装飾過剰で汎用性が低い",
      "alternative": "border border-slate-200 のみでカードを構成" },
    { "ruleId": "COLOR_NO_BLUE_BG", "severity": "error", "token": "bg-blue-500",
      "reason": "primaryで統一する", "alternative": "bg-primary-*" }
  ],
  "coverage": { "automated": "...", "notAutomated": "..." }
}
```

生成された HTML を**ブラウザで表示する**には Tailwind と melta のトークン設定が要る。プロトタイプなら CDN でよい:

```html
<script src="https://cdn.tailwindcss.com"></script>
<script>
  // DESIGN.md「Quick Reference → HTML テンプレート」の tailwind.config をそのまま貼る。
  // fontSize は 8 段すべて Tailwind デフォルトと異なる(本文 18px / 行間 2.0 が melta の核)。
</script>
```

### 経路 B — clone(フルハーネス)

hook / CI / lint CLI まで含めた強制層が要る場合。`npm install` した消費者にはこの 3 層は届かない([制約と正直な範囲](#制約と正直な範囲))。

```bash
git clone https://github.com/tsubotax/melta-ui.git
cd melta-ui && npm install
printf '<div class="text-black shadow-2xl">x</div>' > /tmp/melta-bad.html
npm run design:lint-generated -- /tmp/melta-bad.html
```

`npm install` で有効になるもの: `.mcp.json`(Claude Code へ MCP 自動接続)/ `.cursor/mcp.json`(Cursor 向けに同じ MCP サーバーの設定を同梱。有効化は Cursor 側の操作に従う。作業指示は `AGENTS.md` を読ませ、`.cursor/rules/melta-ui.mdc` は所在ポインタだけを置く)/ `.claude/settings.json` の PostToolUse hook / lint CLI。

**成功判定 1** — 違反ファイルに lint CLI をかけると exit 1 で落ちる:

```text
  ✗ [error] COLOR_NO_TEXT_BLACK: "text-black" → text-slate-900(純黒はコントラストが強すぎて長時間の利用で目が疲れる)
  ✗ [error] SPACE_NO_SHADOW_2XL: "shadow-2xl" → shadow-sm 〜 shadow-md(オーバーレイ: shadow-xl)(影が強すぎてノイズになる)

1 ファイル走査 / error 2 / warn 0
❌ FAILED
```

**成功判定 2** — Claude Code が `.html` / `.tsx` / `.jsx` / `.vue` を Write / Edit した直後、hook がこの JSON を返して修正ループに乗せる(warn のみなら `additionalContext` で助言注入):

```json
{"decision":"block","reason":"melta UI 禁止パターン検出(error 2 / warn 0)。書き込まれたファイルを修正してください: ..."}
```

<!-- sec: how -->
## 仕組み — 契約・参照・検証・監視の 4 層

```
① 契約(SSOT)        design/contracts/
                        tokens.json      101 デザイントークン
                        rules.json       107 禁止ルール(ID + severity + detector + alternative)
                        components/      40 contract(web 28 / app 先行 12)
                        recipes/         プラットフォーム具象(web: 生成ミラー / app: RN styleRefs)
                      DESIGN.md / AGENTS.md   AI が最初に読む憲法と作業ガイド

② 参照(生成の前)     MCP サーバー(melta-ds-mcp)
                        必要な仕様・値・ルールだけをオンデマンドで渡す

③ 検証(生成の直後〜マージ前)
                      PostToolUse hook   Write/Edit 直後に lint → error は block で自動修正
                      lint CLI / CI      .github/workflows/design-check.yml
                      MCP check_html     CI と同一ロジックの自己検証

④ 監視(その後)       design:drift       ドキュメント ↔ contracts の腐りを検知
                      design:compat      npm 公開版との破壊的変更 × semver 検査
                      design:drift-heal  drift を検出して derived のみ再生成(SSOT は human gate)
```

MCP が公開するツール:

| ツール | 説明 | 入力例 |
|--------|------|--------|
| `get_token` | トークン検索 | `{ "path": "color.primary.600" }` |
| `get_component` | コンポーネント仕様取得(variants / sizes / stateSpecs / anatomy / a11y) | `{ "id": "button" }` |
| `check_rule` | クラス文字列の禁止パターン検査(34パターン自動検出)。文脈依存は conditional 付き | `{ "classes": "text-black shadow-2xl" }` |
| `check_html` | 生成 HTML / JSX 全体を CI / hook と同一ロジックで lint | `{ "source": "<div class=...>" }` |
| `get_rules` | 107 禁止ルール参照(manual 含む全件、filter 対応) | `{ "category": "accessibility" }` |
| `search` | 全文検索(最大 20 件 + truncated 通知) | `{ "query": "card" }` |

Resource は `melta://design-constitution`(`DESIGN.md` 全文)/ `melta://tokens` / `melta://components` / `melta://components/{id}` / `melta://rules` / `melta://rules/auto-detectable`。

web の実装対象は 28 コンポーネント + 13 ファウンデーション + 5 パターン。設計原則は Content First / WCAG 2.1 AA / Semantic Color / 3-Color Rule / 4px Grid / Minimal Elevation / No AI-ish Decoration の 7 つ([DESIGN.md](./DESIGN.md))。

<!-- sec: platforms -->
## Web と APP — 1 つの契約が両方に降りる

同じ契約パッケージ([`melta-contracts`](https://www.npmjs.com/package/melta-contracts))を web(このリポジトリ / HTML + Tailwind)と APP([melta-app](https://github.com/tsubotax/melta-app) / React Native)の両実装が購読する。トークンを各実装にコピーして持つ経路は存在しない(二重化の物理防止)。

契約は**規範と具象の 2 層**。規範(`components/*.contract.json`)は variant の語彙・states・tokenRefs・a11y で、全プラットフォーム共通。分岐が正当な箇所(hover→pressed、elevation の表現差、タッチターゲット 44pt 等)は `platformSemantics` で意味論だけを宣言する。具象(`recipes/`)は web が契約の Tailwind からの導出ミラー(鮮度を CI が担保)、app が RN の styleRefs(色は 100% token 参照)を手書きする authoring source。

守らせる仕組みも双方向:

- **web 側 → 互換ゲート**(`npm run design:compat`): npm 公開版と HEAD の golden diff。token 削除・variant 削除・rule の意味変更を breaking 分類し、semver bump を機械強制する
- **APP 側 → consumer テスト**: melta-app の CI が「契約 subset・token 実在・contractVersion 同期」を照合する。web 側が契約を壊すと APP のテストが赤くなる

melta-app は消費者プロジェクト向けの eslint plugin も npm で配っており、**使う側のコード**で生値の直書きが止まる。RN カタログの live showcase は https://app.melta.tsubotax.com。

<!-- sec: limits -->
## 制約と正直な範囲

**49 / 107 の意味**。「107 禁止ルールを強制する」とは言えない。静的に自動検出できるのは 49 件で、残りは検証経路を `automationStatus` で分類して可視化している(宣言だけのルールをゼロにするための棚卸し)。

<!-- BEGIN:coverage (npm run design:coverage で再生成) -->
| 経路 | 件数 | 内容 |
|------|------|------|
| 静的自動検証 | **49 / 107** | class マッチ 34(MCP `check_rule` 同経路)+ html-attr 7 + composition 8(ネスト + a11y DOM) |
| interaction test | 3 | `tests/modal.spec.ts` が focus trap / Escape / focus 復帰を実機検証 |
| 静的検出 不能 | 3(うち error 3) | `impossible-static`(active/selected/current の特定が意味依存) |
| LLM 審査候補 | 43(うち err
ai-readyclaude-codecursordesign-systemjapanesetailwindcssui-components

What people ask about melta-ui

What is tsubotax/melta-ui?

+

tsubotax/melta-ui is tools for the Claude AI ecosystem. 人間にも、AIにも、読めるデザインシステム — AI-Ready Design System for Claude Code & Cursor It has 201 GitHub stars and its last recorded update is dated 2026-10-09.

How do I install melta-ui?

+

You can install melta-ui by cloning the repository (https://github.com/tsubotax/melta-ui) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is tsubotax/melta-ui safe to use?

+

Our security agent has analyzed tsubotax/melta-ui and assigned a Trust Score of 100/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.

Who maintains tsubotax/melta-ui?

+

tsubotax/melta-ui is maintained by tsubotax. The last recorded GitHub activity is dated 2026-10-09, with 1 open issues.

Are there alternatives to melta-ui?

+

Yes. On ClaudeWave you can browse similar tools at /categories/tools, sorted by popularity or recent activity.

Deploy melta-ui to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: tsubotax/melta-ui
[![Featured on ClaudeWave](https://claudewave.com/api/badge/tsubotax-melta-ui)](https://claudewave.com/repo/tsubotax-melta-ui)
<a href="https://claudewave.com/repo/tsubotax-melta-ui"><img src="https://claudewave.com/api/badge/tsubotax-melta-ui" alt="Featured on ClaudeWave: tsubotax/melta-ui" width="320" height="64" /></a>

More Tools

melta-ui alternatives