フリマアプリ テンプレート 要件定義書
プロダクト名:Souzoh Market
「Claude Codeでフリマアプリを開発する方法と費用|テンプレート配布【2026年】」記事のデモアプリ。 母艦テンプレート(Souzoh SNS)からの3本目。前2本より固有画面が2つ多く、シリーズ中で最も重い1本です。
1. 目的とゴール
| 項目 | 内容 |
|---|---|
| コンセプト | 個人間で不用品を売買する、標準的なC2Cマーケットプレイス |
| 前2本との違い | SNS・Matchが「見て終わり」なのに対し、こちらは購入 → 取引が進行する。時間軸のあるUIが要る |
| 成功条件 | 読者が商品を1つ買い、取引画面のステッパーが動くところまで到達する |
| 非ゴール | 決済・配送・本人確認・手数料の実処理。すべてモックで通す |
重さの正体:固有画面が2つ(出品フォーム・取引画面)あり、さらに「購入前/購入後」で状態が分岐します。§9でセッションを5分割しているのはこのためです。
2. スコープ
2.1 作るもの
| # | 画面 | 優先度 | 母艦との関係 |
|---|---|---|---|
| K1 | 商品一覧(ホーム) | A | 母艦S1を2列グリッドに改修 |
| K2 | 商品詳細 | A | 母艦S2を改修 |
| K3 | 検索・絞り込み | A | 母艦S3を改修 |
| K4 | 出品フォーム | A | 新規(母艦S6モーダルを全画面フォームに拡張) |
| K5 | 取引画面(ステッパー) | A | 新規 |
| K6 | マイページ | B | 母艦S5を改修 |
| K7 | 取引メッセージ | B | 母艦S7をそのまま流用 |
| K8 | 通知 | C | 母艦S4をそのまま流用(時間がなければ落とす) |
2.2 作らないもの
- ❌ バックエンド・DB・認証・データ永続化(母艦と同じ)
- ❌ 実決済・配送連携・住所の実バリデーション
- ❌ 手数料・売上金・振込の実処理
- ❌ 画像の実アップロード(ピッカーで選ぶモック)
- ❌ 通報・取引キャンセル・返品フロー
- ❌ ダークモード、多言語、テストコード
2.3 デモデータの注意(配布物なので重要)
実在ブランド名・製品名を一切使いません。「国産セルビッジデニムのジャケット」「北欧デザインのフロアランプ」のように、一般名詞+特徴で表記します。テンプレートとして二次配布されるため、商標の混入は避けます。読者が自社商材に差し替える際もこのほうが編集しやすいです。
3. 技術構成
母艦と完全に同一。Vite + React 18(JSX)/Tailwind CSS v4/lucide-react/Cloudflare Pages。追加ライブラリなし。
画像カルーセルも自前です(scroll-snap-type: x mandatory + ドットインジケータ。約30行)。ライブラリを足すと、後続アプリにも重さが伝播します。
4. デザイン仕様
4.1 方向性
SNSは密度を意図的に下げ、Matchはカード1枚に集中させました。マーケットプレイスは逆で、密度が価値です。 一覧で20点が視界に入ることが「掘り出し物がありそう」という感覚を作ります。ここは既存の型に素直に従います。
白地に細い罫線と2列グリッド。色数を極端に絞り、画面上でいちばん強いのは価格の数字という状態を作ります。緑は購入ボタンと在庫バッジにしか使いません。
シグネチャー要素:取引ステッパー
K5の縦一本のライン。支払い完了 → 発送準備中 → 発送済み → 受取評価待ち → 取引完了 の5節を貫き、現在地のノードだけが緑でゆっくり脈打ちます。完了済みは実線、未到達は破線。
フリマの本質は「買った瞬間」ではなく「取引が進んでいく数日間」なので、アプリで唯一の演出をここに置きます。カードの装飾ではなく、時間の経過を表す構造に予算を使う判断です。
4.2 デザイントークン(src/theme.css)
@theme {
/* ---- Color ---- */
--color-bg: #FFFFFF; /* 白基調。マーケットは商品の色が主役 */
--color-surface: #FFFFFF;
--color-surface-2: #F3F4F1; /* 画像プレースホルダ・入力欄 */
--color-ink: #101410;
--color-ink-sub: #6B706B;
--color-line: #E3E5E0; /* 罫線が構造を作る。多用してよい唯一の線 */
--color-accent: #0A8F3C; /* ビビッドグリーン:購入・出品・在庫 */
--color-sale: #E5484D; /* 値下げ・残りわずか。ここぞでしか使わない */
--color-sold: #9AA09A; /* SOLD時の脱色 */
/* ---- Type ---- */
--font-display: "Archivo", "Zen Kaku Gothic New", sans-serif; /* 700/800 */
--font-body: "Noto Sans JP", sans-serif; /* 400/500 */
--font-price: "Archivo", sans-serif; /* 800 + tabular-nums */
--font-num: "Roboto Mono", monospace; /* 出品日・件数 */
/* ---- Scale ---- */
--text-price-lg: 30px/1.1; /* 詳細画面の価格 */
--text-price-sm: 17px/1.2; /* 一覧カードの価格 */
--text-title: 18px/1.45;
--text-body: 14px/1.75;
--text-meta: 11px/1.4;
/* ---- Space ---- */
--space-1: 4px; --space-2: 8px; --space-3: 12px;
--space-4: 16px; --space-6: 24px; --space-8: 32px;
/* ---- Shape ---- */
--radius-card: 12px; /* 前2本(20/24px)より小さく。商品を「陳列」する硬さ */
--radius-input: 10px;
--radius-pill: 999px;
--shadow-card: none; /* ★影を使わない。罫線と余白だけで階層を作る */
--shadow-pop: 0 12px 40px rgba(16,20,16,.16); /* モーダルのみ */
}
--shadow-card: noneは意図的です。 一覧に20枚のカードが並ぶとき、全部に影が付くと画面がざらつきます。罫線1本のほうが密度に耐えます。
価格の表記ルール(全画面で統一)
¥12,800 ← --font-price / 800 / tabular-nums / letter-spacing: -0.01em
送料込み ← --text-meta / --color-ink-sub
値下げ時のみ、旧価格を --color-ink-sub の取り消し線で右に小さく添える。
4.3 レイアウト
| 仕様 | |
|---|---|
| モバイル(〜768px) | 2列グリッド、gap 8px。下部固定タブバー |
| PC(769px〜) | 中央 960px、4列グリッド。左に幅240pxの縦ナビ |
| 商品カード | 正方形画像 + 直下に価格(太字)+ 商品名2行まで(line-clamp: 2) |
| SOLDカード | 画像を grayscale(1) opacity(.55)、左上に SOLD の黒帯 |
| 詳細の画像 | 1:1、横スワイプのカルーセル + 下部ドット |
prefers-reduced-motion |
ステッパーの脈打ちを停止 |
★PCの中央幅が前2本(600px / 400pxカード)と違うのは、グリッドの列数を稼ぐためです。
shell/の最大幅をapp.config.jsから指定できるよう、母艦側にlayout.maxWidthを追加してください(他2本には影響しません)。
4.4 画像
母艦と同一。image.seed からグラデーションを決定的に生成し、public/images/{seed}.jpg を置けば実写に差し替わります。
このアプリだけは実写を推奨します。 商品写真がグラデーションだと「フリマらしさ」が出ません。記事公開前に、一覧の上位8点だけでも差し替えると見栄えが変わります。
5. 画面仕様
K1. 商品一覧(ホーム)
- ヘッダー:検索バー(常時表示)/通知アイコン
- カテゴリチップ横スクロール:
すべて / レディース / メンズ / 家電 / インテリア / 本・音楽 / ホビー / ハンドメイド / アウトドア / ベビー - 2列グリッド。無限スクロールで既存データをシャッフル追加(最大2回)
- カード左下に♡(タップでトグル、数字連動)
- 初回ロード:スケルトン500ms
K2. 商品詳細
上から順に:
- 画像カルーセル(1:1、ドット付き)。SOLD時は帯を重ねる
- 商品名 / 価格(
--text-price-lg)/送料込みタグ - 属性テーブル:
カテゴリ状態配送方法発送目安出品地域 - 商品説明(改行保持)
- 出品者行:アバター・名前・
評価 128件・本人確認済みバッジ。タップでその人の出品一覧へ - コメント欄(3〜5件)+ 投稿フォーム
- 下部固定バー:♡ /
値下げを依頼/購入手続きへ(緑・幅の6割)
値下げ依頼:タップ → 3択(10% 15% 20% オフ)→ 送信 → 1.5秒後に出品者から自動返信。
- 10% → 承諾。価格が更新され、旧価格に取り消し線が付く + トースト「値下げされました」
- 15% / 20% → やんわり辞退(「送料を負担しているので、これ以上は難しいです」)
ここがこのアプリで一番"生きている"瞬間になります。優先度Aです。
購入手続き(2ステップのモーダル)
- 配送先の確認(ダミー住所がプリセット済み。
変更押下でトースト「デモでは変更できません」)+ 支払い方法の3択ラジオ - 内容確認 →
購入を確定する→ 成功アニメーション → K5取引画面へ自動遷移
SOLD商品では下部バーが 売り切れました の非活性表示に変わる。
K3. 検索・絞り込み
- 検索バー:入力に応じて商品名・説明を部分一致で絞り込み
- 絞り込みパネル(下からせり上がる):
カテゴリ価格帯(下限・上限)状態販売状況(売り切れを含む/含まない) - 並び替え:
新着順/価格が安い順/価格が高い順/いいねが多い順 - 適用中の条件をチップで表示、×で個別解除
- 空状態:「条件に合う商品がありません」+
価格帯を広げるボタン
K4. 出品フォーム ★固有画面
全画面フォーム。上から:
| # | 項目 | 仕様 |
|---|---|---|
| 1 | 写真 | 4枠のプレースホルダ。タップでダミー画像ピッカー(6枚から選択)。1枚目が必須 |
| 2 | 商品名 | 40字。カウンター表示 |
| 3 | 説明 | 1000字。プレースホルダに記入例を薄く表示 |
| 4 | カテゴリ | セレクト(K1と同じ9分類) |
| 5 | 状態 | 5択チップ:新品・未使用 未使用に近い 目立った傷や汚れなし やや傷や汚れあり 全体的に状態が悪い |
| 6 | 配送料の負担 | 2択:送料込み(出品者負担) / 着払い(購入者負担) |
| 7 | 発送目安 | 3択:1〜2日で発送 2〜3日で発送 4〜7日で発送 |
| 8 | 価格 | 数値入力。300円以上9,999,999円以下。下に手数料内訳をリアルタイム表示 |
手数料の内訳表示(K4の見せ場)
販売価格 ¥ 3,500
販売手数料 10% − ¥ 350
配送料の目安 − ¥ 750
────────────────────
販売利益 ¥ 2,400 ← --color-accent で強調
価格を入力するたびに即座に再計算。数字が動くだけでフォームの説得力が変わります。 実装は掛け算1行です。
- 下部固定:
出品する(必須項目が埋まるまで非活性) - 出品成功 → K1先頭に自分の商品が挿入 + トースト + マイページの「出品中」に追加
K5. 取引画面 ★固有画面・シグネチャー
上部:商品サムネ・商品名・価格・取引相手
中央:縦ステッパー
| 節 | 表示内容 |
|---|---|
| 1 支払い完了 | 日時・支払い方法 |
| 2 発送準備中 | 「出品者が発送準備をしています」 |
| 3 発送済み | 追跡番号(ダミー)・配送状況を見る(トースト) |
| 4 受取評価待ち | 受け取りを完了する ボタン(緑) |
| 5 取引完了 | 評価の記録 |
- 完了済み:実線・緑の塗りノード/現在地:緑の輪郭 + 2.4秒周期でゆっくり脈打つ/未到達:破線・グレー
受け取りを完了するを押すと:評価モーダル(良かった/普通/悪かったの3択 + コメント任意)→ 送信 → ステッパーが5まで進み、緑のラインが下まで繋がるアニメーション(600ms)
★このアプリでは取引評価を入れます。Matchで星評価を外したのは実体のない信用の可視化だったからで、こちらは完了した取引が根拠になるので筋が通ります。
下部:取引メッセージ(K7を開く)
デモの進行:既存取引2件はそれぞれ「発送準備中」「受取評価待ち」の状態で用意。新規購入した商品は1秒後に自動で2へ、さらに4秒後に3へ進みます(読者が待たずに全ノードを見られる)。
K6. マイページ
- タブ:
出品中/売却済み/購入した商品/いいね - 上部に簡易サマリー:
出品中 4取引中 2売上金 ¥14,300(--font-price) - 各アイテムはリスト形式(一覧のグリッドとは別レイアウト)。取引中のものはタップでK5へ
K7. 取引メッセージ
母艦S7をそのまま流用。取引画面から開く。送信1.2秒後に autoReply から定型返信。
6. データモデル
// item
{ id:"i01", title:"国産セルビッジデニムのジャケット",
price:8800, prevPrice:null, // 値下げ後に旧価格が入る
category:"メンズ",
condition:"目立った傷や汚れなし",
shipping:"送料込み", shipDays:"1〜2日で発送", area:"東京都",
description:"...", // 改行を含む
images:[{seed:"denim-jacket-1"},{seed:"denim-jacket-2"}],
sellerId:"s02", likes:34, liked:false,
status:"onsale"|"sold",
listedAt:"2026-07-19T10:30:00+09:00",
comments:[{ userId:"s05", body:"...", at:"..." }] }
// seller
{ id:"s02", name:"みなと古物店", ratings:128, verified:true, area:"東京都" }
// transaction
{ id:"t01", itemId:"i21", role:"buyer"|"seller",
step:2, // 1〜5
paidAt:"...", method:"クレジットカード",
tracking:"4912-8830-1177",
messages:[{ from:"me"|"them", body:"...", at:"14:02" }],
autoReply:["ありがとうございます、明日発送します","発送しました!"] }
// 手数料計算(定数は1箇所にまとめ、JSXに数値を書かない)
fee = Math.floor(price * FEE_RATE) // FEE_RATE = 0.10
shipCost = shipping === "送料込み" ? SHIP_COST : 0 // SHIP_COST = 750
profit = price - fee - shipCost
7. デモデータ
7.1 出品者(8名)
| id | 名前 | 評価件数 | 本人確認 | エリア |
|---|---|---|---|---|
| s00 | あなた | 12 | ✓ | 東京都 |
| s01 | 森のちいさな倉庫 | 341 | ✓ | 長野県 |
| s02 | みなと古物店 | 128 | ✓ | 東京都 |
| s03 | ひなた | 46 | — | 大阪府 |
| s04 | 陶ト暮ラス | 89 | ✓ | 岐阜県 |
| s05 | ヨシダ | 7 | — | 福岡県 |
| s06 | 本棚の整理中 | 213 | ✓ | 神奈川県 |
| s07 | camp_and_coffee | 64 | ✓ | 静岡県 |
7.2 商品(24点)
| id | 商品名 | カテゴリ | 価格 | 状態 | 出品者 | 送料 | ♡ | 販売状況 |
|---|---|---|---|---|---|---|---|---|
| i01 | 国産セルビッジデニムのジャケット | メンズ | 8,800 | 目立った傷や汚れなし | s02 | 込み | 34 | 販売中 |
| i02 | 北欧デザインのフロアランプ | インテリア | 12,500 | 未使用に近い | s01 | 込み | 89 | 販売中 |
| i03 | 手びねりの粉引マグカップ 2客セット | ハンドメイド | 3,500 | 新品・未使用 | s04 | 込み | 57 | 販売中 |
| i04 | ドリップ用の細口ケトル 0.9L | 家電 | 4,200 | 目立った傷や汚れなし | s07 | 込み | 22 | 販売中 |
| i05 | 無垢材のローテーブル 幅90cm | インテリア | 18,000 | やや傷や汚れあり | s01 | 着払い | 41 | 販売中 |
| i06 | ウール混のチェスターコート M | レディース | 6,900 | 目立った傷や汚れなし | s03 | 込み | 76 | 販売中 |
| i07 | 建築とデザインの写真集 3冊まとめ | 本・音楽 | 2,800 | やや傷や汚れあり | s06 | 込み | 18 | 販売中 |
| i08 | 2人用の軽量テント 総重量1.9kg | アウトドア | 21,000 | 未使用に近い | s07 | 込み | 133 | 販売中 |
| i09 | 真鍮のデスクトレー | インテリア | 2,400 | 新品・未使用 | s04 | 込み | 29 | 販売中 |
| i10 | リネン100%のワイドパンツ | レディース | 3,200 | 目立った傷や汚れなし | s03 | 込み | 44 | 販売中 |
| i11 | 卓上のミニ扇風機 USB給電 | 家電 | 1,500 | 未使用に近い | s05 | 込み | 11 | 販売中 |
| i12 | 木製のパズル 48ピース(3歳〜) | ベビー | 1,800 | 目立った傷や汚れなし | s03 | 込み | 25 | 販売中 |
| i13 | 昭和期のガラス製保存瓶 3点 | ホビー | 5,600 | やや傷や汚れあり | s02 | 込み | 68 | 販売中 |
| i14 | アナログレコード 邦楽 5枚セット | 本・音楽 | 4,400 | 目立った傷や汚れなし | s06 | 込み | 37 | 販売中 |
| i15 | 焚き火用の折りたたみグリル | アウトドア | 7,800 | やや傷や汚れあり | s07 | 着払い | 52 | 販売中 |
| i16 | 織りのラグ 140×200cm | インテリア | 14,000 | 未使用に近い | s01 | 着払い | 95 | 販売中 |
| i17 | 刺し子のふきん 3枚組 | ハンドメイド | 1,200 | 新品・未使用 | s04 | 込み | 16 | 販売中 |
| i18 | レザーのトートバッグ A4対応 | メンズ | 9,600 | 目立った傷や汚れなし | s02 | 込み | 71 | 販売中 |
| i19 | ホーローの片手鍋 16cm | 家電 | 2,900 | 未使用に近い | s05 | 込み | 20 | 販売中 |
| i20 | 児童書 まとめて12冊 | 本・音楽 | 2,200 | やや傷や汚れあり | s06 | 込み | 9 | 販売中 |
| i21 | 手編みのニットキャップ | ハンドメイド | 2,600 | 新品・未使用 | s04 | 込み | 33 | SOLD |
| i22 | 折りたたみの木製チェア | アウトドア | 5,200 | 目立った傷や汚れなし | s07 | 込み | 47 | SOLD |
| i23 | ベビーカー用のフットマフ | ベビー | 3,800 | 未使用に近い | s03 | 込み | 14 | SOLD |
| i24 | 古い地図帳 1970年代 | ホビー | 6,000 | やや傷や汚れあり | s02 | 込み | 58 | SOLD |
商品説明の例(i03。この温度感で全点用意)
ろくろではなく手びねりで成形しています。
ひとつずつ形が少し違うので、写真の2客をそのままお送りします。
容量:約240ml
高さ:約8.5cm
電子レンジ・食洗機ともに使えます。
粉引のため、使い込むと少しずつ色が変わっていきます。
7.3 コメント(i02・i08・i16 に付与)
| itemId | 投稿者 | 本文 |
|---|---|---|
| i02 | s05 | 電球は付属しますか? |
| i02 | s01 | 付属しません。E26の口金です |
| i08 | s03 | 前室の広さはどのくらいでしょうか |
| i08 | s07 | 実測で幅120cm×奥行65cmほどです |
| i08 | s03 | ありがとうございます、検討します |
| i16 | s06 | 裏面の滑り止めは付いていますか |
| i16 | s01 | 付いていません。別途ラグパッドをおすすめします |
7.4 進行中の取引(2件)
| id | 商品 | 立場 | 現在の節 | 相手 | autoReply |
|---|---|---|---|---|---|
| t01 | i21 手編みのニットキャップ | 購入者 | 2 発送準備中 | s04 陶ト暮ラス | 「明日の午前に発送します」/「発送しました。追跡番号をお送りします」 |
| t02 | i22 折りたたみの木製チェア | 購入者 | 4 受取評価待ち | s07 camp_and_coffee | 「無事に届きましたでしょうか」/「ありがとうございました!」 |
7.5 マイページ初期値
- 出品中:
i09i17+ 自分の出品2点(i25ワークシャツ 4,200円 /i26帆布のエプロン 3,300円) - 売却済み:1点(
i27木製のカッティングボード 2,800円) - 売上金:
¥14,300 - いいね:
i02i08i16
8. ディレクトリ構成
souzoh-market/
├── public/images/ ← ★実写推奨(上位8点だけでも)
├── src/
│ ├── theme.css ★差し替え済み(§4.2)
│ ├── app.config.js ★差し替え(下記)
│ ├── data/
│ │ ├── items.js sellers.js transactions.js me.js
│ ├── components/ui/ ← 母艦からコピー。触らない
│ │ ├── Price.jsx ← ★追加:価格表記の統一(送料込み・取り消し線)
│ │ ├── Carousel.jsx ← ★追加:scroll-snapの画像カルーセル
│ │ └── Stepper.jsx ← ★追加:縦ステッパー
│ ├── components/shell/ ← 母艦からコピー(layout.maxWidth 対応を追加)
│ ├── features/
│ │ ├── browse/ ← 母艦 timeline/ を改修
│ │ ├── item-detail/ ← 母艦 post-detail/ を改修
│ │ ├── search/ my-page/ notifications/
│ │ ├── listing/ ★新規:出品フォーム
│ │ ├── checkout/ ★新規:購入モーダル
│ │ ├── transaction/ ★新規:取引画面
│ │ └── chat/ ← 母艦 dm/ をそのまま
│ ├── store.js
│ └── main.jsx
└── README.md
// app.config.js
export default {
appName: "Souzoh Market",
tagline: "使わなくなったものに、次の人を",
layout: { maxWidth: 960, gridCols: { sm: 2, lg: 4 } },
nav: [
{ key:"browse", label:"さがす", icon:"Search" },
{ key:"likes", label:"いいね", icon:"Heart" },
{ key:"listing", label:"出品", icon:"PlusSquare" },
{ key:"notify", label:"お知らせ", icon:"Bell" },
{ key:"mypage", label:"マイページ", icon:"User" },
],
labels: {
listTitle: "みんなの出品",
itemNoun: "商品",
createCta: "出品する",
primaryAction: "いいね",
},
};
★
navの中央が「出品」なのは意図的です。フリマアプリで最も価値の高い行動は出品であり、タブバーの中央は最も押しやすい位置です。SNSの投稿FABと同じ思想を、このアプリではタブに埋め込みます。
9. 実装手順(Claude Codeへの投げ方)
このアプリだけ5分割です。 固有画面が2つあり、購入前後で状態が分岐するためです。
| Session | やること | 冒頭で読ませるもの |
|---|---|---|
| 0 | 母艦を複製 → theme.css app.config.js data/ を差し替え、shell/ に layout.maxWidth 対応を追加。画面は触らずビルドを通す |
§4.2・§7・§8 |
| 1 | ui/ に Price / Carousel / Stepper を追加 + K1一覧 |
§4.2・§4.3・§5(K1) |
| 2 | K2商品詳細(値下げ依頼まで) | §5(K2)・§6 |
| 3 | K4出品フォーム(手数料内訳を含む) | §5(K4)・§6 |
| 4 | K5取引画面 + 購入モーダル + K7チャット接続 | §5(K2購入手続き・K5)・§7.4 |
| 5 | K3検索 + K6マイページ + K8通知 + 仕上げ | §5(K3,K6)・§10 |
Session 1で ui/ の3点を先に作り切ってください。 Price と Stepper は後続の全画面から呼ばれます。ここを後回しにすると、各画面で微妙に違う価格表記が量産され、統一の手戻りが発生します。前2本より部品が多い分、この順序がそのまま費用に効きます。
Session 3 の指示文テンプレ:
添付の要件定義書 §5(K4) と §6 の手数料計算を実装してください。
src/components/ui/ の Price コンポーネントは完成済みです。金額表示は必ずこれを使ってください。
手数料率と配送料の目安は定数として1箇所にまとめ、JSX内に数値を直接書かないでください。
色・余白・角丸は src/theme.css の変数のみを使ってください。
実装前に、作成・変更するファイルの一覧だけ先に提示してください。
10. 受け入れ基準
- 一覧 → 詳細 → 購入 → 取引画面 が一続きで通る
- 値下げ依頼の10%で価格が更新され、旧価格に取り消し線が付く
- 出品フォームで価格を入力すると、販売利益が即座に再計算される
- 必須項目が埋まるまで
出品するが非活性 - 出品するとK1先頭とマイページ「出品中」の両方に反映される
- 取引ステッパーが 2 → 3 へ自動で進み、受取評価で5まで到達する
- SOLD商品はグレースケール+帯で表示され、購入できない
- 絞り込みの条件チップが個別に解除できる
- 価格表記が全画面で同一(
Priceコンポーネント経由) - 実在ブランド名がデータに1つも含まれていない
- 375px幅と1440px幅で崩れない
-
prefers-reduced-motion: reduceでステッパーの脈打ちが止まる -
npm run buildが警告なく通り、Cloudflare Pagesで表示される
11. 母艦テンプレからの再利用率
| 領域 | 扱い |
|---|---|
components/ui/ 8点 |
そのまま + 3点追加(Price / Carousel / Stepper) |
components/shell/ |
ほぼそのまま(layout.maxWidth 対応のみ追加。母艦にも還元する) |
store.js |
骨格そのまま。取引の状態遷移だけ新規 |
| チャット(K7)・通知(K8) | そのまま |
| 一覧・詳細・検索・マイページ | 構造流用、中身差し替え |
| 出品フォーム・購入・取引(K4・K5) | 完全新規 |
前2本より重いのは事実ですが、重いのは3画面だけです。残りは母艦がそのまま効きます。
12. 補足:コスト感
シリーズ中で最も掛かる1本です。掛かる場所は事前に分かっていて、①出品フォームのバリデーション条件分岐、②取引ステッパーの状態遷移、の2点。どちらも仕様が曖昧だと往復が伸びるタイプなので、本書では必須項目・節の名前・自動進行の秒数まで数値で確定させています。そのまま渡せば追加の質問はほぼ出ないはずです。
逆にここで作った Price / Carousel / Stepper は、デリバリー(注文ステータス)と学習(進捗)でそのまま再利用できます。残り2本が軽くなる投資でもあるので、この順番で作る価値があります。

