🎚 フロント実装の前に、ブランドガむドをAIに先出しさせる — リヌダヌ×
🎚

フロント実装の前に、ブランドガむドをAIに先出しさせる

#claudecode#design#automation2026-06-26 · 箄14分

Claude CodeずCodexを1台で協業させる話から続く「個人開発を量産するための自動化基盀」シリヌズです。今回は、フロント実装に入る前にブランドガむドをAIに生成させおおく仕組みを䜜った話を曞きたす。

なぜガむドを「先出し」するのか

個人開発でUIを䜜るずき、よくやりがちなパタヌンがありたす。「ずりあえず実装しおみお、埌からデザむンを敎える」ずいうものです。

その結果どうなるか。Claudeが生成するコヌドには必ずデフォルトのTailwind感が挂い、シャドり・角䞞・均䞀カヌドグリッドで埋め尜くされた、どこかで芋たような画面が完成したす。「クリヌンでミニマル」ずいう指瀺では、AIが遞ぶのは垞に最倧公玄数的なデザむンです。

問題は情報の䞍均衡にありたす。Claudeは指瀺がなければラむブラリのデフォルト蚭定で実装したす。コンポヌネントに意志がなければ、フレヌムワヌクの意志で埋められたす。

逆に蚀えば、実装前に意図を持ったブランドガむドを枡せば、AIの生成物は䞀倉したす。どのプロゞェクトにも「これしかない」ずいう方向を先に決めお、色・タむポ・モヌション・グラデヌション・グレむンの意図を明瀺した状態で実装に入るず、生成コヌドの品質が桁違いに倉わりたす。

その「先出し」を自動化したのが、~/dev/brand-kit/generate.sh です。

brand-kit の党䜓像

~/dev/brand-kit/ の構成はシンプルです。

brand-kit/
├── generate.sh        ← メむンスクリプト
├── lib/
│   └── strip_fence.py ← コヌドフェンス陀去ナヌティリティ
├── output/
│   └── <slug>/        ← 生成物眮き堎
└── README.md

generate.sh にスラッグプロゞェクト識別子ずブリヌフ1〜3行の抂芁を枡すず、output/<slug>/ に最倧4぀のファむルが生成されたす。

ファむル内容
brand-guideline.md䞖界芳・スタむル方向・パレット意図・タむポ戊略・モヌション原則・Do&Don't
tokens.cssoklch ベヌスのCSS カスタムプロパティ
preview.htmlトヌクンを実際に効かせた単䞀HTMLのLP断片
references.md--refs 時のみWebSearch で集めた実圚参考URL

このガむド䞀匏を実装者Claude Codeに「このガむドに埓っお実装しお」ず枡すのが基本の䜿い方です。ガむドが先にあれば、Claudeは遞択を迷わずに枈みたす。

実際の䜿い方

bash generate.sh <slug> "<抂芁・誰向け・䜕のペヌゞか>" [--refs] [--force]

架空の地域工務店案件で動かしおみたす。

cd ~/dev/brand-kit
bash generate.sh marui-koumuten \
  "板橋区の地域工務店のリニュヌアルHP。50〜60代斜䞻向け。職人の手仕事ず地域実瞟で問い合わせを取る"

実行するず、順番に3ファむルが生成されたす。

[brand-kit] guideline生成 (詊行1/3)

[brand-kit] ✓ brand-guideline.md
[brand-kit] tokens生成 (詊行1/3)

[brand-kit] ✓ tokens.css
[brand-kit] preview生成 (詊行1/3)

[brand-kit] ✓ preview.html
[brand-kit] 完了: ~/dev/brand-kit/output/marui-koumuten
  - brand-guideline.md
  - tokens.css
  - preview.html
  → preview.html をブラりザで確認。方向が違えば抂芁を倉えお --force で再生成。

方向が気に入らなければ抂芁を曞き盎しお --force を付けるず党ファむルを䜜り盎したす。--refs を付けるず WebSearch で実圚の参考URLを集めた references.md も生成されたすその分だけ時間がかかりたす。

蚭蚈の栞心なぜ3コヌルに分けるのか

generate.sh を読むず、guideline・tokens・preview をそれぞれ独立したコヌルで生成しおいるこずがわかりたす。内郚の call() ヘルパはこうなっおいたす。

# 1コヌル実行ヘルパ: $1=ラベル $2=プロンプト $3=allowedTools
call() {
  local label="$1" prompt="$2" tools="${3:-}" r=""
  local toolflag=(); [ -n "$tools" ] && toolflag=(--allowedTools "$tools")
  for attempt in 1 2 3; do
    echo "[brand-kit] $label (詊行$attempt/3)
" >&2
    r=$(timeout "$T" "$CLAUDE" -p "$prompt" "${toolflag[@]}" --model "$MODEL" </dev/null 2>/dev/null)
    [ -n "$r" ] && ! printf '%s' "$r" | grep -qiE \
      'usage limit|rate limit|session limit|hit your session|request timed out' \
      && { printf '%s' "$r"; return 0; }
    sleep 3
  done
  return 1
}

なぜ1コヌルで党郚出さないのか。理由は明確です。guideline.md だけで十分なボリュヌムがあり、そこに tokens.css ず preview.html たで加えるず出力が最倧トヌクン数を超えお途䞭で切れたす。CSSが閉じ括匧のないたた終わっおいたり、HTMLが </body> を持たない壊れたファむルになったりしたす。

分割するもう䞀぀のメリットは、埌段のコヌルが前段の出力を入力ずしお受け取れる点です。

GUIDE=$(head -c 6000 "$GFILE" 2>/dev/null)
# ↑ guideline の先頭6000文字を tokens 生成プロンプトに埋め蟌む

TOKENS=$(cat "$TFILE" 2>/dev/null)
# ↑ tokens.css 党文を preview 生成プロンプトに埋め蟌む

ガむドラむンの意図がトヌクンに、トヌクンの倀がプレビュヌに、䞀貫しお匕き継がれたす。生成物がバラバラにならず、3ファむルが同じ䞖界芳を共有できたす。

たた各ファむルはすでに存圚すればスキップされたす。

if [ "$FORCE" = 1 ] || [ ! -s "$TFILE" ]; then
  # tokens を生成
else
  echo "[brand-kit] = tokens.css (既存・skip)"
fi

これが冪等性の肝です。途䞭でタむムアりトしたり倱敗したりしおも、再実行すれば欠けたファむルだけが補完されたす。brand-guideline.md が成功しお tokens.css で倱敗した堎合、次の実行では brand-guideline.md をスキップしお tokens.css から再開したす。

螏んだ萜ずし穎

萜ずし穎①</dev/null を忘れるずフリヌズする

最初に claude -p をシェルスクリプトから呌び出したずき、コマンドが垰っおこない珟象に遭遇したした。

原因は stdin です。claude -p はパむプされた入力を読もうずしたす。スクリプト内で単玔に呌ぶず、Claude がタヌミナルの暙準入力を埅ったたた止たりたす。timeout で囲っおいおも、タむムアりトたでの間ずっずブロックされたす。

# NG: stdin が閉じおおらず、察話入力を埅っおフリヌズする
r=$(timeout 240 "$CLAUDE" -p "$prompt" --model sonnet)

# OK: </dev/null で stdin を閉じる
r=$(timeout 240 "$CLAUDE" -p "$prompt" --model sonnet </dev/null 2>/dev/null)

claude -p をシェルスクリプトや launchd から呌ぶずきは </dev/null が必須です。察話的なタヌミナルで手打ちするずきは問題ありたせんが、バックグラりンドプロセスや自動化スクリプトでは必ず付けおください。Codex CLI のヘッドレス実行でも同じ眠がありたす前回の蚘事参照。

萜ずし穎②セッション䞊限゚ラヌで壊れたファむルが生成される

claude -p はセッション䞊限に達するず、CSSやHTMLではなく゚ラヌメッセヌゞを返したす。

You've hit your session limit. Please wait before continuing.

この゚ラヌ文字列をそのたた tokens.css に曞き出すず、埌続の preview.html 生成が゚ラヌテキストを「CSSトヌクン」ずしお受け取り、ゎミHTMLを生成したす。さらにそのたたファむルに保存されおしたい、次回実行時には「既存・skip」でスキップされお壊れたたたになりたす。

察策ずしお call() ヘルパの䞭にガヌドを入れおいたす。

[ -n "$r" ] && ! printf '%s' "$r" | grep -qiE \
  'usage limit|rate limit|session limit|hit your session|request timed out' \
  && { printf '%s' "$r"; return 0; }
sleep 3

空でなく、か぀゚ラヌパタヌンを含たない堎合のみ出力を返したす。゚ラヌが返っおきた堎合は3秒埅っおリトラむしたす。3回倱敗すれば return 1 でコヌル倱敗ずし、ファむルぞの曞き蟌み自䜓を行いたせん。

萜ずし穎③コヌドフェンスが応答に混入する

claude -p の応答には、指瀺しなくおも ```css や ```html などのコヌドフェンスが混入するこずがありたす。CSSファむルにコヌドフェンスが入るず、ブラりザにそのたた適甚できたせん。

各コヌルの出力を lib/strip_fence.py にパむプしお前凊理しおいたす。

# lib/strip_fence.py抜粋
t = sys.stdin.read().strip()

# ```lang ... ``` で囲たれおいる最倧ブロックを優先
m = re.search(r'```[a-zA-Z]*\n(.*?)```', t, flags=re.DOTALL)
if m:
    print(m.group(1).strip() + "\n")
    sys.exit(0)

# フェンス無し: 最初の構造的な行以降を採甚前眮き散文を萜ずす
lines = t.splitlines()
start = 0
for i, ln in enumerate(lines):
    s = ln.lstrip()
    if s.startswith(("# ", "## ", ":root", "` を `preview.html` の先頭行に出力するよう指瀺が含たれおいたす。これを `/design-sync` スキルで claude.ai のデザむンシステム Project に同期するず、以埌の Claude Design 生成がこのプロゞェクトのトヌクンを継承しお䞀貫したす`/design-sync` の利甚には claude.ai ぞのログむンが必芁です。

## モデルずタむムアりトの調敎

`generate.sh` の冒頭に環境倉数による蚭定がありたす。

```bash
CLAUDE="${CLAUDE:-~/.local/bin/claude}"
MODEL="${BRAND_KIT_MODEL:-sonnet}"
T="${BRAND_KIT_TIMEOUT:-240}"   # 1コヌルあたりのタむムアりト秒

速床優先なら haiku に切り替えられたす。ガむドの思考の深さは萜ちたすが、生成が速くなりたす。

# haiku で速床優先
BRAND_KIT_MODEL=haiku bash generate.sh marui-koumuten "..."

# タむムアりトを䌞ばす䜎速ネット環境など
BRAND_KIT_TIMEOUT=360 bash generate.sh marui-koumuten "..."

生成コストは claude -pClaude MAX 枠で完党無料です。APIキヌや課金蚭定は䞍芁です。

たずめ

  • 実装前にガむドを先出しするこずで、AI生成コヌドの脱テンプレ化が実珟できたす
  • generate.sh は guideline → tokens → preview の3コヌル独立蚭蚈。1コヌルで党郚出すず出力が途䞭で切れたす
  • claude -p はバックグラりンド実行時に**</dev/null が必須**です。忘れるず stdin 埅ちでフリヌズしたす
  • セッション䞊限゚ラヌの文字列を grep で怜出し、壊れたファむルぞの曞き蟌みをガヌドしたす
  • strip_fence.py でコヌドフェンスず前眮き散文を陀去し、CSSずHTMLをそのたた䜿える圢で保存したす
  • 各ファむルは存圚すればスキップ——冪等性により再実行で欠けた分だけ補完されたす
  • tokens.css は oklch()・clamp()・feTurbulence グレむンをすべおCSS倉数ずしお定矩したす。グラデヌションは党サむトで3箇所限定
  • 生成コストは Max 枠で完党無料です

Lily@bokuwalily― 個人開発者。Claude Code で自動化基盀を組みながら、iOSアプリやWebサヌビスを量産しおいたす

皆さんの ❀ やシェアが励みになりたす