@cakejp/design-system 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/AGENTS.md +144 -0
  2. package/CHANGELOG.md +115 -0
  3. package/CLAUDE.md +188 -0
  4. package/CLAUDE_PRODUCTION.md +121 -0
  5. package/MIGRATION.md +228 -0
  6. package/README.md +79 -0
  7. package/RELEASE.md +205 -0
  8. package/bin/init.js +134 -0
  9. package/component-registry.json +1146 -0
  10. package/contracts/components.json +730 -0
  11. package/contracts/rules.json +559 -0
  12. package/dist/index.css +1 -0
  13. package/dist/index.js +9344 -0
  14. package/dist/types/components/ec/_mypage-menu-data.d.ts +15 -0
  15. package/dist/types/components/ec/admin-layout.d.ts +31 -0
  16. package/dist/types/components/ec/anniversary-card.d.ts +50 -0
  17. package/dist/types/components/ec/cake-logo.d.ts +22 -0
  18. package/dist/types/components/ec/chart-controls.d.ts +16 -0
  19. package/dist/types/components/ec/countdown-timer.d.ts +24 -0
  20. package/dist/types/components/ec/coupon-card.d.ts +47 -0
  21. package/dist/types/components/ec/delivery-calendar.d.ts +36 -0
  22. package/dist/types/components/ec/order-section.d.ts +29 -0
  23. package/dist/types/components/ec/order-summary.d.ts +36 -0
  24. package/dist/types/components/ec/payment-method.d.ts +41 -0
  25. package/dist/types/components/ec/product-card.d.ts +77 -0
  26. package/dist/types/components/ec/product-carousel.d.ts +56 -0
  27. package/dist/types/components/ec/product-cta.d.ts +35 -0
  28. package/dist/types/components/ec/product-detail-bar.d.ts +62 -0
  29. package/dist/types/components/ec/product-detail-sidebar.d.ts +115 -0
  30. package/dist/types/components/ec/product-list-item.d.ts +90 -0
  31. package/dist/types/components/ec/product-option.d.ts +62 -0
  32. package/dist/types/components/ec/rating-stars.d.ts +30 -0
  33. package/dist/types/components/ec/review-card.d.ts +44 -0
  34. package/dist/types/components/ec/review-form.d.ts +40 -0
  35. package/dist/types/components/ec/review-summary.d.ts +53 -0
  36. package/dist/types/components/ec/shop-card.d.ts +48 -0
  37. package/dist/types/components/ec/stat-card.d.ts +44 -0
  38. package/dist/types/components/foundations/accordion.d.ts +7 -0
  39. package/dist/types/components/foundations/alert-dialog.d.ts +18 -0
  40. package/dist/types/components/foundations/alert.d.ts +42 -0
  41. package/dist/types/components/foundations/aspect-ratio.d.ts +3 -0
  42. package/dist/types/components/foundations/avatar.d.ts +11 -0
  43. package/dist/types/components/foundations/badge.d.ts +9 -0
  44. package/dist/types/components/foundations/breadcrumb.d.ts +11 -0
  45. package/dist/types/components/foundations/button.d.ts +10 -0
  46. package/dist/types/components/foundations/calendar.d.ts +8 -0
  47. package/dist/types/components/foundations/card.d.ts +9 -0
  48. package/dist/types/components/foundations/checkbox-card.d.ts +30 -0
  49. package/dist/types/components/foundations/checkbox-group.d.ts +53 -0
  50. package/dist/types/components/foundations/checkbox.d.ts +4 -0
  51. package/dist/types/components/foundations/collapsible.d.ts +5 -0
  52. package/dist/types/components/foundations/command.d.ts +18 -0
  53. package/dist/types/components/foundations/context-menu.d.ts +25 -0
  54. package/dist/types/components/foundations/data-table.d.ts +104 -0
  55. package/dist/types/components/foundations/dialog.d.ts +17 -0
  56. package/dist/types/components/foundations/drawer.d.ts +13 -0
  57. package/dist/types/components/foundations/dropdown-menu.d.ts +25 -0
  58. package/dist/types/components/foundations/form.d.ts +24 -0
  59. package/dist/types/components/foundations/hover-card.d.ts +6 -0
  60. package/dist/types/components/foundations/input.d.ts +3 -0
  61. package/dist/types/components/foundations/label.d.ts +7 -0
  62. package/dist/types/components/foundations/menubar.d.ts +26 -0
  63. package/dist/types/components/foundations/navigation-menu.d.ts +14 -0
  64. package/dist/types/components/foundations/pagination.d.ts +13 -0
  65. package/dist/types/components/foundations/popover.d.ts +10 -0
  66. package/dist/types/components/foundations/progress.d.ts +4 -0
  67. package/dist/types/components/foundations/radio-group.d.ts +9 -0
  68. package/dist/types/components/foundations/responsive-dialog.d.ts +52 -0
  69. package/dist/types/components/foundations/scroll-area.d.ts +5 -0
  70. package/dist/types/components/foundations/select.d.ts +15 -0
  71. package/dist/types/components/foundations/separator.d.ts +4 -0
  72. package/dist/types/components/foundations/sheet.d.ts +14 -0
  73. package/dist/types/components/foundations/skeleton.d.ts +2 -0
  74. package/dist/types/components/foundations/slider.d.ts +4 -0
  75. package/dist/types/components/foundations/sonner.d.ts +3 -0
  76. package/dist/types/components/foundations/spinner.d.ts +6 -0
  77. package/dist/types/components/foundations/switch.d.ts +13 -0
  78. package/dist/types/components/foundations/table.d.ts +10 -0
  79. package/dist/types/components/foundations/tabs.d.ts +12 -0
  80. package/dist/types/components/foundations/textarea.d.ts +3 -0
  81. package/dist/types/components/foundations/toggle-group.d.ts +23 -0
  82. package/dist/types/components/foundations/toggle.d.ts +9 -0
  83. package/dist/types/components/foundations/tooltip.d.ts +7 -0
  84. package/dist/types/components/pages/cake/_mypage-shell.d.ts +41 -0
  85. package/dist/types/components/primitives/banner-carousel.d.ts +54 -0
  86. package/dist/types/components/primitives/bottom-tab-bar.d.ts +39 -0
  87. package/dist/types/components/primitives/bulk-action-bar.d.ts +32 -0
  88. package/dist/types/components/primitives/category-scroll.d.ts +70 -0
  89. package/dist/types/components/primitives/category-shortcuts.d.ts +44 -0
  90. package/dist/types/components/primitives/chip.d.ts +44 -0
  91. package/dist/types/components/primitives/coach-mark.d.ts +28 -0
  92. package/dist/types/components/primitives/empty-state.d.ts +36 -0
  93. package/dist/types/components/primitives/error-state.d.ts +41 -0
  94. package/dist/types/components/primitives/filter-bar.d.ts +56 -0
  95. package/dist/types/components/primitives/footer.d.ts +81 -0
  96. package/dist/types/components/primitives/form-field.d.ts +46 -0
  97. package/dist/types/components/primitives/header.d.ts +69 -0
  98. package/dist/types/components/primitives/image-carousel.d.ts +52 -0
  99. package/dist/types/components/primitives/image-gallery.d.ts +35 -0
  100. package/dist/types/components/primitives/image-uploader.d.ts +19 -0
  101. package/dist/types/components/primitives/kebab-menu.d.ts +38 -0
  102. package/dist/types/components/primitives/list-item.d.ts +60 -0
  103. package/dist/types/components/primitives/menu-drawer.d.ts +75 -0
  104. package/dist/types/components/primitives/notification-badge.d.ts +30 -0
  105. package/dist/types/components/primitives/notification-list.d.ts +45 -0
  106. package/dist/types/components/primitives/price-display.d.ts +33 -0
  107. package/dist/types/components/primitives/progress-steps.d.ts +27 -0
  108. package/dist/types/components/primitives/quantity-selector.d.ts +50 -0
  109. package/dist/types/components/primitives/search-bar.d.ts +31 -0
  110. package/dist/types/components/primitives/search-panel.d.ts +41 -0
  111. package/dist/types/components/primitives/section-header.d.ts +51 -0
  112. package/dist/types/components/primitives/share-buttons.d.ts +23 -0
  113. package/dist/types/components/primitives/side-nav.d.ts +62 -0
  114. package/dist/types/components/primitives/social-login-button.d.ts +24 -0
  115. package/dist/types/components/primitives/status-count-tabs.d.ts +14 -0
  116. package/dist/types/components/primitives/sticky-action-bar.d.ts +7 -0
  117. package/dist/types/components/primitives/sub-nav.d.ts +34 -0
  118. package/dist/types/components/primitives/tag.d.ts +19 -0
  119. package/dist/types/index.d.ts +109 -0
  120. package/dist/types/lib/utils.d.ts +2 -0
  121. package/package.json +186 -0
  122. package/scripts/codemod/check-migration.mjs +97 -0
  123. package/scripts/codemod/v0.2-to-v0.3.mjs +192 -0
  124. package/src/preset-standalone.css +109 -0
  125. package/src/preset.css +288 -0
  126. package/src/styles/primitive.css +139 -0
  127. package/src/styles/semantic.css +203 -0
  128. package/src/styles/typography.css +129 -0
  129. package/templates/AGENTS.md +56 -0
  130. package/templates/CLAUDE.md +56 -0
  131. package/tokens.json +127 -0
package/AGENTS.md ADDED
@@ -0,0 +1,144 @@
1
+ # Cake.jp Design System — AGENTS.md(Codex向け)
2
+
3
+ ## このDSについて
4
+
5
+ Cake.jp のフロントエンドとデザインシステムを正式に接続する統合デザインシステム。
6
+ EC / BtoC / コマース向け。**3-tier 構造で 104 コンポーネント**:
7
+ - foundations: 46個(shadcn ベース汎用 UI)
8
+ - primitives: 35個(業界汎用パターン・jobboard 等他事業でも再利用可)
9
+ - ec: 23個(Cake.jp / EC 事業特化)
10
+
11
+ ---
12
+
13
+ ## 必須: セッション開始時に読み込むファイル
14
+
15
+ Codex はファイルを自動読み込みしないため、**タスク開始前に以下を明示的に読み込むこと**:
16
+
17
+ ```
18
+ 1. contracts/rules.json # 禁止パターン・アクセシビリティ要件
19
+ 2. contracts/components.json # 全104コンポーネント定義(3-tier)
20
+ 3. tokens.json # カラー・タイポグラフィ・スペーシングトークン
21
+ ```
22
+
23
+ 本番実装・新規コンポーネント作成の場合はさらに:
24
+ ```
25
+ 4. CLAUDE_PRODUCTION.md # 本番参照ルール・Figmaチェックリスト
26
+ ```
27
+
28
+ ---
29
+
30
+ ## 技術スタック
31
+
32
+ - React 19 + TypeScript
33
+ - Vite(ビルド)
34
+ - **Tailwind CSS v4**(`@import "tailwindcss"` 構文。`@tailwind base` / `@tailwind components` は v3 記法で**使用禁止**)
35
+ - shadcn/ui(Radix UI ベース、Cake.jp テーマ適用済み)
36
+ - Storybook(`@storybook/react-vite`)
37
+ - CVA(class-variance-authority)でバリアント管理
38
+ - **Lucide React + iconsax-react**(アイコン。`heroicons` `phosphor-icons` への置き換え禁止)
39
+
40
+ ---
41
+
42
+ ## ディレクトリ構成
43
+
44
+ ```
45
+ src/
46
+ ├── components/
47
+ │ ├── foundations/ # shadcn ベース汎用 UI(46個・全事業共通)
48
+ │ ├── primitives/ # 業界汎用パターン(35個・jobboard等他事業でも再利用可)
49
+ │ ├── ec/ # Cake.jp / EC 事業特化(23個・商品・配送・クーポン等)
50
+ │ └── pages/ # ページ単位のストーリー
51
+ ├── prototypes/ # /mock スキルで生成されたプロトタイプ
52
+ ├── lib/
53
+ │ └── utils.ts # cn() ユーティリティ
54
+ └── index.css # カラートークン定義 + Tailwind 設定
55
+ ```
56
+
57
+ ### 3層構造の依存ルール
58
+
59
+ ```
60
+ ec/ ← Cake.jp 特化(最上位)
61
+ ↓
62
+ primitives/ ← 業界汎用パターン
63
+ ↓
64
+ foundations/ ← shadcn ベース(最下位)
65
+ ```
66
+
67
+ - `foundations/` は他層に依存しない
68
+ - `primitives/` は `foundations/` のみ参照可
69
+ - `ec/` は `foundations/` と `primitives/` を参照可
70
+ - **逆方向の依存は禁止**(`bash scripts/check-deps.sh` で検証)
71
+
72
+ ---
73
+
74
+ ## ❌ スクラッチコード禁止ルール(強制)
75
+
76
+ ### 書く前ゲート
77
+
78
+ 以下のいずれかを書こうとしたら**手を止めて** `contracts/components.json` と Storybook で同等パターンを探すこと:
79
+
80
+ | 書こうとしているもの | 確認先 |
81
+ |-------------------|--------|
82
+ | `::before` / `::after` 装飾(バー・ドット・矢印) | SectionHeader, Chip, Badge, ListItem の variants |
83
+ | `rgba(...)` / `#xxxxxx` ハードコードカラー | `tokens.json` のトークン名を使う |
84
+ | `box-shadow: ...` カスタム影 | `tokens.json` の `shadow.*` |
85
+ | `border-radius: ...px` カスタム角丸 | `tokens.json` の `radius.*` |
86
+ | カスタムフォントサイズ・ウェイト | `tokens.json` の `typography.*` |
87
+
88
+ DSに存在しない場合のみカスタム実装を許可。その場合はコメントで理由を記載すること。
89
+
90
+ ### 書いた後ゲート(強制)
91
+
92
+ **.tsx / .css / .module.css を編集したら必ず実行**:
93
+
94
+ ```bash
95
+ bash scripts/lint-scratch.sh
96
+ ```
97
+
98
+ エラーが出たら修正してから次のタスクに進むこと。**エラーありのまま完了報告禁止。**
99
+
100
+ **コンポーネントを追加・削除したら必ず実行**:
101
+
102
+ ```bash
103
+ bash scripts/check-drift.sh # contracts と実ファイルの一致を検証
104
+ bash scripts/check-deps.sh # 3-tier 依存方向違反を検出
105
+ ```
106
+
107
+ `contracts/components.json` の `meta.counts` と実ファイル数が一致していること、
108
+ foundations → primitives → ec の依存方向が正しいことを確認すること。
109
+
110
+ ---
111
+
112
+ ## コンポーネント追加時のチェックリスト
113
+
114
+ - [ ] `src/index.tsx` にエクスポートを追加
115
+ - [ ] `contracts/components.json` にコンポーネント定義を追加
116
+ - [ ] `contracts/components.json` の `meta.counts` を更新
117
+ - [ ] `bash scripts/check-drift.sh` を実行して乖離がないことを確認
118
+ - [ ] Storybook のストーリーファイル(`.stories.tsx`)を作成
119
+
120
+ ---
121
+
122
+ ## ドキュメント構成
123
+
124
+ | ファイル | 内容 |
125
+ |---------|------|
126
+ | **AGENTS.md**(本ファイル) | Codex向け。セッション開始時の読み込み指示・編集後コマンドを明記 |
127
+ | **CLAUDE.md** | Claude Code向け概要(フック自動実行) |
128
+ | **contracts/components.json** | 全104コンポーネントの構造化定義(3-tier・バリアント・アクセシビリティ要件) |
129
+ | **contracts/rules.json** | 禁止パターン・アクセシビリティ要件・タイポグラフィ定義 |
130
+ | **tokens.json** | カラー・スペーシング・シャドウトークンの機械可読定義 |
131
+ | **CLAUDE_PRODUCTION.md** | 本番実装参照ルール・Figmaチェックリスト(Cake.jp固有) |
132
+
133
+ ---
134
+
135
+ ## 重要な制約(AI生成コードの典型的な誤り)
136
+
137
+ `contracts/rules.json` の `aiPatterns` セクションで詳細を確認すること。主な注意点:
138
+
139
+ - **価格表記**: `¥{数字,区切り}(税込)` — `円` `税込み` `(税込)` は禁止
140
+ - **日付表記**: `M月D日(曜日)` — `YYYY/MM/DD` や英語表記禁止
141
+ - **aria-label**: 日本語で記述 — 英語 aria-label 禁止
142
+ - **input type="date"**: 使用禁止 — PopoverとCalendarを組み合わせる
143
+ - **Tag に onClick**: 禁止 — 押せるものは Chip を使う
144
+ - **SectionHeader 手書き**: 禁止 — `SectionHeader` コンポーネントを使う
package/CHANGELOG.md ADDED
@@ -0,0 +1,115 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [0.3.0] - 2026-05-04 (Unreleased)
11
+
12
+ ### 🚨 Breaking Changes
13
+
14
+ > v0.2.x で動いていたコードは **後方互換 alias で動き続けます** が、新名へのマイグレーションを推奨。
15
+ > 詳細は [MIGRATION.md](./MIGRATION.md) を参照。
16
+ >
17
+ > ```bash
18
+ > # 自動移行
19
+ > npx @cakejp/design-system codemod v0.2-to-v0.3 ./src
20
+ > ```
21
+
22
+ #### コンポーネント rename
23
+
24
+ 業界標準命名に揃えました。旧名は `@deprecated` alias として v1.0 まで動作します。
25
+
26
+ | Before | After | 理由 |
27
+ |---|---|---|
28
+ | `TopAppBar` | `Header` | Material 固有用語 → HTML semantic |
29
+ | `BottomNavigation` | `BottomTabBar` | Material 固有 → iOS / Bootstrap 慣習 |
30
+ | `BottomAction` | `StickyActionBar` | 用途不明 → Web 慣習 |
31
+ | `Balloon` | `CoachMark` | 日本語圏特有 → Atlassian / Pendo 標準 |
32
+ | `NavigationRibbon` | `SubNav` | MS Office 用語 → GitHub Primer 標準 |
33
+ | `CategoryIconStrip` | `CategoryShortcuts` | 曖昧 → Shopify / Ant Design 慣習 |
34
+ | `MypageSidebar` | `SideNav` + `mypageMenuGroups` | 汎用化 + データ分離 |
35
+ | `mypageSidebarDefaultGroups` | `mypageMenuGroups` | 命名整理 |
36
+ | `Banner` | `Alert` (bordered variant + prop-based API) | Alert と機能重複していたため統合 |
37
+
38
+ #### ディレクトリ構造変更(社内開発のみ影響)
39
+
40
+ ```
41
+ Before: After:
42
+ src/components/ src/components/
43
+ ├── ui/ (46個) ├── foundations/ (46個・shadcn ベース)
44
+ └── cake/ (57個) ├── primitives/ (35個・業界汎用)
45
+ └── ec/ (23個・Cake.jp 特化)
46
+ ```
47
+
48
+ 外部 npm 利用側はバレル export 経由なので影響なし。社内コードで `@/components/ui/` `@/components/cake/` を直接 import している場合のみ更新が必要。
49
+
50
+ ### ✨ Added
51
+
52
+ - **`Alert` の bordered variant に prop-based API 追加**
53
+ - `<Alert variant="warning" title="..." description="..." action={<Button />} />` と書ける
54
+ - children を渡さない場合は prop-based レンダリング(旧 Banner の使い勝手)
55
+ - children があれば従来通り composable 形式
56
+ - 自動アイコン: variant に応じて Warning2 / InfoCircle / TickCircle / CloseCircle
57
+ - 旧 `Banner` を Alert 既存スタイル(白bg + 色枠 + ring)に統合
58
+ - **Banner は削除**(codemod は Banner 利用検出時に警告のみ、手動移行推奨)
59
+ - **3-tier 構造**: `foundations/` → `primitives/` → `ec/` の依存階層を明確化
60
+ - **`SideNav`**: 汎用サイドナビ(jobboard 等の他事業でも再利用可能)
61
+ - **`mypageMenuGroups`**: Cake.jp マイページの 17 項目メニューデータ
62
+ - **`Header.logo` prop**: `<Header logo={<CakeLogo />} variant="logo" />` のように logo を明示
63
+ - **依存方向 Lint** (`scripts/check-deps.sh`): `npm run check` で自動検証
64
+ - **Codemod スクリプト**: `npx @cakejp/design-system codemod v0.2-to-v0.3` で自動移行
65
+ - **MIGRATION.md**: 詳細な移行ガイド
66
+ - **runtime deprecation 警告**: 旧 API 利用時に dev mode で console.warn
67
+
68
+ ### 🐛 Fixed
69
+
70
+ - `collapsible.stories.tsx` で未 import の `ChevronDown` を `ArrowDown2` に修正
71
+ - `CheckboxGroup` で `<Label asChild>` による React.Children.only エラーを修正
72
+ - v0.2.0 で 12 個のコンポーネントが barrel export 漏れだった問題を v0.2.1 で部分修正、v0.3.0 で完全対応
73
+ - 数件の relative import パス漏れを修正(refactor 後の追従)
74
+
75
+ ### 📦 Changed
76
+
77
+ - `MypageSidebar` の API: `groups` を必須化し、汎用 `SideNav` に分離(旧 API は wrapper で維持)
78
+ - `Header` から `CakeLogo` の自動 fallback を削除(`logo` prop で明示)
79
+ - `pages/cake/` で `Header` 利用箇所すべてに `logo={<CakeLogo />}` を追加
80
+
81
+ ### 🛡 Internal
82
+
83
+ - `scripts/check-drift.sh` を 3-tier 構造に対応
84
+ - `scripts/check-deps.sh` を新規追加(依存方向 Lint)
85
+ - `scripts/generate-component-lookup.mjs` を 3-tier 構造に対応
86
+ - `contracts/components.json` を 3-tier 構造に再編成
87
+ - `mcp-server/data/components.json` の filePath 37 件を更新
88
+ - `.storybook/main.ts` の glob パターンを 3-tier に対応
89
+
90
+ ---
91
+
92
+ ## [0.2.2] - 2026-05-03
93
+
94
+ ### 🐛 Fixed
95
+
96
+ - 12 個のコンポーネントが barrel export から漏れていた問題を修正
97
+ - DataTable, AnniversaryCard, BannerCarousel, BottomAction, BulkActionBar, ErrorState, MypageSidebar, ProductCarousel など
98
+ - cake-api/frontend で `import { CategoryScroll } from '@cakejp/design-system'` がエラーになる問題を解消
99
+
100
+ ---
101
+
102
+ ## [0.2.1] - 2026-04-29
103
+
104
+ ### 🐛 Fixed
105
+
106
+ - CategoryScroll / CategoryIconStrip / Spinner を public API に追加(barrel export 漏れの部分修正)
107
+
108
+ ---
109
+
110
+ ## [0.2.0] - 2026-03-18
111
+
112
+ ### ✨ Added
113
+
114
+ - npm パッケージとして DS を配布可能にする初版リリース
115
+ - 91 個のコンポーネントを barrel export
package/CLAUDE.md ADDED
@@ -0,0 +1,188 @@
1
+ # Cake.jp Design System — 設計ルールブック
2
+
3
+ ## 目的
4
+
5
+ Cake.jp のフロントエンドとデザインシステムを正式に接続する。
6
+ PdM や社長が AI(Claude 等)で HTML モックを作る際、このリポジトリを参照して高精度なモックを生成できるようにする。
7
+ デザイナー・フロントエンドがいなくても、モック → バックエンド開発へそのまま移行できる品質を目指す。
8
+
9
+ ---
10
+
11
+ ## 重要: コードを書く前に必ず読むこと
12
+
13
+ **コードを1行でも書く前に、以下のファイルを必ず読み込むこと。**
14
+
15
+ | ファイル | 内容 | いつ読むか |
16
+ |---------|------|----------|
17
+ | **contracts/rules.json** | 禁止パターン・アクセシビリティ要件・ライティングルール | **コード生成前に必ず** |
18
+ | **contracts/components.json** | 全103コンポーネントの定義(variants・rules・accessibility) | コンポーネント作成・修正時 |
19
+ | **tokens.json** | カラー・タイポグラフィ・スペーシング・影・角丸 | トークン値を参照する時 |
20
+ | **CLAUDE_PRODUCTION.md** | 本番実装参照ルール・Figmaチェックリスト・本番サイト対応表 | 本番再現・新規コンポーネント作成時 |
21
+
22
+ > ※ Codex を使う場合は **AGENTS.md** を参照すること(明示的なファイル読み込み手順を記載)。
23
+
24
+ ---
25
+
26
+ ## ❌ スクラッチコード禁止ルール(強制)
27
+
28
+ > 「読みます」ではなく「書く前にブロックする」ゲートとして運用すること。
29
+
30
+ ### 書く前ゲート(以下のパターンを書こうとしたら必ずDSを確認すること)
31
+
32
+ 下記のいずれかを CSS または JSX に追加しようとした場合、**書く手を止めて** `contracts/components.json` と Storybook で同等パターンを探すこと:
33
+
34
+ | 追加しようとしているもの | DSで確認すること |
35
+ |------------------------|----------------|
36
+ | `::before` / `::after` で装飾(色付きバー・ドット・矢印等) | SectionHeader, Chip, Badge, ListItem の variants |
37
+ | カスタムカラー(`rgba(...)` / `#xxxxxx` / ハードコード) | `tokens.json` のトークン名を使う。存在しないトークンは使わない |
38
+ | カスタムシャドウ(`box-shadow: ...`) | `tokens.json` の `shadow.*` を使う |
39
+ | カスタムボーダー半径(`border-radius: ...px`) | `tokens.json` の `radius.*` を使う |
40
+ | カスタムフォントサイズ・ウェイト | `tokens.json` の `typography.*` を使う |
41
+ | 新しい `<div>` ラッパーでレイアウト構造を作る | Card, Section, Stack 等のコンポーネントに置き換えられないか確認 |
42
+
43
+ **確認手順:**
44
+ 1. `contracts/components.json` で該当コンポーネントを検索
45
+ 2. Storybook(`npm run storybook`)で実際の見た目を確認
46
+ 3. DSに存在しない場合のみ、カスタム実装を許可(その場合はコメントで理由を記載)
47
+
48
+ ### 書いた後ゲート(強制)
49
+
50
+ `.tsx` `.css` `.module.css` を**1ファイルでも編集したら必ず実行**:
51
+
52
+ ```bash
53
+ bash scripts/lint-scratch.sh
54
+ ```
55
+
56
+ エラーが出た場合: **そのエラーを修正するまで次のタスクに進んではならない。**
57
+
58
+ > lint-scratch.sh が通っていないコードは未完成扱い。
59
+
60
+ ---
61
+
62
+ ## ドキュメント構成
63
+
64
+ | ファイル | 内容 |
65
+ |---------|------|
66
+ | **CLAUDE.md**(本ファイル) | 概要・技術スタック・コマンド(Claude Code用) |
67
+ | **AGENTS.md** | 同上(Codex用。セッション開始時の読み込み指示・編集後コマンドを明記) |
68
+ | **contracts/components.json** | 全103コンポーネントの構造化定義(バリアント・アクセシビリティ要件) |
69
+ | **contracts/rules.json** | 禁止パターン・アクセシビリティ要件・タイポグラフィ定義 |
70
+ | **tokens.json** | カラー・スペーシング・シャドウトークンの機械可読定義 |
71
+ | **CLAUDE_PRODUCTION.md** | 本番実装参照ルール・Figmaチェックリスト(Cake.jp固有) |
72
+
73
+ ---
74
+
75
+ ## デザインリソース
76
+
77
+ | リソース | URL |
78
+ |---------|-----|
79
+ | Figma Design System | https://www.figma.com/design/ExHuJOWJChJtk0qiskqEsI/Cake.jp-Design-System?node-id=18168-44099 |
80
+
81
+ ---
82
+
83
+ ## 技術スタック
84
+
85
+ - React 19 + TypeScript
86
+ - Vite(ビルド)
87
+ - Tailwind CSS v4(`@import "tailwindcss"` 構文。`@tailwind base` は v3 記法で使用禁止)
88
+ - shadcn/ui(Radix UI ベース、Cake.jp テーマ適用済み)
89
+ - Storybook(`@storybook/react-vite`)
90
+ - CVA(class-variance-authority)でバリアント管理
91
+ - Lucide React + iconsax-react(アイコン)
92
+
93
+ ---
94
+
95
+ ## ディレクトリ構成
96
+
97
+ ```
98
+ src/
99
+ ├── components/
100
+ │ ├── foundations/ # shadcn ベース汎用 UI(46個・全事業共通)
101
+ │ ├── primitives/ # 業界汎用パターン(35個・jobboard等他事業でも再利用可)
102
+ │ ├── ec/ # Cake.jp / EC 事業特化(23個・商品・配送・クーポン等)
103
+ │ └── pages/ # ページ単位のストーリー
104
+ ├── prototypes/ # /mock スキルで生成されたプロトタイプ
105
+ ├── lib/
106
+ │ └── utils.ts # cn() ユーティリティ
107
+ └── index.css # カラートークン定義 + Tailwind 設定
108
+ ```
109
+
110
+ ### 3層構造の依存ルール
111
+
112
+ ```
113
+ ec/ ← Cake.jp 特化(最上位)
114
+ ↓
115
+ primitives/ ← 業界汎用パターン
116
+ ↓
117
+ foundations/ ← shadcn ベース(最下位)
118
+ ```
119
+
120
+ - `foundations/` は他層に依存しない
121
+ - `primitives/` は `foundations/` のみ参照可
122
+ - `ec/` は `foundations/` と `primitives/` を参照可
123
+ - **逆方向の依存は禁止**(primitives から ec を import する等)
124
+
125
+ ---
126
+
127
+ ## コマンド
128
+
129
+ ```bash
130
+ # 開発サーバー(Storybook)
131
+ npm run storybook
132
+
133
+ # プロトタイプビューアー
134
+ npm run dev
135
+ # → http://localhost:5173/prototypes
136
+
137
+ # ビルド
138
+ npm run build-storybook
139
+
140
+ # パッケージビルド(npm install 時に自動実行)
141
+ npm run build:lib
142
+
143
+ # 型チェック
144
+ npx tsc --noEmit
145
+
146
+ # リント
147
+ npm run lint
148
+
149
+ # スクラッチ検出(実装後に必ず実行)
150
+ bash scripts/lint-scratch.sh
151
+
152
+ # コンポーネント再利用チェック
153
+ bash scripts/check-story-reuse.sh
154
+
155
+ # ドリフト検出(コンポーネント追加後に実行)
156
+ bash scripts/check-drift.sh
157
+
158
+ # 全チェック一括実行
159
+ npm run check
160
+ ```
161
+
162
+ ---
163
+
164
+ ## カラートークン早見表
165
+
166
+ | 用途 | トークン |
167
+ |------|---------|
168
+ | 背景(白) | `var(--color-white)` |
169
+ | ブランド色(メイン) | `var(--color-brand-500)` |
170
+ | テキスト(強) | `var(--color-gray-900)` |
171
+ | テキスト(中) | `var(--color-gray-600)` |
172
+ | テキスト(弱) | `var(--color-gray-400)` |
173
+ | エラー | `var(--color-red-500)` |
174
+ | 成功 | `var(--color-green-500)` |
175
+
176
+ 詳細は `tokens.json` を参照。
177
+
178
+ ---
179
+
180
+ ## コンポーネント追加時のチェックリスト
181
+
182
+ 新しいコンポーネントを追加したら、以下を必ず更新:
183
+
184
+ - [ ] `src/index.tsx` にエクスポートを追加
185
+ - [ ] `contracts/components.json` にコンポーネント定義を追加
186
+ - [ ] `contracts/components.json` の `meta.counts` を更新
187
+ - [ ] `bash scripts/check-drift.sh` を実行して乖離がないことを確認
188
+ - [ ] Storybook のストーリーファイル(`.stories.tsx`)を作成
@@ -0,0 +1,121 @@
1
+ # Cake.jp DS — 本番実装・Figma 参照ルール
2
+
3
+ > CLAUDE.md から分割。本番テンプレート・CSS・CDN アセットの参照ルール、Figma チェックリスト。
4
+
5
+ ## 本番実装の参照ルール(最重要)
6
+
7
+ 新しいコンポーネントの作成・既存コンポーネントの改善時は、**必ず本番の実装を最初に確認する**。
8
+ ゼロから再現するのではなく、**本番のアセット・パターンを再利用する**ことを第一とする。
9
+
10
+ ### 参照先ディレクトリ
11
+
12
+ | リソース | パス | 内容 |
13
+ |---------|------|------|
14
+ | 本番テンプレート | `/Users/okunokeisuke/Desktop/www-test-htdocs/app/views/elements/2023/` | CTP テンプレート(HTML構造の参考) |
15
+ | 本番CSS | `/Users/okunokeisuke/Desktop/www-test-htdocs/app/webroot/css/2023/cakejp.css` | 本番のスタイル定義 |
16
+ | 本番画像 | `/Users/okunokeisuke/Desktop/www-test-htdocs/app/webroot/img/` | ローカル画像アセット |
17
+ | 管理画面 | `/Users/okunokeisuke/Desktop/admin-test-htdocs/` | 管理画面の実装参考 |
18
+ | CDN | `https://assets.cake.jp/` | 本番で配信されている画像・アイコン |
19
+
20
+ ### 必須フロー
21
+
22
+ 1. **本番テンプレートを確認**: `www-test-htdocs/app/views/elements/2023/` で該当する CTP ファイルを探す
23
+ 2. **本番CSSを確認**: `cakejp.css` で該当クラスのスタイル定義を読む
24
+ 3. **アセットの再利用**: 本番で `assets.cake.jp` や `/img/` から読み込んでいる画像・アイコンは、**ダウンロードせずにそのまま同じ URL を参照する**
25
+ 4. **差分だけ実装**: 本番と同じ見た目・構造をベースに、React コンポーネント化する
26
+
27
+ ### 再現タスクのゲートルール(コード生成前に必ず実行)
28
+
29
+ ページ・コンポーネント・セクションの「再現」「作成」「モック」を依頼された場合、**コードを1行も書く前に**以下を完了すること。これは省略不可の前提条件であり、「本番を見なくても作れそう」という判断は禁止。
30
+
31
+ 1. **本番テンプレートを検索して読む** — 該当する `.ctp` ファイルを特定し、HTML 構造・セクション順序・クラス名を把握する
32
+ 2. **本番 CSS で該当クラスを読む** — `cakejp.css` からスタイル定義(幅・高さ・余白・色・レイアウト)を把握する
33
+ 3. **CDN アセット URL を収集する** — テンプレート内の `assets.cake.jp` や `/img/` の URL をそのまま使う準備をする
34
+ 4. **把握した内容をコメントとしてストーリーファイルの冒頭に残す** — どの `.ctp` / CSS クラスを参照したかを記録する(後から検証可能にするため)
35
+
36
+ ```tsx
37
+ // 参照元:
38
+ // - www-test-htdocs/app/views/elements/2023/m_top_xxx.ctp
39
+ // - cakejp.css: .m-top-xxx { ... }
40
+ // - CDN: https://assets.cake.jp/img/xxx/...
41
+ ```
42
+
43
+ **このゲートを通過していないコードは、どんなに見た目が良くても不合格とする。**
44
+
45
+ ### 禁止事項
46
+
47
+ | # | やらないこと | 理由 | 正しい対応 |
48
+ |---|------------|------|-----------|
49
+ | P1 | 本番を確認せずにコンポーネントを新規作成する | 本番に既にある実装と乖離する | まず `www-test-htdocs` を検索する |
50
+ | P2 | 本番の CDN 画像を SVG やコードで再現する | 見た目が異なり、メンテ不能になる | `assets.cake.jp` の URL をそのまま使う |
51
+ | P3 | CDN アセットをダウンロードしてローカルに置く | 本番更新時に追従できなくなる | CDN URL を直接参照する |
52
+ | P4 | 本番の CSS クラス名・バリアントを無視して独自命名する | 本番との対応が取れなくなる | 本番のバリアント体系を尊重する |
53
+
54
+ ### 確認コマンド例
55
+
56
+ ```bash
57
+ # 本番テンプレートで商品カード関連を探す
58
+ ls www-test-htdocs/app/views/elements/2023/m_card_*
59
+
60
+ # 本番CSSで特定クラスを検索
61
+ grep -n "m-card-item" www-test-htdocs/app/webroot/css/2023/cakejp.css
62
+
63
+ # 本番テンプレートでCDNアセットの使い方を確認
64
+ grep -r "assets.cake.jp" www-test-htdocs/app/views/elements/2023/
65
+ ```
66
+
67
+ ---
68
+
69
+
70
+ ## Figma コンポーネント実装チェックリスト
71
+
72
+ 新規コンポーネントを実装する際、またはFigmaのデザインを反映する際に**必ず**以下のステップを踏むこと。
73
+ 推測で値を決めない。
74
+
75
+ ### 1. Figma APIで実際のプロパティ値を取得する
76
+
77
+ Figma MCP の `get_design_context` を使って、実際のノードのプロパティを確認する。
78
+ MCP が使えない場合は REST API で取得:
79
+
80
+ ```bash
81
+ curl -s -H "X-Figma-Token: <PAT>" \
82
+ "https://api.figma.com/v1/files/<fileKey>/nodes?ids=<nodeId>&depth=3"
83
+ ```
84
+
85
+ ### 2. 確認すべきプロパティ
86
+ | プロパティ | 確認方法 | 間違いやすいポイント |
87
+ |-----------|---------|-------------------|
88
+ | **cornerRadius** | Figma API `cornerRadius` フィールド | トークン一覧の値と実際のコンポーネントで使われている値は異なる場合がある |
89
+ | **fills / colors** | Figma API `fills` フィールド | Variables で alias されている場合、解決後の値を確認 |
90
+ | **fontSize** | Figma API `style.fontSize` | typo-* のどれに対応するか照合 |
91
+ | **padding** | Figma API `paddingLeft/Right/Top/Bottom` | — |
92
+ | **height** | Figma API `absoluteBoundingBox.height` | — |
93
+
94
+ ### 3. トークン定義と実際のコンポーネント値が食い違った場合
95
+ - **コンポーネントの実際の値を優先する**(トークンはパレットであり、全てが使われるわけではない)
96
+ - 食い違いが見つかったらこの CLAUDE.md に明記して、次回以降の混乱を防ぐ
97
+
98
+ ---
99
+
100
+
101
+ ## Cake.jp 本番サイトとの対応
102
+
103
+ | 本番パターン | DS コンポーネント |
104
+ |------------|----------------|
105
+ | 商品一覧グリッド | `ProductCard` (vertical) |
106
+ | 商品一覧リスト | `ProductCard` (horizontal) |
107
+ | カート商品行 | `CartItem` (`ListItem variant="cart"` のラッパー) |
108
+ | 検索バー | `SearchBar` |
109
+ | 人気キーワード | `Chip` (filled) |
110
+ | ボトムナビ | `BottomTabBar` |
111
+ | カテゴリフィルター | `FilterBar` |
112
+ | クーポン | `CouponCard` |
113
+ | 商品画像ギャラリー | `ImageGallery` |
114
+ | ランキング表示 | `ProductCard` (ranking prop) |
115
+ | お届け日表示 | `DeliveryCalendar` |
116
+ | 注文ステップ | `ProgressSteps` |
117
+ | ショップカード | `ShopCard` |
118
+ | 評価表示 | `RatingStars` + `ReviewSummary` |
119
+
120
+ ---
121
+