v0(React)で作成した不動産案件管理システムを、Svelte 5 (Runes) + SvelteKit + Tailwind CSS にリファクタリングしたサンプルです。
| 項目 | 技術 |
|---|---|
| フレームワーク | SvelteKit(最新版) |
| 状態管理 | Svelte 5 Runes($state, $derived, $effect, $props) |
| スタイル | Tailwind CSS v4 |
| アイコン | lucide-svelte |
| 言語 | TypeScript |
/)/assessment/[id])src/
├── lib/
│ ├── components/ # コンポーネント(3分類)
│ │ ├── layout/ # ページ枠組み(ヘッダーなど)
│ │ │ └── DashboardHeader.svelte
│ │ ├── shared/ # 共通UIパーツ(ボタン・カード・入力など)
│ │ │ ├── Button.svelte
│ │ │ ├── Card.svelte, CardHeader.svelte, CardTitle.svelte, CardContent.svelte, CardFooter.svelte
│ │ │ ├── Input.svelte, Label.svelte, Checkbox.svelte, Select.svelte
│ │ │ └── ...
│ │ └── specific/ # 機能専用(査定・案件一覧など)
│ │ ├── SummaryCards.svelte
│ │ ├── PropertyList.svelte
│ │ ├── AssessmentForm.svelte
│ │ ├── KpiCards.svelte
│ │ ├── IncomeBreakdown.svelte
│ │ └── RentRoll.svelte
│ ├── types/ # 型定義
│ │ └── index.ts # Property, RentRollItem, PropertyStatus
│ ├── utils/
│ │ └── mockProperties.ts # モックデータ
│ └── utils.ts # cn() などユーティリティ
├── routes/
│ ├── +layout.svelte # 共通レイアウト
│ ├── +page.svelte # ダッシュボード
│ └── assessment/
│ └── [id]/+page.svelte # 査定ページ
├── app.css # Tailwindテーマ・グローバルCSS
└── app.html
pnpm install
pnpm dev
ブラウザで http://localhost:5173 を開くとダッシュボードが表示されます。案件行をクリックすると査定ページに遷移します。
pnpm build # 本番ビルド
pnpm preview # ビルド結果のプレビュー
pnpm check # svelte-check(型・構文チェック)
pnpm lint # Prettier + ESLint
pnpm format # Prettier でフォーマット
src/lib/utils/mockProperties.ts のモック配列を利用しています。src/routes/+page.svelte で $state(properties) を保持し、集計値は各コンポーネント内で $derived により算出しています。[id] に応じてモックから該当物件を取得し、$state(formData) と $derived.by() でフォームとKPI計算を連動させています。.cursorrules を参照