新機能やコード変更時にアーキテクチャの妥当性を検証する。 簡易DDD構成、レイヤー分離、依存方向の正しさをチェック。
コード変更時にアーキテクチャの妥当性を検証する。
┌─────────────────────────────────────────────────┐
│ Presentation Layer │
│ (app/**/*.tsx - Pages/UI) │
└────────────────────┬────────────────────────────┘
│ 呼び出し可
┌────────────────────▼────────────────────────────┐
│ Application Layer │
│ (app/api/**/*.ts - Route Handlers) │
└────────────────────┬────────────────────────────┘
│ 呼び出し可
┌────────────────────▼────────────────────────────┐
│ Domain Layer │
│ (src/modules/**/service.ts - Services) │
└────────────────────┬────────────────────────────┘
│ 呼び出し可
┌────────────────────▼────────────────────────────┐
│ Infrastructure Layer │
│ (src/db/drizzle.ts, src/lib/auth.ts - DB/Auth) │
└─────────────────────────────────────────────────┘
| ディレクトリ | 責務 | 配置するもの |
|---|---|---|
app/(app)/**/*.tsx | Presentation | ページ、UI コンポーネント |
app/api/**/*.ts | Application | Route Handlers、認可チェック |
src/modules/**/ | Domain | サービス、型定義、ビジネスロジック |
src/db/ | Infrastructure | スキーマ、DB クライアント |
src/lib/ | Infrastructure | 認証、共通ユーティリティ |
src/components/ | Presentation | 共通 UI コンポーネント |
src/hooks/ | Presentation | カスタムフック |
新規機能の場合、以下の構成になっているか:
src/modules/{feature}/
├── service.ts # ビジネスロジック
├── types.ts # 型定義
└── __tests__/ # テスト
app/api/
├── me/{feature}/ # 認証必須の個人リソース
│ ├── route.ts # GET(一覧), POST(作成)
│ └── [id]/route.ts # GET, PUT, DELETE(個別)
└── {feature}/ # 公開リソース
許可される依存:
app/api/* → src/modules/*/service.ts → src/db/*
app/(app)/* → src/hooks/* → app/api/*
禁止される依存:
src/modules/* → app/*
src/db/* → src/modules/*
src/lib/* → app/*
// app/api/me/cards/route.ts - NG
import { db } from "@/db/drizzle";
const cards = await db.select().from(cardsTable);
// app/api/me/cards/route.ts - OK
import { getCards } from "@/modules/cards/service";
const cards = await getCards(userId);
// app/(app)/cards/page.tsx - NG
import { db } from "@/db/drizzle";
// app/(app)/cards/page.tsx - OK
import { useCards } from "@/hooks/use-cards";
配置場所は適切か
src/modules/{feature}/service.tssrc/modules/{feature}/types.tsapp/api/me/{feature}/route.ts依存方向は正しいか
責務が分離されているか