Use Cases

Claude Code के साथ Accelerating Next.js Full-Stack Development

Claude Code का उपयोग करके accelerating next.js full-stack development सीखें। Practical tips और code examples शामिल हैं।

Next.js × Claude Code सेフルスタックdevelopment

Next.jsのApp Routerは、フロントエンドとバックエンドをintegration的にdevelopmentできるframework है।Claude Code के साथ combineる बातで、page、APIroute、databaseintegration तकを一気にbuild किया जा सकता है。

Projectの初期setup

> Next.js 14 + TypeScript + Tailwind CSS + Prismaの
> Projectをबनाओ。App Routerを使用。
> निम्नलिखितの構成で:
> - src/app: page・layout
> - src/components: 共通component
> - src/lib: utility・DB接続
> - prisma: スkeyマ・migration

Server Componentsのutilization

dataフェッチングをServer Componentsでकरनाpattern generateさせ है।

> ブlog記事listpageをServer Componentでबनाओ。
> Prisma सेdatafetch。pageネーションsupport。
// src/app/posts/page.tsx
import { prisma } from "@/lib/prisma";
import { PostCard } from "@/components/PostCard";
import { Pagination } from "@/components/Pagination";

interface Props {
  searchParams: Promise<{ page?: string }>;
}

export default async function PostsPage({ searchParams }: Props) {
  const { page: pageParam } = await searchParams;
  const page = Number(pageParam) || 1;
  const perPage = 12;

  const [posts, total] = await Promise.all([
    prisma.post.findMany({
      take: perPage,
      skip: (page - 1) * perPage,
      orderBy: { createdAt: "desc" },
      include: { author: { select: { name: true, avatar: true } } },
    }),
    prisma.post.count(),
  ]);

  return (
    <main className="container mx-auto px-4 py-8">
      <h1 className="mb-8 text-3xl font-bold">記事list</h1>
      <div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
        {posts.map((post) => (
          <PostCard key={post.id} post={post} />
        ))}
      </div>
      <Pagination
        currentPage={page}
        totalPages={Math.ceil(total / perPage)}
        basePath="/posts"
      />
    </main>
  );
}

export const metadata = {
  title: "記事list",
  description: "सभीの記事 displayします",
};

Server Actionsのutilization

formprocessingをServer Actionsでimplement करते हैं。

> 記事createformをServer Actionsでimplement करो。
> validationはzod、error handlingも含めて。
// src/app/posts/new/actions.ts
"use server";

import { prisma } from "@/lib/prisma";
import { redirect } from "next/navigation";
import { z } from "zod";

const CreatePostSchema = z.object({
  title: z.string().min(1, "タイトルは必須です").max(200),
  content: z.string().min(10, "本文は10文字以ऊपरज़रूरीです"),
  published: z.boolean().default(false),
});

export type FormState = {
  errors?: Record<string, string[]>;
  message?: string;
};

export async function createPost(
  prevState: FormState,
  formData: FormData
): Promise<FormState> {
  const parsed = CreatePostSchema.safeParse({
    title: formData.get("title"),
    content: formData.get("content"),
    published: formData.get("published") === "on",
  });

  if (!parsed.success) {
    return { errors: parsed.error.flatten().fieldErrors };
  }

  await prisma.post.create({
    data: { ...parsed.data, authorId: "current-user-id" },
  });

  redirect("/posts");
}

API Routeのcreate

बाहर部integration用のAPI Routeも同時にcreateでき है।

> /api/posts のRoute Handlerをबनाओ。
> GET(list・search・pageネーション)と POST(create)。
> authenticationcheckも含めて。
// src/app/api/posts/route.ts
import { NextRequest, NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";
import { auth } from "@/lib/auth";

export async function GET(request: NextRequest) {
  const { searchParams } = request.nextUrl;
  const page = Number(searchParams.get("page")) || 1;
  const q = searchParams.get("q") || "";
  const limit = 20;

  const where = q
    ? { title: { contains: q, mode: "insensitive" as const } }
    : {};

  const [posts, total] = await Promise.all([
    prisma.post.findMany({
      where,
      take: limit,
      skip: (page - 1) * limit,
      orderBy: { createdAt: "desc" },
    }),
    prisma.post.count({ where }),
  ]);

  return NextResponse.json({
    data: posts,
    meta: { page, limit, total },
  });
}

export async function POST(request: NextRequest) {
  const session = await auth();
  if (!session) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  const body = await request.json();
  const post = await prisma.post.create({
    data: { ...body, authorId: session.user.id },
  });

  return NextResponse.json({ data: post }, { status: 201 });
}

middlewareのsettings

authenticationroutingをmiddlewareで制御し है।

> authenticationがज़रूरीなrouteをmiddlewareで保護して。
> /dashboard, /posts/new, /api/posts(POST) はauthentication必須。

DBintegrationके details के लिएDBmigrationautomationを、Reactcomponentの設計はReactdevelopmentを爆速にする方法をदेखें。日々のdevelopment効率をऊपरげるコツは生産性を3倍にする10のTipsもあわせてदेखें。

Summary

Claude CodeとNext.jsの組み合わせは、フルスタックdevelopmentを劇的に加速し है।Server Components、Server Actions、API Routeを一貫してgenerateできるため、フロントエンド सेバックエンド तकシームレスにdevelopmentを進められ है।

Next.jsके details के लिएNext.jsofficial documentation、Claude Codeके बारे मेंはAnthropicofficial documentationをदेखें。

#Claude Code #Next.js #full-stack #App Router #Server Components
मुफ़्त

मुफ़्त PDF: 5 मिनट में Claude Code चीटशीट

बस अपना ईमेल दर्ज करें और हम तुरंत A4 एक-पृष्ठ चीटशीट PDF भेज देंगे।

हम आपकी व्यक्तिगत जानकारी की सुरक्षा करते हैं और स्पैम नहीं भेजते।

Masa

लेखक के बारे में

Masa

Claude Code का गहराई से उपयोग करने वाले इंजीनियर। claudecode-lab.com चलाते हैं, जो 10 भाषाओं में 2,000 से अधिक पेजों वाला टेक मीडिया है।