2024-11-07
今日はNext.js 15のリリースがあったので、変更点を自分なりにまとめてみます。 https://nextjs.org/blog/next-15
@next/codemod
CLIを使ったスムーズにアップグレードこちらのコマンドを実行することで、ソースコード内にある破壊的変更を自動で更新してくれて、Next.jsの15にスムーズにアップグレードすることができるそうです。
もともとはサーバーサイドレンダリングのときに、レンダリングするまえにサーバーはリクエストを待っていました。
しかし、すべてのリクエストがサーバーを待つ必要はないので、Next.js 15ではAPIの非同期通信が可能になりました。
headers
, cookies
, params
, searchParams
などのリクエストデータが非同期で取得できるようになりました。
こちらのコマンドを実行することで、APIを非同期に変更することができます。
元々Next.jsではデフォルトでキャッシュするようになっていましたが、Next.js 15ではデフォルトではキャッシュしないように変更されました。 キャッシュをする場合はそれぞれでキャッシュをするように設定する必要があります。
Next.js 15ではまだ安定版がリリースされていないReact 19がサポートされるようになりました。 App RouterではReact 19の機能を使っています。一方で、Pages Routerでは準備ができ次第React 19にアップグレードができるそうです。
next dev --turbo
コマンドが安定バージョンになりました。
Turbopackを使うことで、開発時のパフォーマンスが向上するそうです。
開発中に静的ページはインジケータが表示されるようになりました。
unstable_after
を使ってレスポンスの後にコードを実行ログやアナリティクスなどレスポンスに関係ない処理をafter
を使って実行することで、ユーザーを待たせることなく処理を行うことができるようになりました。
instrumentation.js
instrumentation
ファイルのregister()
APIを使用することで、Next.jsの内部の処理を監視することができるようになりました。
また、onRequestError
を使うことで、サーバーでエラーが発生したときにSentryなどの監視ツールにエラーを送信することができるようになりました。
<Form>
コンポーネント<Form>
コンポーネントが追加されました。
<Form>
コンポーネントを使うことで、prefetching, client-side navigationの機能を使うことができるようになりました。
これは検索するときなどに、<Form>
で新しいページに遷移するときに便利になります。
next.config.ts
のサポートTypescriptでNext.jsの設定ファイルを書くことができるようになりました。
セルフホスティングをするとき、Cache-Control
ヘッダーをコントロールする必要があります。
v15からはCache-Control
はNext.jsによって上書きされることがないので、開発者が自分で設定する必要があります。
使用されていないサーバーアクションはJSのバンドルから削除されるようになり、パフォーマンスが向上しました。 また、サーバーアクションにはクライアントが参照、呼び出すことを可能にするためのIDがそれぞれに割り当てられるようになりました。
外部パッケージをバンドルするとアプリケーションのコールドスタートのパフォーマンスが向上します。 App Routerでデフォルトで外部パッケージがバンドルされるのですが、特定のパッケージをバンドルしないように設定することもできます。 Pages Routerでは、外部パッケージがデフォルトではバンドルされないのですが、設定でバンドルすることもできるようになります。
ESLint 8のサポート終了に伴い、Next.js 15ではESLint 9がサポートされるようになりました。
今までは開発時にコードが保存されるとサーバーアクションはそのたびに実行され、fetch
リクエストが呼ばれていました。
しかし、Next.js 15ではfetch
のレスポンスが再利用されるようになりパフォーマンスが向上しました。
今まではページを2回レンダリングしていましたが、キャシュり利用することでNext.js 15では1回でページをレンダリングするようになりました。
結構変更が多く、変更を追うのに時間がかかりました。 App Router周りの変更も多く、改めてApp RouterがNext.jsの中心になっていることを感じました。 このブログもNext.js 15にアップグレードして、新機能を使っていきたいです。