Next.js 15とは?App Routerの革新
Next.js 15(2025年末リリース)は、Reactベースのフルスタックフレームワークとして大幅な機能強化が行われました。App Router・React Server Components・Turbopackが安定版となり、2026年現在、最もホットなフロントエンドフレームワークです。
Next.js 15の主要な新機能
- React 19対応:Actions・useOptimistic・useFormStatusなど最新React機能が使用可能
- Turbopackの安定化:Webpackの約70%高速なビルドツール(本番ビルドにも対応)
- Partial Prerendering(PPR):静的・動的コンテンツを同一ページ内で最適化
- after() API:レスポンス送信後に処理を実行できる新API
プロジェクトのセットアップ
npx create-next-app@latest my-app --typescript --tailwind --app --turbopack
cd my-app
npm run dev
App Router基本構造
app/
layout.tsx # ルートレイアウト(必須)
page.tsx # ホームページ(/)
loading.tsx # ローディングUI
error.tsx # エラーUI
not-found.tsx # 404ページ
blog/
page.tsx # /blog
[slug]/
page.tsx # /blog/[slug]
api/
posts/
route.ts # API Route (/api/posts)
Server ComponentsとClient Components
App Routerの最大の特徴は、デフォルトがServer Componentsであることです。データフェッチをサーバーサイドで行い、必要な部分だけをClient Componentにすることで、パフォーマンスが大幅に向上します。
// Server Component(デフォルト)
// app/blog/page.tsx
import { getPosts } from "@/lib/api";
export default async function BlogPage() {
const posts = await getPosts(); // サーバーサイドで直接DB/APIアクセス
return (
<main>
<h1>ブログ一覧</h1>
{posts.map(post => (
<article key={post.id}>
<h2>{post.title}</h2>
<p>{post.excerpt}</p>
</article>
))}
</main>
);
}
"use client"; // Client Componentの宣言
// components/LikeButton.tsx
import { useState } from "react";
export default function LikeButton({ postId }: { postId: string }) {
const [liked, setLiked] = useState(false);
const [count, setCount] = useState(0);
const handleLike = async () => {
setLiked(!liked);
setCount(c => liked ? c - 1 : c + 1);
};
return (
<button onClick={handleLike}>
{liked ? "♥" : "♡"} {count}
</button>
);
}
データフェッチのパターン
fetch APIの拡張(キャッシュ制御)
// 静的キャッシュ(SSG相当)
const data = await fetch('/api/posts', {
cache: 'force-cache'
});
// キャッシュなし(SSR相当)
const data = await fetch('/api/posts', {
cache: 'no-store'
});
// 時間ベースの再検証(ISR相当)
const data = await fetch('/api/posts', {
next: { revalidate: 3600 } // 1時間ごとに再検証
});
// タグベースの再検証(On-demand ISR)
const data = await fetch('/api/posts', {
next: { tags: ['posts'] }
});
メタデータとSEO設定
// app/blog/[slug]/page.tsx
import type { Metadata } from "next";
export async function generateMetadata({ params }): Promise<Metadata> {
const post = await getPost(params.slug);
return {
title: post.title,
description: post.excerpt,
openGraph: {
title: post.title,
description: post.excerpt,
images: [{ url: post.thumbnail }],
type: "article",
},
twitter: {
card: "summary_large_image",
title: post.title,
description: post.excerpt,
},
};
}
Vercelへのデプロイ
# Vercel CLIでデプロイ
npm i -g vercel
vercel
# または GitHubと連携して自動デプロイ
# 1. vercel.comでアカウント作成
# 2. GitHubリポジトリを連携
# 3. mainブランチへのpushで自動デプロイ
まとめ:Next.js 15でモダンWeb開発を加速する
Next.js 15はApp Router・Server Components・Turbopackにより、従来のフロントエンド開発を大きく変革しました。パフォーマンス・開発体験・SEO対応のすべてが高水準でバランスされており、2026年においてReactベースのWebアプリケーション開発の第一選択肢です。