Vercelが開発するReactフレームワークNext.jsの最新バージョン「Next.js 15」がリリースされました。本記事ではパフォーマンスと開発体験を大きく向上させた新機能を、実際のコード例とともに徹底解説します。

💡 この記事のポイント

Next.js 15ではTurbopackが安定版になり開発サーバーが最大76%高速化。Partial Prerenderingにより静的・動的コンテンツを1ページ内でシームレスに組み合わせ可能に。

1. Turbopack安定版リリース

最大のハイライトはTurbopackの安定版リリースです。Rustで書かれたこのバンドラーは、開発サーバーの起動とHMRを劇的に高速化します。

  • 開発サーバー起動:Webpack比で最大 76%高速
  • HMR:最大 96%高速
  • メモリ使用量:大規模プロジェクトで 40%削減
# Next.js 15ではTurbopackがデフォルトで有効
npx next dev

# 明示的に指定する場合
npx next dev --turbopack

# プロダクションビルドでも利用可能に
npx next build --turbopack
広告

2. React Server Componentsの進化

Server Actions(サーバー上で直接実行される関数)の型安全性とエラーハンドリングが大幅に強化されました。

// app/actions.ts
'use server'
import { z } from 'zod'
import { revalidatePath } from 'next/cache'

const PostSchema = z.object({
  title: z.string().min(1, 'タイトルは必須'),
  content: z.string().min(10, '10文字以上'),
})

export async function createPost(formData: FormData) {
  const validated = PostSchema.safeParse({
    title: formData.get('title'),
    content: formData.get('content'),
  })
  if (!validated.success) {
    return { error: validated.error.flatten() }
  }
  await db.posts.create({ data: validated.data })
  revalidatePath('/blog')
  return { success: true }
}

3. 新しいキャッシング戦略

Next.js 15では、キャッシュの仕組みが大幅にシンプル化されました。デフォルトでキャッシュしない方針に変更され、明示的な制御が必要になりました。

// Next.js 15: 明示的なキャッシュ制御

// キャッシュしない(デフォルト)
const data = await fetch('https://api.example.com/posts')

// 明示的にキャッシュ + 1時間ごと再検証
const cached = await fetch('https://api.example.com/posts', {
  cache: 'force-cache',
  next: { revalidate: 3600 }
})
⚠️ 破壊的変更

fetch()のデフォルトがno-storeに変更されました。移行時はnpx @next/codemod@latest find-implicit-cachingで該当箇所を検出できます。

広告

4. Partial Prerendering (PPR)

Partial Prerenderingは革新的な機能で、1つのページ内に静的な部分と動的な部分を共存させます。

// app/page.tsx - PPRの例
import { Suspense } from 'react'

export default function HomePage() {
  return (
    <main>
      {/* 静的: ビルド時に生成、CDNから即配信 */}
      <h1>TechPulse</h1>

      {/* 動的: リクエスト時にストリーミング */}
      <Suspense fallback={<Skeleton />}>
        <LatestArticles />
      </Suspense>

      <Suspense fallback={<Skeleton />}>
        <PersonalizedContent />
      </Suspense>
    </main>
  )
}

5. まとめ

  • Turbopack安定版で開発速度が劇的に向上
  • Server Actions強化で型安全なサーバー処理が容易に
  • キャッシュのシンプル化でデバッグが容易に
  • PPRで静的・動的の良いとこ取り

移行はnpx @next/codemod@latest upgrade latestで自動化できます。積極的にアップグレードを検討してみてください。