コンテンツにスキップ

バージョン13にアップグレードする方法

12から13へのアップグレード

Next.jsバージョン13に更新するには、お好みのパッケージマネージャーを使用して次のコマンドを実行してください。

ターミナル
npm i next@13 react@latest react-dom@latest eslint-config-next@13
ターミナル
yarn add next@13 react@latest react-dom@latest eslint-config-next@13
ターミナル
pnpm i next@13 react@latest react-dom@latest eslint-config-next@13
ターミナル
bun add next@13 react@latest react-dom@latest eslint-config-next@13

補足: TypeScriptを使用している場合は、@types/reactおよび@types/react-domも最新バージョンにアップグレードしてください。

v13の概要

  • サポートされているブラウザーがInternet Explorerを削除し、モダンブラウザーを対象とするように変更されました。
  • 最低限必要なNode.jsバージョンは、12.xと14.xがEOLに達したため、12.22.0から16.14.0に引き上げられました。
  • 最低限必要なReactバージョンは、17.0.2から18.2.0に引き上げられました。
  • swcMinify設定プロパティはfalseからtrueに変更されました。詳細についてはNext.js Compilerを参照してください。
  • next/imageのインポートはnext/legacy/imageにリネームされました。next/future/imageのインポートはnext/imageにリネームされました。インポートを安全かつ自動的にリネームするためのcodemodが利用可能です。
  • next/linkの直下の子要素は<a>ではなくなりました。レガシーな動作を使用するにはlegacyBehaviorプロパティを追加するか、<a>を削除してアップグレードしてください。コードを自動的にアップグレードするためのcodemodが利用可能です。
  • target設定プロパティは削除され、Output File Tracingに置き換えられました。

共有機能の移行

Next.js 13では、新しい機能と規約を備えた新しいappディレクトリが導入されました。ただし、Next.js 13へのアップグレードで新しいapp Routerを使用する必要はありません。

更新されたImageコンポーネントLinkコンポーネントScriptコンポーネントFont optimizationなど、両方のディレクトリで機能する新しい機能を使用してpagesを引き続き使用できます。

<Image/>コンポーネント

Next.js 12では、一時的なインポートnext/future/imageによるImageコンポーネントの多くの改善が行われました。これらの改善には、クライアントサイドJavaScriptの削減、画像の拡張とスタイリングの簡素化、アクセシビリティの向上、ネイティブブラウザの遅延読み込みなどが含まれていました。

Next.js 13以降、この新しい動作はnext/imageのデフォルトになりました。

新しいImageコンポーネントへの移行を支援する2つのcodemodがあります。

  • next-image-to-legacy-image: このcodemodは、next/imageのインポートをnext/legacy/imageに安全かつ自動的にリネームし、Next.js 12と同じ動作を維持します。このcodemodを実行して、Next.js 13に迅速に自動更新することをお勧めします。
  • next-image-experimental: 前のcodemodを実行した後、オプションでこの実験的なcodemodを実行してnext/legacy/imageを新しいnext/imageにアップグレードできます。これにより、未使用のプロパティが削除され、インラインスタイルが追加されます。このcodemodは実験的であり、静的な使用(例:<Image src={img} layout="responsive" />)のみを対象とし、動的な使用(例:<Image {...props} />)は対象外であることに注意してください。

または、移行ガイドに従って手動で更新することもできます。また、レガシー比較も参照してください。

<Link> Componentは、子要素として<a>タグを手動で追加する必要がなくなりました。この動作は、バージョン12.2で実験的なオプションとして追加され、現在はデフォルトです。Next.js 13では、<Link>は常に<a>をレンダリングし、プロパティを下位のタグに渡すことができます。

例:

import Link from 'next/link'
 
// Next.js 12: `<a>` has to be nested otherwise it's excluded
<Link href="/about">
  <a>About</a>
</Link>
 
// Next.js 13: `<Link>` always renders `<a>` under the hood
<Link href="/about">
  About
</Link>

リンクをNext.js 13にアップグレードするには、new-link codemodを使用できます。

<Script>コンポーネント

next/scriptの動作は、pagesappの両方をサポートするように更新されました。appを段階的に採用する場合は、アップグレードガイドをお読みください。

フォント最適化

以前は、Next.jsはフォントCSSをインライン化することでフォントの最適化を支援していました。バージョン13では、フォント読み込みエクスペリエンスをカスタマイズできる新しいnext/fontモジュールが導入されており、高いパフォーマンスとプライバシーを確保できます。

next/fontの使用方法については、Optimizing Fontsを参照してください。