|
| 1 | +--- |
| 2 | +title: "2025-04-17のJS: Zod 4 beta、Next.js 15.3とRspack、LLMを使ったテストのマイグレーション" |
| 3 | +author: "azu" |
| 4 | +layout: post |
| 5 | +date: 2025-04-17T14:41:52.073Z |
| 6 | +category: JSer |
| 7 | +tags: |
| 8 | +- Next.js |
| 9 | +- React |
| 10 | +- TypeScript |
| 11 | +- test |
| 12 | +- css |
| 13 | + |
| 14 | +--- |
| 15 | + |
| 16 | +JSer.info #732 - Zod 4 betaがリリースされました。 |
| 17 | + |
| 18 | +- [Introducing Zod 4 beta | Zod Docs](https://v4.zod.dev/v4) |
| 19 | + |
| 20 | +パフォーマンスとBundle Sizeの改善が行われ、Tree Shaking可能なAPIを提供する`@zod/mini`と`@zod/core`パッケージが公開されています。また、再帰も可能なオブジェクトの定義をする`z.interface()` API、メタデータを管理する`z.registry()` API、JSONスキーマ変換のための`toJSONSchema()` APIなどが追加されています。その他にも文字列のTop Level APIの追加や変更、エラーメッセージを`message`から`error`パラメータへ変更など多くの変更が含まれています。 |
| 21 | + |
| 22 | +---- |
| 23 | + |
| 24 | +Next.js 15.3がリリースされ、Rspackをビルドツールとしてサポートするようになりました。 |
| 25 | + |
| 26 | +- [Next.js 15.3 | Next.js](https://nextjs.org/blog/next-15-3) |
| 27 | +- [Rspack joins the Next.js ecosystem - Rspack](https://rspack.dev/blog/rspack-next-partner) |
| 28 | + |
| 29 | +Next.js 15.3では、Turbopackを`next build`でも利用可能になったほか、Rspackのサポート、クライアントサイドの計測を行う`instrumentation-client.{js,ts}`のサポート、Navigation Hooksのサポートなどが追加されています。また、`useLinkStatus`の追加やTypeScript LSPのパフォーマンス改善も行われました。実験的な機能として`<Link unstable_dynamicOnHovertrue>`のサポートなども含まれています。 |
| 30 | + |
| 31 | +---- |
| 32 | + |
| 33 | +AirbnbがEnzymeからReact Testing Libraryへの大規模なテスト移行をLLMを活用して行った事例について紹介されています。 |
| 34 | + |
| 35 | +- [Accelerating Large-Scale Test Migration with LLMs | by Charles Covey-Brandt | The Airbnb Tech Blog | Mar, 2025 | Medium](https://medium.com/airbnb-engineering/accelerating-large-scale-test-migration-with-llms-9565c208023b) |
| 36 | + |
| 37 | +移行プロセスをステップ化し、再試行ループの導入、関連するテストや移行ガイドラインをコンテキストとして追加することで、当初は75%のテストが自動的に移行できました。さらに、失敗したファイルにどのステップでうまくいかなかったかをコメントとして残し、それらのファイルを使って学習することで、最終的には97%まで自動的に移行できるようになったとのことです。 |
| 38 | + |
| 39 | +---- |
| 40 | + |
| 41 | +{% include inline-support.html %} |
| 42 | + |
| 43 | +---- |
| 44 | + |
| 45 | +<h1 class="site-genre">ヘッドライン</h1> |
| 46 | + |
| 47 | +---- |
| 48 | + |
| 49 | +## Bun v1.2.9 | Bun Blog |
| 50 | +[bun.sh/blog/bun-v1.2.9](https://bun.sh/blog/bun-v1.2.9 "Bun v1.2.9 | Bun Blog") |
| 51 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Bun</span> <span class="jser-tag">ReleaseNote</span></p> |
| 52 | + |
| 53 | +Bun v1.2.9リリース。 |
| 54 | +Redisクライアントである`Bub.redis`の追加、`require.extensions`のサポート、`require.resolve`の`paths`オプションのサポートなど |
| 55 | + |
| 56 | + |
| 57 | +---- |
| 58 | + |
| 59 | +## Introducing Zod 4 | Zod Docs |
| 60 | +[v4.zod.dev/v4](https://v4.zod.dev/v4 "Introducing Zod 4 | Zod Docs") |
| 61 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">TypeScript</span> <span class="jser-tag">library</span> <span class="jser-tag">ReleaseNote</span></p> |
| 62 | + |
| 63 | +Zod 4 betaリリース。 |
| 64 | +パフォーマンスの改善、Bundle Sizeの改善、Tree Shaking可能なAPIを提供する`@zod/mini`と`@zod/core`パッケージを公開。 |
| 65 | +再帰も可能なオブジェクトの定義をする`z.interface()` APIの追加、メタデータを管理数r`z.registry()` API、`toJSONSchema()` APIの追加。 |
| 66 | +文字列のTop Level APIの追加や変更、エラーメッセージを`message`から`error`パラメータへ変更など |
| 67 | + |
| 68 | + |
| 69 | +---- |
| 70 | + |
| 71 | +## Next.js 15.3 | Next.js |
| 72 | +[nextjs.org/blog/next-15-3](https://nextjs.org/blog/next-15-3 "Next.js 15.3 | Next.js") |
| 73 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Next.js</span> <span class="jser-tag">ReleaseNote</span></p> |
| 74 | + |
| 75 | +Next.js 15.3リリース。 |
| 76 | +Turbopackを`next build`でも利用可能に、Rspackのサポート、`instrumentation-client.{js,ts}`のサポート、Navigation Hooksのサポート。 |
| 77 | +`useLinkStatus`の追加、TypeScript LSPのパフォーマンス改善。 |
| 78 | +実験的な機能として`<Link unstable_dynamicOnHovertrue>`のサポートなど |
| 79 | + |
| 80 | + |
| 81 | +---- |
| 82 | + |
| 83 | +## Release 0.12.0 | StyleX |
| 84 | +[stylexjs.com/blog/v0.12.0](https://stylexjs.com/blog/v0.12.0 "Release 0.12.0 | StyleX") |
| 85 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">css</span> <span class="jser-tag">library</span> <span class="jser-tag">ReleaseNote</span></p> |
| 86 | + |
| 87 | +StyleX v0.12.0リリース。 |
| 88 | +パフォーマンスの改善、ESLintプラグインに`no-legacy-media-queries`を追加。 |
| 89 | +`@stylexjs/esbuild-plugin`/`@stylexjs/nextjs-plugin`/`@stylexjs/webpack-plugin`などを非推奨に変更など |
| 90 | + |
| 91 | + |
| 92 | +---- |
| 93 | + |
| 94 | +## Shipping Temporal | SpiderMonkey JavaScript/WebAssembly Engine |
| 95 | +[spidermonkey.dev/blog/2025/04/11/shipping-temporal.html](https://spidermonkey.dev/blog/2025/04/11/shipping-temporal.html "Shipping Temporal | SpiderMonkey JavaScript/WebAssembly Engine") |
| 96 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Firefox</span> <span class="jser-tag">JavaScript</span> <span class="jser-tag">news</span></p> |
| 97 | + |
| 98 | +SpinderMonkeyがECMAScript Proposal Stage 3のTemporalの実装がFirefox 139でリリースされる。 |
| 99 | + |
| 100 | + |
| 101 | +---- |
| 102 | + |
| 103 | +## Astro 5.7 | Astro |
| 104 | +[astro.build/blog/astro-570/](https://astro.build/blog/astro-570/ "Astro 5.7 | Astro") |
| 105 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">astro</span> <span class="jser-tag">ReleaseNote</span></p> |
| 106 | + |
| 107 | +Astro 5.7リリース。 |
| 108 | +実験的なFont APIの追加、Sessions APIがStableに変更、SVGファイルをコンポーネントとして読み込めるように、`astro:config`がStableへ変更など |
| 109 | + |
| 110 | + |
| 111 | +---- |
| 112 | +<h1 class="site-genre">アーティクル</h1> |
| 113 | + |
| 114 | +---- |
| 115 | + |
| 116 | +## Accelerating Large-Scale Test Migration with LLMs | by Charles Covey-Brandt | The Airbnb Tech Blog | Mar, 2025 | Medium |
| 117 | +[medium.com/airbnb-engineering/accelerating-large-scale-test-migration-with-llms-9565c208023b](https://medium.com/airbnb-engineering/accelerating-large-scale-test-migration-with-llms-9565c208023b "Accelerating Large-Scale Test Migration with LLMs | by Charles Covey-Brandt | The Airbnb Tech Blog | Mar, 2025 | Medium") |
| 118 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">JavaScript</span> <span class="jser-tag">test</span> <span class="jser-tag">LanguageModel</span> <span class="jser-tag">article</span></p> |
| 119 | + |
| 120 | +EnzymeからReact Testing Libraryへの移行をLLMを活用してマイグレーションした話。 |
| 121 | +移行のプロセスのステップ化、再試行ループ、コンテキストに関連するテスト/移行ガイドラインの追加することで75%は移行できた。 |
| 122 | +そこからどのステップでうまくいっていないかをコメントに残して、そのファイルを使った学習をすることで97%まで自動的に移行ができたという話 |
| 123 | + |
| 124 | + |
| 125 | +---- |
| 126 | + |
| 127 | +## Deploy your Next.js app to Cloudflare Workers with the Cloudflare adapter for OpenNext |
| 128 | +[blog.cloudflare.com/deploying-nextjs-apps-to-cloudflare-workers-with-the-opennext-adapter/](https://blog.cloudflare.com/deploying-nextjs-apps-to-cloudflare-workers-with-the-opennext-adapter/ "Deploy your Next.js app to Cloudflare Workers with the Cloudflare adapter for OpenNext") |
| 129 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Next.js</span> <span class="jser-tag">cloudflare</span> <span class="jser-tag">article</span></p> |
| 130 | + |
| 131 | +Cloudflare WorkersでNext.jsを動かすOpenNextについて。 |
| 132 | + |
| 133 | + |
| 134 | +---- |
| 135 | + |
| 136 | +## WebAssembly の歩き方 |
| 137 | +[zenn.dev/canary\_techblog/articles/47af6331b4ecfb](https://zenn.dev/canary_techblog/articles/47af6331b4ecfb "WebAssembly の歩き方") |
| 138 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">WebAssembly</span> <span class="jser-tag">article</span></p> |
| 139 | + |
| 140 | +WebAssemblyとはどういうものかについて。 |
| 141 | +WebAssemblyが定義しているもの、バイトコード表現とテキスト表現、仕様の実装であるEmbedderについて |
| 142 | + |
| 143 | + |
| 144 | +---- |
| 145 | + |
| 146 | +## Rspack joins the Next.js ecosystem - Rspack |
| 147 | +[rspack.dev/blog/rspack-next-partner](https://rspack.dev/blog/rspack-next-partner "Rspack joins the Next.js ecosystem - Rspack") |
| 148 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">Next.js</span> <span class="jser-tag">rspack</span> <span class="jser-tag">article</span></p> |
| 149 | + |
| 150 | +Next.jsのRspackサポートについて |
| 151 | + |
| 152 | + |
| 153 | +---- |
| 154 | + |
| 155 | +## Advanced React in the Wild |
| 156 | +[largeapps.dev/case-studies/advanced/](https://largeapps.dev/case-studies/advanced/ "Advanced React in the Wild") |
| 157 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">performance</span> <span class="jser-tag">article</span></p> |
| 158 | + |
| 159 | +Reactで書かれたアプリケーションのパフォーマンス改善の事例集 |
| 160 | + |
| 161 | + |
| 162 | +---- |
| 163 | + |
| 164 | +## Default styles for h1 elements are changing | MDN Blog |
| 165 | +[developer.mozilla.org/en-US/blog/h1-element-styles/](https://developer.mozilla.org/en-US/blog/h1-element-styles/ "Default styles for h1 elements are changing | MDN Blog") |
| 166 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">HTML</span> <span class="jser-tag">article</span> <span class="jser-tag">browser</span> <span class="jser-tag">css</span></p> |
| 167 | + |
| 168 | +セクションに基づいた暗黙的な`<h1>`要素のデフォルトのスタイル(UAのスタイル)が変更される。 |
| 169 | +Firefox 138、Chrome 136以降にこの変更が含まれる |
| 170 | + |
| 171 | + |
| 172 | +---- |
| 173 | +<h1 class="site-genre">サイト、サービス、ドキュメント</h1> |
| 174 | + |
| 175 | +---- |
| 176 | + |
| 177 | +## goldbergyoni/nodejs-testing-best-practices: Beyond the basics of Node.js testing. Including a super-comprehensive best practices list and an example app (April 2025) |
| 178 | +[github.com/goldbergyoni/nodejs-testing-best-practices](https://github.com/goldbergyoni/nodejs-testing-best-practices "goldbergyoni/nodejs-testing-best-practices: Beyond the basics of Node.js testing. Including a super-comprehensive best practices list and an example app (April 2025)") |
| 179 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">test</span> <span class="jser-tag">document</span></p> |
| 180 | + |
| 181 | +Node.jsでのテストについてのドキュメント |
| 182 | + |
| 183 | + |
| 184 | +---- |
| 185 | + |
| 186 | +## lightpanda-io/browser: Lightpanda: the headless browser designed for AI and automation |
| 187 | +[github.com/lightpanda-io/browser](https://github.com/lightpanda-io/browser "lightpanda-io/browser: Lightpanda: the headless browser designed for AI and automation") |
| 188 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">zig</span> <span class="jser-tag">browser</span> <span class="jser-tag">software</span></p> |
| 189 | + |
| 190 | +ZigとV8を使って書かれたヘッドレスブラウザ |
| 191 | + |
| 192 | + |
| 193 | +---- |
| 194 | + |
| 195 | +## Ray-D-Song/lexe: Package your Node.js application into a single executable file, but only 10MB.🔥 |
| 196 | +[github.com/Ray-D-Song/lexe?tab=readme-ov-file](https://github.com/Ray-D-Song/lexe?tab=readme-ov-file "Ray-D-Song/lexe: Package your Node.js application into a single executable file, but only 10MB.🔥") |
| 197 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">Tools</span></p> |
| 198 | + |
| 199 | +LLRTをRuntimeとして使ったSingle Executable Binaryを作成するツール。 |
| 200 | +Node.jsの一部に互換のあるAPIを提供し、バイナリサイズが小さいという特徴がある |
| 201 | + |
| 202 | + |
| 203 | +---- |
| 204 | +<h1 class="site-genre">書籍関係</h1> |
| 205 | + |
| 206 | +---- |
| 207 | + |
| 208 | +## 「型システムのしくみ」発売のお知らせ - まめめも |
| 209 | +[mametter.hatenablog.com/entry/2025/04/10/063009](https://mametter.hatenablog.com/entry/2025/04/10/063009 "「型システムのしくみ」発売のお知らせ - まめめも") |
| 210 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">TypeScript</span> <span class="jser-tag">book</span> <span class="jser-tag">program</span></p> |
| 211 | + |
| 212 | +TypeScriptのサブセットの型チェッカを実装していく型システムについての書籍 |
| 213 | + |
| 214 | + |
| 215 | +---- |
0 commit comments