Frontend Weekly 2024-10-25
Next.js 15
Next.js 15 がリリースされた。
https://nextjs.org/blog/next-15
マイグレーションガイドに加えて、codemod も公開されている。
https://nextjs.org/docs/app/building-your-application/upgrading/version-15
デフォルトキャッシュの無効化または変更
破壊的な変更として、fetch や GET ルートハンドラー、クライアントルーターのデフォルトのキャッシュ戦略に次のような変更が加えられた。
- Fetch のキャッシュオプションを
no-store
に変更- キャッシュを有効化したい場合は、fetch のキャッシュオプションに
force-cache
を指定するなどの対応が必要 - 余談:今までデフォルトが
force-cache
であるという説明が稀に見られたが、Dynamic functions 以降はno-store
になるなど最適だと思われるオプションが自動的に選択されていたため不正確
- キャッシュを有効化したい場合は、fetch のキャッシュオプションに
- GET ルートハンドラーのデフォルトキャッシュを無効化
- キャッシュを有効化したい場合は、GET ルートハンドラを定義したファイルで
export dynamic = 'force-static'
を指定するなどの対応が必要
- キャッシュを有効化したい場合は、GET ルートハンドラを定義したファイルで
- クライアントルーターがデフォルトでページコンポーネントをキャッシュしないように変更
- ただし、一部の動作は変更されない
- Partial Rendering を引き続きサポートするため、共有レイアウトデータはサーバーから refetch されない
- ブラウザがスクロール位置を復元できるように、Back/forward navigation ではキャッシュが有効
- 余談:このキャッシュへの理解が不十分であり、例えば商品データを追加したのに一覧に反映されないバグが稀に見られた。
revalidatePath
などによる明示的な再検証が必要
- ただし、一部の動作は変更されない
Async Request APIs
cookies
やheaders
、params
、searchParams
などの API が非同期関数に変更された。
Form Component
HTML のform
要素の拡張であり、送信時に共有レイアウトとクライアントの状態を保持するクライアントナビゲーションなどをサポートしており、パフォーマンスや UX の向上が期待できる。
https://nextjs.org/blog/next-15#form-component
import Form from "next/form";
export default function Page() { return ( <Form action="/search"> <input name="query" /> <button type="submit">Submit</button> </Form> );}
その他
その他のいくつかの変更点。
- React 19 のサポート
- 利用していない Server Action が公開されないように変更
- instrumentation.js が Stable に昇格
Zustand v5
Zustand v5 がリリースされた。
https://github.com/pmndrs/zustand/releases/tag/v5.0.0
新機能追加はなく、非推奨な機能などの削除が行われたのみ。
Svelte 5
Svelte 5 がリリースされた。
https://svelte.dev/blog/svelte-5-is-alive
Preview の際、話題になっていた runes が遂にサポートされた。
let count = 0;let count = $state(0);
Chakra UI v3
Chakra UI v3 がリリースされた。
https://www.chakra-ui.com/blog/00-announcing-v3
Panda CSS への移行は行われず、Park UI(Ark UI) + emotion の構成になった。 また、いくつかのコンポーネントは shadcn/ui のように CLI 経由でスニペットを追加する形式になっている。
Panda CSS については、React v19 の style に期待しており、導入しない可能性があると言及されている。
We might not even have to use Panda at all. The progress of the style tag in React 19 is very promising and we give Chakra even more performance boost without any migration cost.
React Compiler を React v18 で利用する
React Compiler がベータリリースされた。
https://react.dev/blog/2024/10/21/react-compiler-beta-release
設定を変更することで React v17 と v18 でも利用可能。
https://react.dev/learn/react-compiler#using-react-compiler-with-react-17-or-18
const ReactCompilerConfig = { target: "18", // '17' | '18' | '19'};
module.exports = function () { return { plugins: [["babel-plugin-react-compiler", ReactCompilerConfig]], };};
Sass: @import
is deprecated
Sass の@import
が v3.0.0 で廃止予定。
https://sass-lang.com/blog/import-is-deprecated/
以前からデバックが困難であるという指摘があり、@use
や@forward
の利用が推奨されている。
これは CSS の@import
とは無関係であり、CSS の@import
は廃止もされなければ非推奨でもないので注意。