🎨

Claude Code に UI 実装を頼むと、初回の差分はかなり速く出ます。ですが、実務で困るのは「それっぽい画面」は作れるのに、余白、情報密度、レスポンシブ、hover 状態、空状態、エラー表示、アクセシビリティのどこかが抜けることです。デザインを丸投げすると、見た目の近さだけで完了扱いになり、あとから人間が細部を直す作業が残ります。

この記事は、Claude Code で UI デザイン実装を進めたいが、毎回の見た目チェックと手戻りを減らしたい人向けです。Figma からの完全自動変換ではなく、既存プロダクトの文脈を読み、スクリーンショットと期待状態を渡し、ブラウザで確認しながら仕上げる実務ワークフローとして整理します。

Claude Code 全体の導入順は Claude Code の使い方 実践ガイド、ルールの固定は CLAUDE.md の書き方と育て方、強制チェックは Claude Code Hooks の使い方 実践ガイド を先に読むとつながります。UI 実装を単発プロンプトではなく再現可能な作業系にしたいなら、Harness Engineering 入門 も補助線になります。

先に結論: UI実装は「画像を渡す」だけでは足りない

Claude Code 公式 docs では、視覚的な作業では期待する UI のスクリーンショットを渡し、実装と比較させる使い方が紹介されています。Desktop でも画像やデザイン mockup を添付でき、preview や visual diff review と組み合わせやすくなっています。

ただし、私の実感ではスクリーンショットだけでは足りません。Claude Code は画像を読めますが、画像だけでは次の情報が欠けます。

  • どの状態を最優先で合わせるか
  • どの余白やタイポグラフィを既存デザインから継承するか
  • どの viewport で崩れてはいけないか
  • hover / focus / loading / empty / error をどこまで作るか
  • 実装後に何をもって合格とするか

つまり、UI 実装で渡すべきものは「画像」ではなく、参照画像、期待状態、検証方法、変更範囲の4点です。

私が使う依頼テンプレート

最初の依頼は長くて構いません。むしろ短すぎると、Claude Code が勝手にスコープを広げます。

この画面の [対象コンポーネント名] を改善したい。

目的:
- 一覧画面で情報を素早く比較できるようにする
- 既存の色・余白・角丸・フォントサイズは src/styles/global.css を優先する

入力:
- 参照スクリーンショット: 添付画像
- 実装対象: src/components/ProjectCard.astro
- 表示確認: /blog または /projects

期待状態:
- desktop では3カラム、tablet では2カラム、mobile では1カラム
- title は2行まで、長い場合はカード高さを壊さない
- hover は影を強めるだけで、位置は動かさない
- empty state と loading state は今回は作らない

検証:
- pnpm run build
- 可能なら Playwright かブラウザで 1440px / 768px / 390px のスクリーンショットを確認
- 変更後に、見た目で自信がない点を箇条書きで報告

ポイントは「かっこよくして」ではなく、比較できる、崩れない、既存ルールに寄せるのように評価軸を先に渡すことです。

ワークフローは4段階に分ける

UI 実装を一回の依頼で終わらせようとすると、だいたい荒れます。私は次の4段階に分けます。

1. 既存UIを読ませる

最初にコードだけでなく、既存のページ構造とスタイル変数を読ませます。

実装前に src/styles/global.css、対象ページ、関連コンポーネントを読み、
このサイトのUIルールを10項目以内で要約して。
まだ編集しないで。

ここで編集を止めるのが重要です。Claude Code はすぐ実装に入りたがりますが、UI は既存文脈を外すと一気に安っぽくなります。色、余白、border radius、カードの情報密度、見出しサイズを先に要約させるだけで、初回差分のズレが減ります。

2. 期待状態を固定する

次に、何を作るかを決めます。ここで「全状態を作って」と言うと過剰実装になりやすいので、必要な状態だけに絞ります。

今回作る状態は normal / hover / mobile の3つだけ。
loading / error / empty は既存コンポーネントに存在しないため追加しない。

業務ツールなら dense なテーブル、SaaS の設定画面なら情報の読み取りやすさ、ブログなら本文導線というように、画面の目的で判断基準を変えます。Claude Code に UI を任せるときほど、目的語を「画面」ではなく「利用者の作業」に寄せた方が安定します。

3. 実装後にブラウザで確認する

Claude Code 公式 docs は、テストケースや期待出力を渡すと自己検証しやすいと説明しています。UI でも同じです。pnpm run build だけでは、見た目の破綻は拾えません。

Playwright を使える環境なら、最低でも viewport を切って確認します。

import { test, expect } from "@playwright/test";

test("blog cards do not overflow on mobile", async ({ page }) => {
  await page.setViewportSize({ width: 390, height: 844 });
  await page.goto("/blog");
  await expect(page.getByRole("main")).toBeVisible();
  await expect(page.locator(".blog-card").first()).toBeVisible();
});

Playwright 公式 docs は web-first assertions や trace viewer を推奨しています。UI 変更では、スクリーンショットだけでなく「主要要素が見える」「テキストが溢れない」「操作対象が存在する」のような DOM ベースの確認も混ぜると、見た目だけの合格を避けられます。

4. 不安点を自己申告させる

最後に、Claude Code に「完了しました」だけを言わせないようにします。

実装後、次の形式で報告して。

- 変更したUI意図
- 確認したviewport
- 自信がない箇所
- 人間が見るべき差分

UI は主観が残ります。だからこそ、Claude Code に「自信がない箇所」を出させるとレビュー効率が上がります。特に spacing、折り返し、画像 crop、contrast は自己申告させた方がよいです。

CLAUDE.md に書くべきUIルール

毎回プロンプトに書くと漏れるルールは、CLAUDE.md に短く固定します。ただし、全部は書きません。Claude がコードから読める情報は残さず、判断に使うルールだけを置きます。

## UI implementation

- Prefer existing CSS variables and component patterns before adding new colors or spacing scales.
- For UI changes, verify desktop and mobile layouts before reporting completion.
- Do not add decorative gradients, oversized hero sections, or nested cards to operational pages.
- When text may be long, preserve layout with wrapping, min/max widths, or line clamping.

ここで「美しくする」「モダンにする」のような曖昧な言葉を入れてはいけません。曖昧な形容詞は、余計な装飾を呼びます。UI ルールは、禁止する崩れ方優先する既存パターンだけに絞る方が効きます。

Hooks に寄せるべきチェック

文章で守らせるより、機械的に確認できるものは Hooks や npm scripts に逃がします。

  • format
  • typecheck
  • build
  • Playwright の主要 smoke test
  • スクリーンショット保存
  • forbidden file の編集禁止

たとえば UI 変更後に必ず build を走らせたいなら、CLAUDE.md に長く書くより、既存の作業ルールや Hook に寄せた方が確実です。Hooks の考え方は Claude Code Hooks の使い方 実践ガイド で詳しく書きましたが、UI 実装でも本質は同じです。忘れると困る処理は、お願いではなく仕組みにする

Claude Code に任せてよいUI、任せないUI

私なら、次のように分けます。

任せやすい人間が先に設計すべき
既存コンポーネントの整理新規プロダクトの情報設計
カード、一覧、設定画面の改善ブランドの第一印象を決めるトップヒーロー
レスポンシブ崩れの修正複雑なグラフィックや独自アニメーション
フォームの状態追加価格体系や権限モデルを含む画面設計
Playwright で再現できる不具合事業上の優先順位が絡む UX 判断

Claude Code は既存ルールに寄せる作業が強いです。逆に、まだルールがない画面で「いい感じにして」と頼むと、見た目の方向性を勝手に作ります。最初のデザインシステムや情報設計は人間が責任を持ち、Claude Code にはその制約内で実装・検証・微修正を回させる方が堅いです。

実務でよくある失敗

スクリーンショットだけで期待状態を書かない

画像は完成形の一瞬しか表しません。レスポンシブ、長文、空データ、権限差分、hover は画像に出ません。スクリーンショットを渡すなら、必ず「この画像で合わせたいのは何か」を書きます。

1回で全画面を直そうとする

UI は差分が広がるほどレビューが難しくなります。カード、ヘッダー、フィルター、詳細ページを一気に頼むより、1つの画面の1つの役割に絞った方が品質が上がります。

見た目確認を build 成功で代替する

build は構文や型の確認であって、UI の確認ではありません。文字がボタンからはみ出しても、カードが不自然に伸びても、build は通ります。UI 変更では、少なくとも desktop / mobile の表示確認を別に置くべきです。

装飾を増やして品質が上がったと錯覚する

Claude Code に「もっとリッチに」と言うと、影、グラデーション、大きなカード、不要なアニメーションが増えやすいです。業務画面や技術ブログでは、装飾より情報密度と可読性の方が重要です。必要なのは派手さではなく、利用者が迷わず読めることです。

まとめ

Claude Code で UI デザイン実装を進めるなら、コツは「画像を読ませること」ではありません。Claude Code が自分で正誤を判断できる状態を作ることです。

  • 既存 UI ルールを先に読ませる
  • 参照スクリーンショットと期待状態を分けて渡す
  • desktop / mobile の確認を検証手順に入れる
  • 不安点を自己申告させる
  • 繰り返すルールは CLAUDE.md と Hooks に固定する

この流れにすると、Claude Code は単なる UI 生成ツールではなく、実装、確認、修正を回す UI ワークフローの一部になります。最初に仕組みを作る手間はありますが、毎回の「なんとなく違う」を減らせるので、結果的に人間のレビュー時間も短くなります。

参考情報

WRITTEN BY nidoneko

Full-stack engineer with 8+ years of experience in TypeScript, React, Node.js, and cloud-native development across healthcare, finance, HR, and IoT domains.

View Profile →