03 技術スタック
3.1 monorepo 構成
robot-bot/ # アプリケーションリポジトリ(別リポジトリ)
├── apps/
│ ├── web/ # SvelteKit + shadcn-svelte + Tailwind CSS
│ ├── api/ # Hono (TypeScript) 自宅鯖 API
│ ├── bot/ # discord.js (TypeScript)
│ └── worker/ # Hono CF Workers(CF 側 API 専用)
├── packages/
│ ├── db/ # drizzle-orm
│ │ ├── schema/ # 共通スキーマ定義
│ │ ├── postgres/ # PostgreSQL 用マイグレーション
│ │ ├── turso/ # Turso 用マイグレーション
│ │ └── d1/ # D1 用マイグレーション
│ ├── types/ # 共通型定義・API エンドポイント定義
│ ├── commands/ # Discord コマンド定義(bot・web 共用)
│ └── config/ # 共通設定・環境変数定義
├── turbo.json
├── pnpm-workspace.yaml
└── package.json
3.2 ライブラリ一覧
| 区分 | ライブラリ |
|---|---|
| WebUI | SvelteKit |
| UI コンポーネント | shadcn-svelte |
| CSS フレームワーク | Tailwind CSS |
| 自宅鯖 API | Hono (TypeScript) |
| CF Workers API | Hono (TypeScript) |
| DiscordBOT | discord.js (TypeScript) |
| ORM | drizzle-orm |
| パッケージ管理 | pnpm |
| monorepo | Turborepo |
| 認証 | 自前実装 |
| デバイス識別 | FingerprintJS(詳細モード) |
3.3 API 共通化方針
自宅鯖 API と CF Workers API は機能差なし・同一コードを利用。
DB アクセス部分のみ環境変数で切り替える。
packages/db/client.ts # 環境変数で PostgreSQL / Turso / D1 を切り替え
packages/types/api/routes.ts # エンドポイント定義・リクエスト/レスポンス型
3.4 DB 切り替え方針
| 環境 | 使用 DB |
|---|---|
| 自宅鯖(通常時) | PostgreSQL |
| CF Workers(通常時) | Turso |
| CF Workers(Turso 障害時) | D1 |
| 自宅鯖(ローカル開発) | PostgreSQL |