2444 文字
12 分

Frontend Weekly 2024-05-17

Google I/O 2024#

5 月 15 日に Google I/O 2024 が開催されました。Web 関連は次のリンク先で確認できます。

Google I/O 2024: Videos, sessions, and other content

React Conf 2024#

React Conf 2024 が 5 月 15 日から 16 日に掛けて開催されました。アーカイブを YouTube で確認することが出来ます。

Day 1

React Conf 2024

Day 2

React Conf 2024

React Compiler#

React Compiler が OSS として公開されました。Babel plugin として現状提供されており、IR/SSR への変換などは Rust で実装されています。

react/compiler at 149b917c8a4022aeaa170c4fb826107dd2333c68 · facebook/react

どのような変換が行われるかは React Compiler Playground で試すことが出来ます。

React Compiler Playground

合わせて React Compiler のドキュメントも公開されました。

React Compiler – React

次のような状況のようです。

  • フィードバックを受けるために OSS 化された、まだ実験的な機能。
  • Vite と Webpack つまり Remix や Next.js でも動く。
    • Babel プラグインで提供されているので、Babel を使うように設定すれば使えるのは当たり前ではある。
    • Next.js は、既に option での提供を準備しているようです。
    • Babel で提供されたことに対してネガティヴな意見が見られるが、コアは Rust で分けて実装されているため、他の手段での提供も十分に考えられる。
  • react-compiler-healthcheckeslint-plugin-react-compiler を利用することで、正常にコンポーネントやライブラリを最適化できるかを確認できる。
    • React のルールに従っている、で問題なく動作することが条件のようです。
  • 段階的に利用するために、ディレクトリ毎や、オプトインモード(アノテーションモード)によるコンポーネント・フック毎の React Compiler の導入もできる。
    • compilationMode: "annotation" オプションを渡すことで、use clientのようにuse memoを付けたコンポーネントやフックのみに適用できる。ただし、これは早期採用者を支援するための機能とのこと。

Merging Remix and React Router#

新しい Remix は React Router v7 としてリリースする予定のようです。

Remix は以前から React Router のフレームワークのようなものでしたが、Vite プラグイン対応や SPA モードにより、Remix と React Router の差分がほぼなくなったことが理由として言及されています。

実際、Remix の機能のほとんどは React Router で既に利用できます。インポート元を@remix-run/*からreact-routerに切り替えるだけで利用できるようにする予定とのことです。この変更によって React Router から Remix への段階的な移行がよりしやすくなると思われます。

Merging Remix and React Router

WebKit Features in Safari 17.5#

5 月 13 日に Safari 17.5 がリリースされました。

WebKit Features in Safari 17.5

text-wrap: balance#

text-wrap: balance がサポートされました。このプロパティを指定すると、各行が均等な長さになるように改行されるようになります。

Safari のサポートによって、ほとんどの環境で利用できるようになりました。

light-dark()#

ライトモードとダークモードの色を指定できる light-dark()関数が追加されました。これも Safari のサポートにより、ほとんどの環境で利用できるようになりました。

color-scheme: light dark;
color: light-dark(black, white);

@starting-style#

@starting-style は、トランジションさせる要素の初期状態を指定できるアットルールです。これもほとんとの環境で利用できるようになりました。

[popover]:popover-open {
opacity: 1;
transform: scaleX(1);
@starting-style {
opacity: 0;
transform: scaleX(0);
}
}

Chrome 125#

Chrome 125 がリリースされました。

New in Chrome 125  |  Blog  |  Chrome for Developers

CSS Anchor Positioning#

CSS Anchor Positioning は、CSS のみで指定された要素を基準に要素を配置する機能です。Chrome や Edge でしか現状利用できません。

Introducing the CSS anchor positioning API  |  Blog  |  Chrome for Developers

これは複数の新しいプロパティや値を含んでおり、色々なことが出来ます。以下に主なパターンを書き出しました。詳しくは記事を見てください。

.anchor {
anchor-name: --anchor-el;
}
/* インセット領域を利用した配置 */
.anchored-notice-1 {
position: absolute;
/* Anchor reference */
position-anchor: --anchor-el;
/* Position bottom of anchored elem at top center of anchor */
/* top, left, right, bottom, inline-(start|end), block-(start|end) */
inset-area: top;
}
/* 絶対配置を利用した配置 */
.anchord-notice-2 {
position: absolute;
/* Anchor reference */
position-anchor: --anchor-el;
/* Position bottom of positioned elem at top of anchor */
bottom: anchor(top);
right: anchor(right);
/* Center justification to the anchor */
justify-self: anchor-center;
}
.anchord-notice-3 {
position: absolute;
position-anchor: --anchor-el;
inset-area: right span-bottom;
/*
* 配置位置をアンカーの位置に応じて変更する。
*/
position-try-options: --bottom;
}
/* alternate position */
@position-try --bottom {
inset-area: bottom;
}
.anchord-notice-4 {
position: absolute;
position-anchor: --anchor-el;
inset-area: top;
/* 自動的に反転させる flip-blockとflip-inlineの組み合わせ*/
position-try-options: flip-block;
}
.anchord-notice-5 {
position: fixed;
position-anchor: --anchor-el;
/* アンカーが表示されている間、配置された要素を表示し続ける */
position-visibility: anchors-visible;
bottom: anchor(top);
}

DEMO:

Anchor position tool

Compute Pressure API#

Compute Pressure API がサポートされました。現状 Chrome ぐらいでしか利用できません。

Compute Pressure API  |  Web Platform  |  Chrome for Developers

Compute Pressure API は、大きな負荷の変化を検出できます。これによりビデオ会議 Web アプリなどのリアルタイム アプリケーションで、負荷が高まった際に画質を落とすなどの対応ができます。

function callback(records) {
const lastRecord = records[records.length - 1];
console.log(`Current pressure ${lastRecord.state}`);
if (lastRecord.state === "critical") {
// disable video feeds
} else if (lastRecord.state === "serious") {
// disable video filter effects
} else {
// enable all video feeds and filter effects
}
}
const observer = new PressureObserver(callback);
await observer.observe("cpu", {
sampleInterval: 1000, // 1000ms
});

Storage Access API はクロスサイト Cookie の代替として導入された API です。iframe などを通して別のサイトに埋め込まれたコンテンツに対してサードパーティー Cookie へのアクセスを提供していました。Chrome 125 から indexedDB や localStorage など Cookie 以外のストレージにもアクセスできるようになりました。

Storage Access API - Web API | MDN

Storage Access API の使用 - Web API | MDN

CSS round(), mod(), rem()#

round()は指定に応じて、四捨五入や切り捨て・切り上げを行います。Chrome のサポートにより、ほとんどの環境で利用できるようになりました。

https://developer.mozilla.org/en-US/docs/Web/CSS/round

mod()、rem()は名前の通りです。

/* Math.round相当。デフォルトはnearest */
width: round(var(--width), 50px);
/* Math.ceil相当 */
width: round(up, 101px, var(--interval));
/* Math.floor相当 */
width: round(down, var(--height), var(--interval));
/* Math.tranc相当 */
margin: round(to-zero, -105px, 10px);
margin: mod(29vmin, 6vmin); /* 5vmin */
rotate: mod(135deg, -90deg); /* -45deg */
line-height: rem(21, 2); /* 1 */
rotate: rem(140deg, -90deg); /* 50deg */

Others#

折りたたみデバイス向けの Device Posture API と Viewport Segments API のオリジントライアルが開始

Origin trial for Foldable APIs  |  Blog  |  Chrome for Developers

Console Insights in Chrome DevTools#

Google I/O 2024 にて、Chrome DevTools にエラーを Gemini に聞ける機能を搭載することが発表されました。既に米国では実験的機能として提供されているようです。

Chrome 125 DevTools でも紹介されています。

What’s new in DevTools, Chrome 125  |  Blog  |  Chrome for Developers

Playwright v1.44.0#

Playwright v1.44.0 がリリースされました。

https://github.com/microsoft/playwright/releases/tag/v1.44.0

  • アクセシビリティ用の Assertion の追加
    • toHaveAccessibleName()、toHaveAccessibleDescription()、toHaveRole()
  • 前回の実行で失敗したテストのみを実行する--last-failedフラグの追加

など

Using Playwright to Monitor Third-Party Resources That Could Impact User Experience#

Playwight の Request block と Delay 機能を使ってユーザーに影響があるサードパーティスクリプトを特定する方法について解説する記事

Monitor Third-Party Resources that Impact UX with Playwright

MSW v2.3.0#

5 月 8 日に MSW v2.3.0 がリリースされました。マイナーアップデートですが、未処理の例外の扱い方が破壊的に変更されています。

https://github.com/mswjs/msw/releases/tag/v2.3.0

MSW v2.3.0 からリクエストハンドラーの未処理のエラーはネットワーク エラーとしてではなく、サーバーエラーとして扱われるようになりました。以前は、ドキュメントでハンドラ内でのエラーのスローが推奨されていたようですが、これは今後非推奨です。

Astro 4.9#

5 月 9 日に Astro 4.9 がリリースされました。実験的な機能ですが、サーバサイドでコードを実行する Astro Actions とリクエストのリライト機能が追加されました。

Astro 4.8 | Astro

TSKaigi 2024#

5 月 11 日に TSKaigi 2024 が開催されました。

TSKaigi2024 の資料まとめ

TSKaigi 2024 スライドまとめ【非公式】

Using the Page Visibility API#

ページの可視性、タブの切り替えなどでページが見えなくなったことを検知できる Page Visibility API の MDN による解説記事。

Using the Page Visibility API | MDN Blog

Deno による JSDoc によるドキュメント勧め#

JSR では、JSDoc を元にドキュメントを生成する。

How to document your JavaScript package

特に Storybook のページで説明されているイメージはないが、Storybook も JSDoc をドキュメントとして扱ってくれる。

Misconceptions about CSS Specificity#

CSS の詳細度に関する誤解の解説。スコアは合算じゃない、スタイル属性に指定しても詳細度は変わらない、 !important も詳細度に影響しない

  • 詳細度は合計ではない
  • スタイル属性に指定しても詳細度は変わらない(昔は変わったらしい)
  • !important も詳細度に影響しない

Misconceptions about CSS Specificity

Node.js の進化に伴い不要となったパッケージ#

Node.js の進化に伴い不要となったかもしれないパッケージたち

  • node-fetch: 組み込み Fetch API の追加
  • dotenvnode --env-file==.env
  • Chalk:util.styleText API の追加
  • Mocha など: node:test組み込みテストランナーの追加
  • Nodemon:-watchフラグの追加
  • glob :fs.glob API の追加。v22 から
  • Yargs など:util.parseArgs API の追加

ブラウザのリファラーをどう設定するべきか#

現在はデフォルトの設定で安全という主張がされている。

Referrer-Policy の制限を強めると安全になるという誤解 | blog.jxck.io

div 一つで色々な図形を作る#

The Ultimate CSS Shapes Collection

pnpm の依存解決について#

pnpm の node_modules を探検して理解しよう - ドワンゴ教育サービス開発者ブログ

Frontend Weekly 2024-05-17
https://blog.ohirunewani.com/series/frontend-weekly/2024-05-17/
作者
hrdtbs
公開日
2024-05-17
ライセンス
CC BY-NC-SA 4.0