バージョン13へのアップグレード方法
バージョン12から13へのアップグレード
Next.jsバージョン13にアップデートするには、お使いのパッケージマネージャーで以下のコマンドを実行してください:
補足: TypeScriptを使用している場合、
@types/react
と@types/react-dom
も最新バージョンにアップグレードしてください。
バージョン13の主な変更点
- サポート対象ブラウザが変更され、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
ルーターの使用は必須ではありません。
更新されたImageコンポーネント、Linkコンポーネント、Scriptコンポーネント、フォント最適化など、両ディレクトリで動作する新機能と共にpages
の継続使用が可能です。
<Image/>
コンポーネント
Next.js 12では一時的なインポートnext/future/image
を通じてImageコンポーネントに多くの改善が加えられました。これらの改善には、クライアントサイドJavaScriptの削減、画像の拡張とスタイリングの簡易化、アクセシビリティの向上、ネイティブブラウザの遅延読み込みなどが含まれます。
Next.js 13では、この新しい動作がnext/image
のデフォルトになりました。
新しいImageコンポーネントへの移行を支援する2つのコードモッドが利用可能です:
- next-image-to-legacy-image: このコードモッドは
next/image
インポートをnext/legacy/image
に安全かつ自動的にリネームし、Next.js 12と同じ動作を維持します。Next.js 13への迅速なアップデートにはこのコードモッドの実行を推奨します。 - next-image-experimental: 上記のコードモッド実行後、オプションでこの実験的コードモッドを実行し、
next/legacy/image
を新しいnext/image
にアップグレードできます。これにより未使用のプロップが削除され、インラインスタイルが追加されます。このコードモッドは実験的で、静的用法(例:<Image src={img} layout="responsive" />
)のみをカバーし、動的用法(例:<Image {...props} />
)は対象外です。
手動で更新する場合は移行ガイドに従ってください。レガシー比較も参照できます。
<Link>
コンポーネント
<Link>
コンポーネントでは、子要素として手動で<a>
タグを追加する必要がなくなりました。この動作はバージョン12.2で実験的オプションとして追加され、現在はデフォルトになっています。Next.js 13では、<Link>
は常に<a>
をレンダリングし、基礎となるタグにプロップを転送できます。
例:
リンクをNext.js 13にアップグレードするには、new-link
コードモッドを使用できます。
<Script>
コンポーネント
next/script
の動作が更新され、pages
とapp
の両方をサポートするようになりました。app
を段階的に採用する場合は、アップグレードガイドをお読みください。
フォント最適化
以前のNext.jsでは、フォントCSSをインライン化することでフォント最適化を支援していました。バージョン13では新しいnext/font
モジュールが導入され、優れたパフォーマンスとプライバシーを維持しながらフォント読み込みエクスペリエンスをカスタマイズできるようになりました。
next/font
の使用方法についてはフォントの最適化を参照してください。