O hirunewani blog

Frontend Weekly 2024-04-26

Created at

Node.js v22、Rspack v1.0 Release Plan、Electron 30.0.0、ja.react.devの更新などについて紹介する。

Node.js v22

Node.js v22が2024年4月25日にリリースされました。

Node.js 22 Available Now | OpenJS Foundation

Rocket Turtleで追加

https://x.com/nodejs/status/1759953849849167878

require(ESM)

まだ実験的な機能だが、条件付きでESMをCJSで利用できるようになりました。

V8 Maglev

V8エンジンのJust In Time CompilerにあるMaglev階層を利用するように。より細かな最適化が出来るようになり、パフォーマンスが改善した。

node --run

package.jsonのscriptsをnodeが実行できるようになりました。

npmやyarnを介さないので、はやい。

fs.glob、fs.globSync

import { glob } from "node:fs";

glob("**/*.js", (err, matches) => {
  if (err) throw err;
  console.log(matches);
});

node --watch

が安定化。ノード サーバーを実行できるモードで、指定されたファイルまたはパスに変更が発生したときに再ロードされる。

Rspack v1.0 Release Plan

2024年7月にv1リリース予定。 RspackのWebAssembly化や、RSCのネイティブサポートを検討しているとのこと。

Rspack v1.0 Release Plan · web-infra-dev rspack · Discussion #6315

Electron 30.0.0

2024年4月16日にElectron v30が公開された

Electron 30.0.0 | Electron

File System APIがサポートされた

ファイルシステム API - Web API | MDN

BrowserView(Electron固有の実装)がWebContentsView(ChromoiumのWebContentsViewを公開したもの)に置き換えられた。基本的には同様に扱えるとのこと。内部的な複雑さを軽減するのが主な目的だと思われる。

ja.react.devの更新

色々なページが翻訳されている。

日本語版のドキュメントにフックやコンポーネントの使い方についてのページが追加

React のルール – React

CanaryのAPIもいくつか翻訳されています。

リソース・メタデータ関連コンポーネント

https://ja.react.dev/reference/react-dom/components#resource-and-metadata-components

ブラウザ組み込みコンポーネント<link><meta><script><style><title>を用いて、外部リソースを読み込んだり、ドキュメントにメタデータを付与したりすることができるAPI。簡単に言えばReact Helmetのようなこと+αが出来る。<script><style> は、リソースの重複解消処理やサスペンスに対応したロードが可能。

リソースプリロード関連の API

https://ja.react.dev/reference/react-dom#resource-preloading-apis

スタイルやスクリプトなどのリソースを事前にフェッチしておくためのAPI。preconnect、preload、preloadModule、preinitなど。多くのユーザーはライブラリ経由で間接的に利用することになると思われる。

Others

EditContext API

contenteditableからDom Viewの機能を落としたようなもの。

テキスト入力の多様化により、contenteditableのText bufferとDom Viewの結合がネックになっていた。

ChromeとEdgeぐらいでしか使えない。今後、リッチテキストエディタ系のライブラリで使われていくかも。

EditContext APIを理解する

EditContext API - Web APIs | MDN

React WASM Series’ Articles

Rust + WasmでReactをスクラッチから実装する

React WASM Series’ Articles

CSS Containmentの仕組みを理解してレンダリングパフォーマンスをアップする3検証

CSS Containmentの仕組みを理解してレンダリングパフォーマンスをアップする3 検証 | フロントエンドBlog | ミツエーリンクス

CSS Containment・CSS封じ込めとは、content-visivilityやcontainプロパティを指定することで、ページの任意のサブツリーをページのそれ以外の部分から独立させることです。例えば、各セクションが独立していれば、後からjsなどによってセクションが追加されても、既にあるセクションで再計算が行われなくなります。無限ローディングでは、content-visibility:autoを指定しておくことで、ユーザーに関係ないと判断されるコンテンツをブラウザに無視させることが出来ます。

CSS 封じ込め - CSS: カスケーディングスタイルシート | MDN

ポータビリティの高いランタイム環境としてのDenoの薦め

Deno first でやっていく

codemod共有サービス

Codemod: Automated Code Migrations & Dependency Upgrades

LLMを使ったcodemodの生成を行うcodemod studio

Codemod

React19からJSXの変換処理が高速に

React19からJSXの変換処理が高速に | yossy.dev

このPRがマージされた。propsをfor文で回してcloneせずに、代入するようになった。refがReact 19から予約されたprops名ではなくなり、React 17でトランスパイルにcreateElementではなくjsxが用いられるようになったため、これが出来るようになったという話。refが露出したり、createElementが改変されないようにクローン・加工されていた。

https://github.com/facebook/react/pull/28768

コンテナ要素に基づく相対的なCSSの単位(cqw, cqh, cqi, cqb, cqmin, cqmax)

コンテナ要素に基づく相対的な CSS の単位(cqw, cqh, cqi, cqb, cqmin, cqmax)

Viewportに基づく相対的なCSS単位と同じ命名規則に従ってるので、覚える必要はあまりない気がする。

vw: ビューポートの幅の1% → cqw: コンテナ要素の幅の1%

w: 幅、h: 高さ、i: インライン軸の大きさ、b: ブロック軸の大きさ、min: min(i, b)、max: max(i, b)

Reactのコードリーディング

Reactを読んでまほうの正体を(少し)理解する

良いこと言ってる。

伊藤直也「学ばないための言い訳探しは辞めた」無知を認めて挑んだ一休の開発組織改革 - エンジニアtype | 転職type

3度目のサードパーティcookie廃止の延期。上手くいけば2025年初頭から廃止を進めるとのこと。

Google、サードパーティcookie廃止を3度目の延期 年内には実施せず

https://github.com/SAWARATSUKI/ServiceLogos

React v19 betaが公開された

https://react.dev/blog/2024/04/25/react-19