generic-fullstack-feature-developer について
Next.js/NestJS のフルスタックアプリ開発向けの機能開発ガイドです。汎用的な開発手順を補い、データフロー、Prisma、認証、実装チェックリストを扱います。
主な機能
- 01Next.js App Router のパターン
- 02NestJS モジュール構成
- 03Prisma スキーマとマイグレーション手順
- 04JWT 認証フロー
- 05フルスタック機能のチェックリスト
活用シーン
- 01機能のデータモデルと API の計画
- 02NestJS モジュールとフロントエンドコンポーネントの実装
- 03Prisma スキーマ変更のマイグレーション作成
- 04認証、エラー処理、型の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ travisjneuman/ .claude --skill generic-fullstack-feature-developerインストール後、Claude Code で/generic-fullstack-feature-developerを入力して読み込まれたか確認します。
詳細
フルスタック機能開発者
Next.js/NestJS のフルスタックアプリケーションで機能を開発するためのガイドです。
拡張元: 汎用機能開発者 - 開発ワークフロー、意思決定のフレームワーク、データフローパターン、エラー処理については、基本スキルをお読みください。
フルスタックのデータフロー
User Action → Event Handler → API Call → NestJS Controller
↓
UI Update ← Response ← Service ← Prisma ← Database
リクエスト/レスポンスサイクル
// Frontend: Call API
const response = await fetch('/api/users', {
method: 'POST',
body: JSON.stringify(userData),
});
// Backend: Handle request
@Post()
@UseGuards(JwtAuthGuard)
async createUser(@Body() dto: CreateUserDto) {
return this.userService.create(dto);
}
Next.js App Router のパターン
ファイル規約
| ファイル | 目的 |
|---|---|
page.tsx | ルート UI(デフォルトではサーバーコンポーネント) |
layout.tsx | 共通 UI ラッパー |
loading.tsx | Suspense ローディング UI |
error.tsx | エラーバウンダリー |
route.ts | API エンドポイント |
サーバーコンポーネントとクライアントコンポーネント
// Server Component (default) - can fetch data
export default async function Page() {
const data = await getData(); // Direct DB/API call
return <div>{data.title}</div>;
}
// Client Component - needs 'use client'
'use client';
export default function Interactive() {
const [state, setState] = useState();
return <button onClick={() => setState(...)}>Click</button>;
}
NestJS モジュールパターン
Module → Controller → Service → Prisma
機能モジュールの追加
// 1. Module definition
@Module({
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
// 2. Controller with guards
@Controller("users")
@UseGuards(JwtAuthGuard)
export class UsersController {
@Post()
create(@Body() dto: CreateUserDto) {
return this.usersService.create(dto);
}
}
// 3. Service with Prisma
@Injectable()
export class UsersService {
constructor(private prisma: PrismaService) {}
create(dto: CreateUserDto) {
return this.prisma.user.create({ data: dto });
}
}
Prisma ワークフロー
スキーマの変更
# 1. Edit schema.prisma
# 2. Create migration
npx prisma migrate dev --name add_user_role
# 3. Regenerate client
npx prisma generate
# 4. Update services to use new fields
型安全なクエリ
// ✓ Type-safe with generated types
const user = await this.prisma.user.findUnique({
where: { id },
include: { posts: true },
});
// ✗ Avoid raw SQL
await this.prisma.$queryRaw`SELECT * FROM users`; // No type safety
認証フロー
Login Request → Validate Credentials → Generate JWT → Set Cookie
↓
Protected Route → JwtAuthGuard → Extract User → Inject to Controller
認証の統合ポイント
// Frontend: Include credentials
fetch('/api/protected', { credentials: 'include' });
// Backend: Guard + decorator
@UseGuards(JwtAuthGuard)
@Get('profile')
getProfile(@CurrentUser() user: User) {
return user;
}
機能チェックリスト(フルスタック)
開始前
- データモデル(Prisma スキーマ)を計画する
- API コントラクト(DTO)を定義する
- 認証要件を特定する
開発中
- Prisma スキーマを作成/更新する
- マイグレーションを実行する
- NestJS モジュール(コントローラー+サービス)を実装する
- フロントエンドコンポーネントを作成する
- ローディング状態/エラー状態を追加する
完了前
- DTO バリデーションデコレーターを追加する
- DTO と呼び出し元に照らして、サービスと API のエラー処理経路を確認する
- バックエンドのユニットテストと API E2E テストは、ユーザーから依頼された場合にのみ行う
- TypeScript の型が一致していることを確認する
関連項目
コメント
Markdown 対応