--- user-invocable: true description: "[デザイン] 1.(会話起点)SSOT + 静的HTML(叩き台)を生成" --- # [デザイン] 1.(会話起点)SSOT + 静的HTML(叩き台)を生成 ## 入力: $ARGUMENTS(任意) - 画面キー(複数可。固定命名)(例: `HomePage`, `PricingPage`, `LoginPage`) - 画面の用途/要件(任意。箇条書きでもOK) ### 複数ページ指定(固定) - `HomePage PricingPage LoginPage` のように **ページキーを羅列**する - 省略時は `HomePage` として扱う(単一ページの叩き台) ### ページキー(PageKey)のルール(固定) - `PascalCase`(例: `HomePage`, `PricingPage`, `LoginPage`) - 後工程(`/design-html` / `/design-ui`)のページ選択キーになるため、URLやFigma名に依存せず安定させる ## いつ使う?(位置づけ) - Figmaが無い/固まっていない状態で、まず叩き台を作って会話で詰めたいとき - 「静的HTMLで目視」しながら調整し、その根拠を **SSOT(tokens/components/context)** に反映して後続へ合流したいとき ## 次に何をする? - 1枚ペラをページ単位にしたい → `/design-split`(任意) - 実装に進む → `/design-ui` → `/design-components` → `/design-assemble` --- ## 🎯 目的 - ユーザーとの会話(要件/トーン/主要導線)から、**ページ単位の静的HTML(複数可)**を生成する - 実装(状態/データ取得/ルーティング)は入れず、**見た目と情報設計**に集中する - 以降の共通ルート(`/design-ui` 等)へ合流できるよう、**SSOT(design JSON)も同時に用意**する - 生成したHTMLは、**ユーザーが目で見ながら調整するためのプレビュー**として扱う(調整点は会話で共有し、SSOT(JSON)側にも反映する) --- ## 共通前提(参照) - 口調・出力規約は `CLAUDE.md` に従う。 - プロジェクト固有の事実は `doc/input/rdd.md`(先頭のAI用事実ブロック)を参照する。 - 判断軸は `.claude/skills/*` を適用する(例: `ui-designer` / `usability-psychologist` / `tailwind` / `creative-coder`)。 ## 見た目の基準(ビューポート)について - まず `doc/input/rdd.md` の「ターゲット表示環境(事実)」を参照し、**そのビューポートを基準**に叩き台(HTML/SSOT)を作る - 未記入の場合は、以下を **推奨デフォルト**として仮置きし、出力やレビューの前提に明記する: - desktop: 1440x900 - mobile: 390x844 - tablet: 834x1194 --- ## 仕様 - 出力は **静的HTML**(外部依存なしが基本) - `doc/input/design/html/` に保存 - 単一ページ: `doc/input/design/html/mock.html` を生成(叩き台) - 複数ページ: `doc/input/design/html/{page}.html` をページ数分生成(既定) - 併せて、以下のSSOTを生成/更新する(Figmaルートと同じ合流点。**複数ページ対応**) - `doc/input/design/design_context.json` - `doc/input/design/design-tokens.json` - `doc/input/design/components.json` - `doc/input/design/copy.json`(文言のSSOT。一字一句固定。言い換え禁止) - `doc/input/design/assets/assets.json`(画像/動画等のアセットmanifest。取得できない場合は `status:"failed"` を記録して停止) - 技術スタックは **`doc/input/rdd.md`** をSSOTとして扱う(ここで勝手に変えない) - `doc/input/design/components.json` の variants 命名規約は `doc/input/design/ssot_schema.md` を参照し、プロジェクト横断で揃える - ここで停止(次工程は `/design-ui`。単一ページで `mock.html` の場合は必要に応じて `/design-split`) ### 複数ページ時のSSOT規約(固定) - `design_context.json.pages[]` を **PageKey単位**で生成する(ページ同士を混ぜない) - `copy.json` の `copyKey` は **ページキーで名前空間を切る**(例: `homePage.hero.title`) - `assets.json` の `assetKey` は **ページ横断で一意**(衝突は停止) - tokens がページで矛盾する場合は **停止**し、ユーザーに命名/設計の合意を依頼する(推測でマージしない) --- ## 反復(重要) - ユーザーが `doc/input/design/html/*.html` を手で編集して調整した場合は、**差分(diff)または変更点の箇条書き**を入力として受け取る(状況で使い分けOK) - その調整内容を根拠に、**HTMLだけでなくSSOT(`design-tokens.json` / `components.json` / `design_context.json`)も同時に更新**する - 文言の調整が入った場合は、**必ず `copy.json` も同時に更新**する(後続で一字一句の再現を担保するため) - SSOTが古いままだと、後続(`/design-ui` / `/design-components` / `/design-assemble`)で不整合が出るため、**HTML単独修正で終わらせない** --- ## ゲート - 主要ブレイクポイントで破綻しない(簡易でOK) - 情報設計(見出し/導線/主要CTA)が説明できる - SSOT(tokens/components/context)が矛盾なく、`/design-ui` が実行できる状態になっている - `copy.json` に未定義文言なし(参照される `copyKey` の不足0件) - CSSで指定できる見た目(background/border/gradient/blur/blend/strokeAlign)が、SSOT(tokens/componentsのstyles参照)に落ちている(取りこぼし0) - 画像アセットが必要な箇所(ロゴ/アイコン/イラスト/写真)が `doc/input/design/assets/assets.json` に定義され、`baseDir` 配下に配置されている(取りこぼし0) - `assets.json` に `status: "failed"` が1件でもある場合は、**必ずユーザーに失敗理由と次アクション**(手元提供/代替ファイル/Export設定)を明示して停止する