0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code の /design-sync で claude.ai/design のデザインシステムを CLI から操作してみた

0
Last updated at Posted at 2026-06-22

この記事の要点(2026年6月): Anthropic 公式の Claude Code スキル /design-sync を使い、ローカルの HTML コンポーネント4本(Button・Card・Input・Badge)を claude.ai/design のデザインシステムプロジェクトへアップロードした。アップロードは「finalize_plan → write_files → register_assets」の3ステップで行い、@dsCard マーカーを HTML に埋め込むだけではカードが表示されないというハマりポイントがあった。最終的には Claude Design の UI 生成チャットがデザインシステムのファイルを自動で読み込み、コンポーネントを組み合わせた日本語記事一覧ページを生成するところまで確認できた。


/design-sync スキルとは何か

/design-sync は Anthropic が提供する Claude Code の公式スキル(スラッシュコマンド)で、内部では DesignSync という MCP ツールが動いている。claude.ai/design(Claude のデザイン生成サービス)のデザインシステムプロジェクトと、ローカルの HTML コンポーネントファイルを同期する機能を提供する。Claude Code がインストールされていれば追加設定なしで利用できる(Pro・Max・Team・Enterprise プランが必要)。

Claude Design では通常、チャット欄に「ボタンを作って」と入力すれば Claude がゼロからUIを生成する。しかし /design-sync を使うと、あらかじめ自分が定義したコンポーネント(スタイルや構造が決まった HTML)をデザインシステムとして登録しておき、その後の UI 生成でそれらを素材として使わせることができる。

「既存コンポーネントを守りながら、ページ全体を Claude に組んでもらう」という使い方が主なユースケースになる。


操作の全体フロー

今回の作業は以下の順序で進めた。

1. プロジェクト作成(create_project)
2. HTML コンポーネントの準備(@dsCard マーカー付きファイルを4本作成)
3. アップロード:finalize_plan → write_files → register_assets
4. claude.ai/design でデザインシステムを確認
5. UI 生成チャットでコンポーネントを活用したページを作成

1番のプロジェクト作成は以下のように呼ぶ。

DesignSync(method: "create_project",
  name: "UI Sandbox")
→ projectId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" が返る

手順は一見シンプルだが、3番のアップロードに3ステップが必要な点と、著者の実機試行では register_assets を省略するとカードが表示されなかった点が落とし穴になる。詳しくは後述する。


コンポーネント HTML の作り方

コンポーネントファイルは通常の HTML で書く。ただし先頭行に @dsCard マーカーコメントを入れる必要がある。

<!-- @dsCard group="Components" -->
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Button</title>
</head>
<body>
  <button class="btn-primary">Primary</button>
  <button class="btn-secondary">Secondary</button>
</body>
</html>

group="Components" の部分はデザインシステムパネルでのグループ分けに使われる。今回は Button・Card・Input・Badge の4ファイルを tmp/ds-sandbox/components/ 以下に作成した。

tmp/ds-sandbox/components/button/index.html
tmp/ds-sandbox/components/card/index.html
tmp/ds-sandbox/components/input/index.html
tmp/ds-sandbox/components/badge/index.html

各ファイルの先頭行に <!-- @dsCard group="Components" --> を入れた。


アップロード3ステップの解説

HTML ファイルを用意したら、次はアップロードだ。ここが最も重要なポイントで、3つの MCP メソッドを順番に呼ぶ必要がある

ステップ1: finalize_plan

DesignSync(method: "finalize_plan",
  writes: ["button/index.html", "card/index.html",
           "input/index.html", "badge/index.html"],
  deletes: [],
  localDir: "tmp/ds-sandbox/components")
→ planId: "plan-xxxxxxxx" が返る

このメソッドは「これからこのファイルを書き込む」という宣言をサービス側に送り、planId を取得する。localDir にはコンポーネントファイルが入っているローカルディレクトリを指定する。

ステップ2: write_files

DesignSync(method: "write_files",
  planId: "plan-xxxxxxxx",
  files: [
    {path: "button/index.html", content: "<!-- @dsCard ... -->..."},
    ...
  ])

finalize_plan で取得した planId を使い、実際にファイルの内容をアップロードする。

ステップ3: register_assets

DesignSync(method: "register_assets",
  planId: "plan-xxxxxxxx")

アップロードしたファイルをデザインシステムパネルに「カード」として明示的に登録する。著者の実機試行では、このステップを踏まないとファイルはサーバーに存在するもののパネル上に表示されなかった。


ハマりポイント:register_assets が必要だった理由

今回最も時間を取られたのがこの点だ。

@dsCard マーカーをファイルに入れてアップロードした後、claude.ai/design のデザインシステム画面を確認したところ、カードが一切表示されなかった。DesignSync の仕様説明では「HTML 先頭行の @dsCard コメントからカードインデックスを自動構築する」とされているが、私の実機試行では自動認識が機能しなかった。

register_assets メソッドを呼ぶことで、アップロード済みのファイルを明示的にカードとして登録できた。このメソッドは仕様上「レガシー(legacy): register preview cards explicitly」と位置づけられており、@dsCard による自動認識が正式な方法のようだ。ただし著者の環境では自動認識が動作せず、register_assets の明示的な呼び出しが必要だった。

仕様の記載と実機挙動が一致しなかったケースとして記録しておく。同様の現象が起きた場合は register_assets を試してほしい。@dsCard 自動認識がどの条件で機能するかは現時点では未確認だ。


デザインシステムの確認

register_assets 完了後に claude.ai/design/p/{projectId} を開くと、「Review draft design system」画面に4つのカードが並んだ。

デザインシステム画面(Badge コンポーネントカード表示。Semantic/Solid/With Dot/Sizes が並んでいる)

Badge コンポーネントのカードを開くと、Semantic・Solid・With Dot・Sizes といったバリエーションが自動でプレビュー表示されていた。HTML 内の CSS クラス構造やセクションラベルをパースして各状態を検出しているものと推測される(詳細な仕組みは非公開)。

デザインシステム「Brand」セクション(Badge/Button/Card/Input の4コンポーネントが一覧)

「Brand」セクションでは4コンポーネントすべてが一覧表示された。ここまで来れば、次の UI 生成で素材として使える状態だ。


Claude Design での UI 生成デモ

デザインシステムが登録できたら、いよいよ UI 生成を試す。「New design」ボタンで新規デザインを開くと、チャット欄の下に「UI Sandbox ×」というコンテキストバッジが自動で付いていた。プロジェクト名が自動的にコンテキストとして添付される仕様だ。

以下のプロンプトを入力した。

Article list page using Card, Badge, Button, and Input (search) 
from the UI Sandbox design system.

Claude は応答前に、デザインシステムのファイルを読み込む処理を行った(「Listing files ×2, Reading ×4」というツール呼び出しが画面に表示された)。その後:

Got everything I need. Building an article list page that combines all four components with working search/filter.

と応答し、生成が開始された。

Claude Design が生成した記事一覧ページ(「記事一覧」タイトル、検索バー、カテゴリフィルター、カード9枚)

生成されたページは日本語の記事一覧ページだった。「記事一覧」タイトル、検索バー(Input コンポーネント)、カテゴリフィルターの Badge、記事カード(Card コンポーネント)が9件、右上に「+ 新しい記事」の Primary Button。登録した4コンポーネントが組み合わされたレイアウトが出力された。

プロンプトは英語で書いたが、生成物はラベルやサンプルデータが日本語になっている点は興味深い。登録したコンポーネント HTML に日本語のサンプルテキストが含まれており、Claude がそこから言語を判断したと推測される(確認はしていない)。


/design-sync で確認できたこと・できなかったこと

CLI からデザインシステムを操作して分かったことを整理する。

動いたこと:

  • プロジェクト作成・コンポーネントアップロード・カード登録まで MCP 経由で完結できた
  • 登録したコンポーネントを Claude Design の UI 生成チャットが自動で参照した
  • 4コンポーネントを組み合わせたページが1プロンプトで生成された

ハマったこと / 注意点:

  • @dsCard マーカーだけではカードが表示されない。register_assets の明示的な呼び出しが必要だった
  • アップロードは finalize_plan → write_files → register_assets の3ステップ必須。どれか1つを省くと機能しない

未確認・試していないこと:

  • register_assets が「レガシー」とされている背景(将来廃止の予定があるかどうか)
  • Web UI からのアップロードで @dsCard 自動認識が機能するかどうか
  • コンポーネントの更新(既存カードへの上書き)の挙動

「コンポーネントを事前に登録 → Claude が素材として使う」という流れは、デザインの一貫性を保ちながら AI に新しいページを作らせる用途に向いている。ただし現時点では @dsCard 自動認識と register_assets の関係など、仕様と実機挙動に乖離が見られる部分があるため、試す際は本記事のハマりポイントを参考にしてほしい。


DesignSync のように「ローカルファイル → AI サービスのコンテキスト」という連携を MCP で組み上げると、次の問いが出てくる——自分のプロジェクト全体で、どの情報をどのエージェントに渡すか、どう設計すればいいか。

そうした「エージェントチームに情報を渡す設計」を体系化したのが Zenn Books シリーズだ。Vol.1「作るまで」では Claude Code でエージェントを動かし始める最初のステップを、Vol.4「仕組みを渡すまで」では権限管理・情報設計・ガバナンスの組み方を扱っている。


この記事は はてなブログ からのクロスポストです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?