【2026年版】Next.js 15完全ガイド!App Router・Server Components・パフォーマンス最適化を徹底解説

Next.js 15はReactをベースにしたフルスタックWebフレームワークの最新版です。App Router・React Server Components・Turbopackなど革新的な機能により、2026年のフロントエンド開発の標準となっています。本記事ではNext.js 15の全機能を実践コード付きで解説します。

Next.js 15の新機能まとめ

  • Turbopack(Stable):Webpackの最大10倍速いバンドラーが安定版に
  • 🔧 React 19サポート:新しいReact Compiler・Server Actions改善
  • 📦 Partial Prerendering(PPR):静的・動的コンテンツの最適な組み合わせ
  • 🎯 Form Component:ネイティブのフォーム処理
  • 🔐 改善されたキャッシュ制御:より細かいキャッシュ管理

プロジェクトのセットアップ

# Next.js 15プロジェクト作成
npx create-next-app@latest my-app --typescript --tailwind --app

# プロジェクト構造
my-app/
├── app/
│   ├── layout.tsx      # ルートレイアウト
│   ├── page.tsx        # ホームページ
│   ├── (blog)/         # ルートグループ
│   │   ├── layout.tsx
│   │   └── [slug]/
│   │       └── page.tsx
│   └── api/
│       └── posts/
│           └── route.ts
├── components/
├── lib/
└── public/

App RouterとServer Components

// app/blog/[slug]/page.tsx(Server Component)
import { getPost } from '@/lib/posts';
import { notFound } from 'next/navigation';

// 静的パラメータの生成(SSG)
export async function generateStaticParams() {
  const posts = await getAllPosts();
  return posts.map((post) => ({
    slug: post.slug,
  }));
}

// メタデータの動的生成(SEO最適化)
export async function generateMetadata({ params }: { params: { slug: string } }) {
  const post = await getPost(params.slug);
  if (!post) return {};
  
  return {
    title: post.title + ' | Tech Athletes',
    description: post.excerpt,
    openGraph: {
      title: post.title,
      description: post.excerpt,
      type: 'article',
      publishedTime: post.publishedAt,
    },
  };
}

// ページコンポーネント
export default async function BlogPost({ params }: { params: { slug: string } }) {
  const post = await getPost(params.slug);
  if (!post) notFound();
  
  return (
    <article>
      <h1>{post.title}</h1>
      <div dangerouslySetInnerHTML={{ __html: post.content }} />
    </article>
  );
}

Server Actionsでフォーム処理

// app/contact/actions.ts
'use server';

import { z } from 'zod';
import { revalidatePath } from 'next/cache';

const ContactSchema = z.object({
  name: z.string().min(1),
  email: z.string().email(),
  message: z.string().min(10),
});

export async function submitContact(formData: FormData) {
  const validatedFields = ContactSchema.safeParse({
    name: formData.get('name'),
    email: formData.get('email'),
    message: formData.get('message'),
  });
  
  if (!validatedFields.success) {
    return { error: 'バリデーションエラー' };
  }
  
  // DBへの保存・メール送信などの処理
  await saveToDatabase(validatedFields.data);
  revalidatePath('/contact');
  
  return { success: true };
}

// app/contact/page.tsx
export default function ContactPage() {
  return (
    <form action={submitContact}>
      <input name="name" placeholder="お名前" required />
      <input name="email" type="email" placeholder="メール" required />
      <textarea name="message" placeholder="メッセージ" required />
      <button type="submit">送信</button>
    </form>
  );
}

パフォーマンス最適化テクニック

1. 画像最適化

import Image from 'next/image';

// 自動的にWebP変換・遅延読み込み・サイズ最適化
export function HeroImage() {
  return (
    <Image
      src="/hero.jpg"
      alt="Tech Athletes ヒーロー画像"
      width={1200}
      height={630}
      priority  // LCPに影響する画像はpriorityを設定
      placeholder="blur"
      blurDataURL="data:image/jpeg;base64,..."
    />
  );
}

2. フォント最適化

import { Noto_Sans_JP } from 'next/font/google';

// 自動的にself-hostingされレイアウトシフトを防止
const notoSansJP = Noto_Sans_JP({
  subsets: ['latin'],
  weight: ['400', '700'],
  display: 'swap',
});

export default function RootLayout({ children }) {
  return (
    <html lang="ja" className={notoSansJP.className}>
      <body>{children}</body>
    </html>
  );
}

Vercelでのデプロイ

# Vercel CLIでのデプロイ
npm install -g vercel

# ログイン
vercel login

# デプロイ(本番)
vercel --prod

まとめ

Next.js 15はApp Router・Server Components・Turbopackの組み合わせで、従来のSPAと比較して圧倒的なパフォーマンスを実現します。SEO対応・Core Web Vitals最適化・TypeScript完全対応と、2026年のWebフロントエンド開発の最強の選択肢です。VercelやAWS Amplifyを使えば簡単に本番デプロイも可能です。

投稿者 kasata

IT企業でエンジニアとして勤務後、テクノロジー情報メディア「Tech Athletes(テック・アスリート)」を運営。プログラミング、クラウドインフラ(AWS/GCP/Azure)、AI活用、Webサービス開発を専門とする。エンジニア・ビジネスパーソン向けに、実際に使ってみた経験をもとに信頼できる技術情報を発信中。資格:AWS認定ソリューションアーキテクト、Python 3 エンジニア認定試験合格。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です