App Router Incremental Adoption Guide
このガイドは以下の状況において役立つでしょう:
- Next.js アプリケーションをバージョン 12 からバージョン 13 にアップデート
pages
とapp
の両方のディレクトリで機能するアップグレード機能- 既存のアプリケーションを
pages
からapp
に段階的に移行
アップグレード
Node.js バージョン
Node.js の最小バージョンは v18.17 になりました。詳しくは Node.js のドキュメントをご覧ください。
Next.js バージョン
Next.js バージョン 13 にアップデートするには、お好みのパッケージマネージャを使用して次のコマンドを実行してください:
npm install next@latest react@latest react-dom@latest
ESLint バージョン
ESLint を使用している場合は、ESLint のバージョンをアップグレードする必要があります:
npm install -D eslint-config-next@latest
Good to know: ESLint の変更を有効にするために、VS Code で ESLint サーバを再起動する必要がある可能性があります。 コマンドパレット(Mac では
cmd+shift+p
、Windows ではctrl+shift+p
)を開き、ESLint: Restart ESLint Server
を検索し、ESLint サーバを再起動します。
次のステップ
アップデートが完了したら、次のステップをご覧ください:
- 新機能のアップグレード: 改良された Image コンポーネントや Link コンポーネントなど、新機能へのアップグレードに役立つガイドです。
pages
からapp
ディレクトリに移行:pages
からapp
ディレクトリへ段階的に移行するためのステップバイステップなガイドです。
新機能のアップグレード
Next.js 13 では、新しい機能と規約を備えた新しい App Router が導入されました。
新しいルーターは app
ディレクトリとして利用でき、pages
ディレクトリと共存 します。
Next.js 13 にアップグレードしても新しい App Router を使う必要は ありません。
更新された Image コンポーネント、Link コンポーネント、Script コンポーネント、Font 最適化など、両方のディレクトリで動作する新機能を持つ pages
を引き続き使用できます。
<Image/>
コンポーネント
Next.js 12 では、一時的なインポート(next/future/image
)により、Image コンポーネントに新たな改良が加えられました。
これらの改善点には、クライアントサイド JavaScript の削減、画像の拡張とスタイル設定の容易化、アクセシビリティの向上、ネイティブブラウザの遅延ロードなどが含まれます。
バージョン 13 では、この新しい動作が next/image
のデフォルトになりました。
新しい Image コンポーネントへの移行を支援する 2 つの Codemod があります:
next-image-to-legacy-image
codemod:next/image
インポートの名前をnext/legacy/image
安全かつ自動的に変更します。既存の コンポーネントは同じ動作を維持します。next-image-experimental
codemod: 危険なインラインスタイルを追加し、未使用の prop を削除します。これにより、既存のコンポーネントの動作が新しいデフォルトに合わせて変更されます。この codemod を使用するには、まずnext-image-to-legacy-image
codemod を実行する必要があります。
<Link>
コンポーネント
<Link>
コンポーネントは、手動で <a>
タグを子として追加する必要がなくなりました。
この動作はバージョン 12.2 で実験的なオプションとして追加されたもので、現在はデフォルトになっています。
Next.js 13 では、<Link>
は常に <a>
をレンダリングし、その下にあるタグに prop を転送することができます。
例えば:
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>