Bun + TypeScript 7 + Hono + TanStack Query/Router + Clean Architecture template.
packages/domain- Entities (Zod + const object), DomainErrorspackages/application- UseCases, Portspackages/infrastructure- Repositories (Drizzle mapper, InMemory)packages/contract-createApp(deps)+ DTOs + error mapping (hono/client typed)packages/shared-ServerError,parseOrThrow,zod-helperspackages/config-test.forhelperapps/api- Composition root (createApp+Bun.serve)apps/web- Vite + React + TanStack Router/Query + Tailwind
See skills/*/SKILL.md (source of truth is code, skills describe core ideas).
architecture,domain-entity,domain-error,application-usecase,infrastructure-repository,contract,testing
bun install
cp apps/web/.env.example apps/web/.env
bun run typecheck
bun run test
# terminal 1
bun run --filter @repo/api dev
# terminal 2
bun run --filter @repo/web dev開発時はapps/web/.env.exampleをapps/web/.envにコピーしてからAPIとWebを起動します。Webの/apiリクエストはVite proxy経由でAPI(localhost:3000)へ転送されます。
- 通常の公開APIは各packageのroot(例:
@repo/domain、@repo/application)からimportします。 - テスト専用のfactoryだけは
@repo/domain/testingからimportします。 - package内部では、公開APIを経由せず同一package内の相対パスを使います。
srcへのdeep importはpackage境界を壊すため、exportsに明示したもの以外は使いません。