Menu

バージョン13

バージョン12から13へのアップグレード

Next.js version 13に更新するには、お好みのパッケージマネージャーで次のコマンドを実行します:

Terminal
npm i next@13 react@latest react-dom@latest eslint-config-next@13
Terminal
yarn add next@13 react@latest react-dom@latest eslint-config-next@13
Terminal
pnpm i next@13 react@latest react-dom@latest eslint-config-next@13
Terminal
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.22.0から16.14.0に引き上げられました。12.xと14.xがライフサイクルの終了に達したためです。
  • Reactの最小バージョンが17.0.2から18.2.0に引き上げられました。
  • swcMinifyの設定プロパティがfalseからtrueに変更されました。詳細はNext.js コンパイラを参照してください。
  • next/imageのインポートがnext/legacy/imageに名称変更されました。next/future/imageのインポートがnext/imageに名称変更されました。インポートを安全かつ自動的に名称変更するためのコードモッドが利用可能です。
  • next/linkの子要素は<a>タグではなくなりました。レガシーの動作を使用するにはlegacyBehaviorプロパティを追加するか、アップグレードするために<a>を削除してください。コードを自動的にアップグレードするコードモッドが利用可能です。
  • target設定プロパティが削除され、出力ファイルトレースに置き換えられました。

共有機能の移行

Next.js 13は新しいappディレクトリと新機能、規約を導入しました。ただし、Next.js 13へのアップグレードは新しいappディレクトリの使用を必須としません

更新されたイメージコンポーネントLinkコンポーネントScriptコンポーネントフォント最適化など、両方のディレクトリで動作する新機能を使いながら、pagesディレクトリを引き続き使用できます。

<Image/> コンポーネント

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

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

新しいイメージコンポーネントへの移行を支援する2つのコードモッドがあります:

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

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

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

例:

import Link from 'next/link'
 
// Next.js 12: `<a>`を入れ子にしないと除外される
<Link href="/about">
  <a>About</a>
</Link>
 
// Next.js 13: `<Link>`は内部的に常に`<a>`をレンダリング
<Link href="/about">
  About
</Link>

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

<Script> コンポーネント

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

フォント最適化

従来、Next.jsはフォントCSSをインライン化することでフォントを最適化していました。バージョン13では、新しいnext/fontモジュールを導入し、優れたパフォーマンスとプライバシーを確保しながら、フォントの読み込み体験をカスタマイズできるようになりました。

next/fontの使用方法については、フォントの最適化を参照してください。