App Router 段階的な導入ガイド
このガイドでは以下のことを行います:
- 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: VS Code で ESLint の変更を有効にするには、ESLint サーバーを再起動する必要があるかもしれません。コマンドパレット (
cmd+shift+p
on Mac;ctrl+shift+p
on Windows)を開き、ESLint: Restart ESLint Server
と検索してください。
次のステップ
更新後は、次のステップに進んでください:
- 新しい機能をアップグレードする: 改善された Image および Link コンポーネントなどの新しい機能にアップグレードするためのガイド
pages
からapp
ディレクトリへの移行:pages
からapp
ディレクトリへ段階的に移行するためのステップバイステップガイド
新しい機能のアップグレード
Next.js 13 は新しい特徴と規約を備えた新しい App Router を導入しました。新しい Router は app
ディレクトリ内にあり、pages
ディレクトリと共存します。
Next.js 13 へのアップグレードは、新しい App Router の使用を要求しません。pages
と app
の両方のディレクトリで動作する新しい機能、例えば更新された Image コンポーネント、Link コンポーネント、Script コンポーネント、および フォントの最適化 を利用し続けることが可能です。
<Image/>
コンポーネント
Next.js 12 は、next/future/image
という一時的なインポートを利用して Image コンポーネントを改善しました。これには、クライアントサイドの JavaScript 量の削減、画像を拡張しスタイルを当てやすくなる方法、アクセシビリティの向上、ネイティブブラウザの遅延読み込みが含まれていました。
バージョン 13 では、この新しい動作が next/image
のデフォルトになる。
新しい Image コンポーネントへの移行を支援するために、二つのコード変換ツールがあります:
next-image-to-legacy-image
コード変換ツール:next/image
インポートを安全に自動でnext/legacy/image
にリネームします。これ により既存のコンポーネントは同じ動作を維持します。next-image-experimental
コード変換ツール:インラインスタイルを危険に追加し、未使用の props を削除します。これにより、既存のコンポーネントの動作が新しいデフォルトに一致するよう変更されます。このコード変換ツールを使用するには、最初にnext-image-to-legacy-image
コード変換ツールを実行する必要があります。
<Link>
コンポーネント
<Link>
コンポーネント はもはや手動で <a>
タグを子要素として追加する必要がありません。この動作は バージョン 12.2 で実験的なオプションとして追加され、現在はデフォルトです。Next.js 13 では、<Link>
は常に <a>
をレンダリングし、基になるタグに props をフォワードすることを可能にします。
例:
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>