旅行計画Webアプリケーション。
- モノレポ: Turborepo + bun workspaces
- フロントエンド: Next.js 15 (App Router) + Tailwind CSS v4 + shadcn/ui
- API: Hono (Next.js Route Handler 統合)
- データベース: Supabase PostgreSQL + Drizzle ORM
- リアルタイム同期: Supabase Realtime (Broadcast + Presence)
- 認証: Better Auth (メール/パスワード、招待制)
- バリデーション: Zod (共有スキーマ)
- リンター/フォーマッター: Biome
- Git フック: lefthook (pre-commit / commit-msg / pre-push)
- デプロイ: Vercel
- bun >= 1.0
- Supabase CLI
- Docker (Supabase CLI が内部で使用)
bun install
supabase start
bun run db:push
bun run db:seedbun installで依存関係をインストール (lefthook も自動セットアップ)supabase startでローカル Supabase を起動 (PostgreSQL, Realtime など)bun run db:pushで DB スキーマを反映bun run db:seedで開発用シードデータを投入
apps/web/.env.example をコピーして .env.local を作成:
cp apps/web/.env.example apps/web/.env.localsupabase status で取得した値を設定する。
supabase start # ローカル Supabase を起動
bun run --filter @sugara/web dev # Next.js 開発サーバーを起動- Web: http://localhost:3000
- API: http://localhost:3000/api (Next.js Route Handler)
- Supabase Studio: http://127.0.0.1:54323
supabase db reset
bun run db:push
bun run db:seedプロジェクトルートから実行:
bun run build # 全パッケージビルド
bun run test # 全テスト実行 (Vitest)
bun run lint # 全パッケージ lint (Biome)
bun run format # 全パッケージ format (Biome)
bun run check # lint + format + import sort (Biome)
bun run check-types # TypeScript 型チェック
bun run db:push # DB スキーマ反映
bun run db:generate # マイグレーション生成
bun run db:migrate # マイグレーション実行
bun run db:studio # Drizzle Studio 起動
bun run db:seed # 開発用シードデータ投入
bun run db:seed-user # 本番用ユーザー作成 (環境変数で指定)パッケージ単位の実行:
bun run --filter @sugara/api test
bun run --filter @sugara/web lint
bun run --filter @sugara/shared check-typessugara/
├── apps/
│ ├── web/ # Next.js フロントエンド + API Route Handler
│ └── api/ # Hono API (Route Handler として統合)
├── packages/
│ └── shared/ # 共有 Zod スキーマ・型定義
├── supabase/ # Supabase CLI 設定
├── biome.json # Biome 設定 (lint/format)
├── lefthook.yml # Git フック設定
└── turbo.json # Turborepo 設定