🏄
Matsuri-tech Frontend Weekly 2023-11-10

hrdtbs

hrdtbs

2023年11月10日
MFWChromeAstroRemixDeno

社内向けに、フロントエンド関連のニュースや業務で発生したQ&A、利用しているライブラリなどの情報を定期的に書いています。

社内の開発部メンバーに向けて直近でリリースされたライブラリなどの情報をMatsuri-tech Frontend Weeklyとしてまとめています。内容は実務や趣味で使えそうなものを中心に扱っており、網羅的ではなく偏りがあります。

# Chrome 119

2023年10月31日にChrome 119がリリースされました。

New in Chrome 119  |  Blog  |  Chrome for DevelopersChrome 119 is rolling out now! With an update to the expiration date upper limit for cookies already in storage. CSS has new pseudo classes, relative color syntax, Fenced Frames improvements like ad size macros, and there’s plenty more.

Chrome 119では、Chrome 114から新規または更新したCookieに適用されていた有効期限の400日制限が、全てのCookieに対して遡って適用されるようになりました。Chromeは、2023年第1四半期から第3四半期にかけて全てのユーザーに対してサードパーティ Cookie を無効化していく予定です。

Przygotowanie do wycofania plików cookie innych firm  |  Privacy Sandbox  |  Google for DevelopersJeśli Twoja witryna korzysta z plików cookie innych firm, czas na podjęcie działań w miarę zbliżania się ich wycofania. Od III kwartału 2024 r. Chrome zamierza wyłączyć pliki cookie innych firm dla 1% użytkowników, aby ułatwić testowanie, a następnie zwiększyć od III kwartału 2024 r. 100% użytkowników. W tej serii z serii „Odliczanie plików cookie” pokażemy oś czasu i natychmiastowe działania, które możesz podjąć, by przygotować swoje witryny.Przygotowanie do wycofania plików cookie innych firm  |  Privacy Sandbox  |  Google for Developers

# user-valid, user-invalid擬似クラス

ユーザー操作後に値の検証結果に応じて有効及び無効と判断されたフォーム関連要素にマッチする擬似クラス :user-valid:user-invalidがChromeでサポートされました。これによりメジャーな環境の全てで:user-valid:user-invalidが利用できるようになりました。

:user-valid (:-moz-ui-valid) - CSS: カスケーディングスタイルシート | MDN:user-valid は CSS の擬似クラスで、制約検証に基づき値の検証が正しく行われた有効なフォーム要素を表します。ただし、 :valid とは異なり、ユーザーが操作した後にのみ一致します。:user-valid (:-moz-ui-valid) - CSS: カスケーディングスタイルシート | MDN

:user-invalid (:-moz-ui-invalid) - CSS: カスケーディングスタイルシート | MDN:user-invalid は CSS の擬似クラスで、ユーザーの操作の後、制約検証に基づき有効と判断されなかった検証済みのフォーム要素を表します。:user-invalid (:-moz-ui-invalid) - CSS: カスケーディングスタイルシート | MDN

:valid:invalidと異なりユーザーの操作後にのみマッチするため、例えばrequired属性を持っている要素では初期値がない場合、最初から:invalidが効いてしまいますが、:user-invalidではユーザーが操作するまで適用されません。

input:user-invalid {
	border-color: red;
}
input:user-valid {
	border-color: green;
}

user-valid, user-invalid sample - StackBlitzBlank starter project for building ES6 apps.user-valid, user-invalid sample - StackBlitz

# CSS Relative colors

CSS Relative colors syntaxを利用すれば、特定の色から別の色を導出することが出来ます。Chrome以外では、SafariとEdgeで利用できます。

CSS relative color syntax  |  Blog  |  Chrome for DevelopersCreate new colors based on another color's channels and values.

色空間(from 色 ...指定された色空間における色のパラメータ [/ 透過度])
rgb(from green r g b)
hsl(from green h s l)
hsl(from green h s l / alpha)

この機能を利用すれば、例えば特定の色からパケットを生成したり、コントラストが十分に保たれた文字色をCSSのみで生成することが出来ます。

/* トライアド配色 */
var(--base-color)
oklch(from var(--base-color) l c calc(h - 120)
oklch(from var(--base-color) l c calc(h + 120)
/* 単色パレット */
var(--base-color)
oklch(from var(--base-color) calc(l - 10) c h)
oklch(from var(--base-color) calc(l - 20) c h)
oklch(from var(--base-color) calc(l - 30) c h)
oklch(from var(--base-color) calc(l - 40) c h)
/* 類似パレット */
var(--base-color)
oklch(from var(--base-color) l c calc(h + 45))
oklch(from var(--base-color) l c calc(h + 90))
oklch(from var(--base-color) l c calc(h + 135))
/* 色の反転 */
rgb(from var(--base-color) calc(1 - r) calc(1 - g) calc(1 - b));
/* 補色 */
hsl(from var(--base-color) calc(h + 180) s l)

CSS Relative colors sample - StackBlitzBlank starter project for building ES6 apps.CSS Relative colors sample - StackBlitz

# WasmGC

WebAssemblyのガベージコレクション機能 WasmGCがサポートされました。これによりGC機能が含まれるプログラミング言語をWasmに移植する際にGCを移植する必要がなくなります。

Czyszczenie pamięci WebAssembly (WasmGC) jest teraz domyślnie włączone w Chrome  |  Blog  |  Chrome for DevelopersIstnieją 2 typy języków programowania: języki programowania wymagające pamięci podręcznej oraz te, które wymagają ręcznego zarządzania pamięcią. W tym artykule wyjaśniamy, w jaki sposób dzięki WebAssembly Garbage Collection (krótkiej usłudze WasmGC) można przenieść do WebAssembly pobrane ze śmieci języki.

# Remix 2.2.0 ❤️ Vite

2023年10月31日にRemix 2.2.0がリリースされました。

Remix ❤️ ViteToday we’re announcing that unstable support for Vite is available in Remix v2.2.0!Remix ❤️ Vite

Remixはコンパイラではなく、Viteプラグインとして使えるようになりました。

import { unstable_vitePlugin as remix } from "@remix-run/dev";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [remix()],
});

これによりRemixはViteのエコシステムを利用できるようになりました。

# Deno 1.38

2023年11月2日にDeno 1.38がリリースされました。

Deno 1.38: HTML doc generator and HMRDeno 1.38 ships with HTML doc output, hot module replacement, improved Node.js compatibility by allowing you to use your own `node_modules` folder, and more.Deno 1.38: HTML doc generator and HMR

ドキュメントを静的なHTMLとして生成できるようになりました。

deno doc --html

HMRのサポートが入りました。このバージョンから細かなunstable flagが導入されています。今後、全ての不安定な機能を有効にする--unstable は非推奨になります。

deno run --unstable-hmr mod.ts

NpmやYarnによってnode_modulesにインストールされたパッケージを利用できるようになりました。

// deno.json
{
  "unstable": ["byonm"]
}

Dotenvファイルの読み込みがサポートされました。

deno run --env

他、EventSource APIのサポートなどが含まれています。

# ESLint v8.53.0

2023年11月3日にリリースされたESLint v8.53.0でフォーマット関連のルールが全て非推奨になりました。

ESLint v8.53.0 released - ESLint - Pluggable JavaScript LinterA pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease. ESLint v8.53.0 released - ESLint - Pluggable JavaScript Linter

廃止されるルールや、廃止するモチベーションについては次の記事に書かれています。代替手段としてPrettierの使用やESLint Stylisticが紹介されています。

Deprecation of formatting rules - ESLint - Pluggable JavaScript LinterA pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease. Deprecation of formatting rules - ESLint - Pluggable JavaScript Linter

# Astro 3.4: Page Partials

2023年10月26日にAstro 3.4がリリースされました。

Astro 3.4: Page Partials | AstroAstro 3.4 is now released with support for page partials, improved image optimization performance, and an early preview of a new dev overlay.Astro 3.4: Page Partials | Astro

ページコンポーネントを部分的なHTMLとして利用できるPage Partials機能が追加されました。

// pages/index.astro
<form hx-post="/partials/todos" hx-target="#todo-list" hx-swap="afterbegin">
	<input type="text" id="txtTodo" name="todo" />
</form>
<ul id="todo-list"></ul>

// pages/partials/todos.astro
---
export const partial = true;

const formData = await Astro.request.formData();
const todo = formData.get("todo")?.toString();
---
<li>{todo}</li>

ex. Astro 3.4 Page Partials - StackBlitzRun official live example code for Astro Blog, created by Withastro on StackBlitzex. Astro 3.4 Page Partials - StackBlitz

他、Imageコンポーネントのパフォーマンス改善、パフォーマンスやアクセシビリティに関する情報を表示してくれるDev Overlay機能が実験的に追加されました。

# Astro 3.5: i18n Routing

2023年11月8日にAstro 3.5がリリースされました。

Astro 3.5: i18n Routing | AstroAstro 3.5 is out! It includes experimental support for i18n routing, prefetch for speedier page loads, form support with ViewTransitions, image optimization improvements, and more.Astro 3.5: i18n Routing | Astro

実験的な機能として多言語対応を行えるi18n Routing APIが追加されました。この機能を有効化するとAstro.preferredLocaleAstro.preferredLocaleList が利用できるようになります。

// astro.config.mjs
import {defineConfig} from "astro/config";

export default defineConfig({
  experimental: {
    i18n: {
      defaultLocale: "en",
      locales: ["en", "es", "pt-br"]
    }
  }
})

他、プリフェッチのオプトイン機能化や、Qwikのサポートなどが入っています。

# Turbosnap (beta) - Chromatic

Storybookを利用したVRTを実行できるサービス Chromaticから、変更があったコンポーネントだけをテストできる機能 TurboSnapがベータリリースされました。TurboSnapを利用すればスナップショットの数が減り、ビルド時間の短縮につながります。

Speed up tests & optimize usageChromatic’s TurboSnap (beta) feature accelerates tests by tracking changes in component files and testing only what’s been modified. This saves you time and optimizes snapshot usage.Speed up tests & optimize usage