Next.js 15とは?最新機能と変更点まとめ
2025年にリリースされたNext.js 15は、React 19対応、Turbopackの安定化、新しいキャッシュ戦略など、多くの革新的な機能が追加されました。本記事では、Next.js 15の主要機能と実践的な使い方を解説します。
Next.js 15の主要な新機能
1. Turbopackの完全安定化
Next.js 15ではTurbopack(Rustベースのバンドラー)が完全に安定しました。開発サーバーの起動速度が従来のWebpackと比較して最大76%向上し、ホットリロードも大幅に高速化されました。
# Turbopackを有効にして開発サーバー起動
npx next dev --turbopack
# または package.json で設定
{
"scripts": {
"dev": "next dev --turbopack"
}
}
2. React 19の完全サポート
Next.js 15はReact 19に完全対応し、新しいReact Actions、useFormStatus、useOptimisticなどのAPIが使えます。
// React 19 Server Actions の活用例
"use server";
import { revalidatePath } from "next/cache";
export async function createPost(formData: FormData) {
const title = formData.get("title") as string;
const content = formData.get("content") as string;
await db.post.create({
data: { title, content }
});
revalidatePath("/posts");
}
3. 非同期リクエストAPIへの移行
Next.js 15では、headers()、cookies()、params、searchParamsなどのAPIが非同期になりました。
// Next.js 15: 非同期APIの使い方
import { cookies, headers } from "next/headers";
// Page Component
export default async function Page({
params,
searchParams,
}: {
params: Promise<{ id: string }>;
searchParams: Promise<{ query?: string }>;
}) {
const { id } = await params;
const { query } = await searchParams;
const cookieStore = await cookies();
const token = cookieStore.get("token");
return <div>Post ID: {id}</div>;
}
App RouterによるモダンなNext.jsアーキテクチャ
ディレクトリ構造のベストプラクティス
my-app/
├── app/
│ ├── layout.tsx # ルートレイアウト
│ ├── page.tsx # ホームページ
│ ├── globals.css
│ ├── (auth)/ # ルートグループ
│ │ ├── login/
│ │ └── register/
│ ├── blog/
│ │ ├── page.tsx # ブログ一覧
│ │ └── [slug]/
│ │ └── page.tsx # 記事詳細
│ └── api/
│ └── posts/
│ └── route.ts # APIルート
├── components/
│ ├── ui/ # 汎用UIコンポーネント
│ └── features/ # 機能別コンポーネント
├── lib/
│ ├── db.ts # データベース設定
│ └── utils.ts # ユーティリティ関数
└── public/
Server ComponentsとClient Componentsの使い分け
// Server Component(デフォルト)- データフェッチに最適
// app/blog/[slug]/page.tsx
import { notFound } from "next/navigation";
export async function generateStaticParams() {
const posts = await getPosts();
return posts.map((post) => ({ slug: post.slug }));
}
export async function generateMetadata({ params }: { params: Promise<{slug: string}> }) {
const { slug } = await params;
const post = await getPost(slug);
return {
title: post.title,
description: post.excerpt,
openGraph: {
title: post.title,
description: post.excerpt,
images: [post.ogImage],
}
};
}
export default async function BlogPost({ params }: { params: Promise<{slug: string}> }) {
const { slug } = await params;
const post = await getPost(slug);
if (!post) notFound();
return (
<article>
<h1>{post.title}</h1>
<div dangerouslySetInnerHTML={{ __html: post.content }} />
</article>
);
}
Next.js 15のSEO最適化テクニック
メタデータAPIの活用
// app/layout.tsx - サイト全体のデフォルトメタデータ
import type { Metadata } from "next";
export const metadata: Metadata = {
title: {
default: "Tech Athletes | テック・アスリート",
template: "%s | Tech Athletes",
},
description: "エンジニア・プログラマーのためのテック情報メディア",
openGraph: {
type: "website",
locale: "ja_JP",
url: "https://tech-athletes.com",
siteName: "Tech Athletes",
},
twitter: {
card: "summary_large_image",
site: "@tech_athletes",
},
robots: {
index: true,
follow: true,
},
};
パフォーマンス最適化
- Image最適化:next/imageで自動WebP変換・遅延読み込み
- フォント最適化:next/fontでCLS(レイアウトシフト)を防止
- バンドル分析:@next/bundle-analyzerでサイズ確認
- 部分プリレンダリング(PPR):静的・動的コンテンツの最適な組み合わせ
まとめ
Next.js 15は、パフォーマンス・開発体験・SEOの三拍子が揃った、2026年のWebフロントエンド開発の最良の選択肢の一つです。特にApp Router + Server Components + TypeScriptの組み合わせは、スケーラブルなWebアプリケーション構築に非常に適しています。