Frontend Weekly 2024-07-19
Vitest v2.0.0のブラウザモード、Deno v1.45のWorkspaceのサポートやNode.jsとの互換性向上、fronzenフラグの追加、`deno init --lib`コマンドの追加などについて紹介する。
Vitest v2.0.0: Browser Mode
Vitest v2.0.0がリリースされた。非推奨なAPIの削除やカバレッジの改善、ブラウザモードの追加などが行われている。
https://github.com/vitest-dev/vitest/releases/tag/v2.0.0
いくつか破壊的な変更が行われているが、mock.resultsが自動的にresolvedされることを期待したようなコードを書いていたり、coverage周りの設定をしていない場合、そのまま移行できると思われる。 カバレッジのスコアは変わる可能性があるが、基本的に問題があればエラーが出るような変更が多い。
https://vitest.dev/guide/migration.html#migrating-to-vitest-2-0
Broser Modeがサポートされたと紹介されているが、まだ実験的な機能ではあるように見える。 これを利用することで、ブラウザ上でVitestのテストを実行できるようになる。 ProviderとしてWebdriverioとPlaywrightがサポートされている。
https://vitest.dev/guide/browser/#browser-mode
Deno 1.45
Deno v1.45がリリースされた。WorkspaceのサポートやNode.jsとの互換性向上、fronzenフラグの追加、deno init --lib
コマンドの追加などが行われた。
Workspace and Monorepo Support
このリリースでは、ワークスペースのサポートが追加された。 次のようにワークスペースを定義することで、利用することができる。
// deno.json
{
"workspace": ["./add", "./substract"]
}
またnpm workspacesもサポートしており、npmワークスペースにDenoを含めることも、Denoワークスペースにnpmを含めることもできる。
fronzenフラグ
Yarnの--frozen-lockfile
や、npmのnpm ci
相当の--frozen
フラグが追加された。
これにより、コマンドを実行した際にロックファイルが古くなっていればエラーを出すことが出来るようになった。
deno test --frozen --coverage
ライブラリ用の初期化 deno init --lib
ライブラリを作成する際に、deno init
コマンドに--lib
フラグを指定することで、JSRに公開する用のプロジェクトを簡単に開始することができる。
deno init --lib
Fog of Warについて - Remix
Remix v2.10.0でfutureフラグでサポートされたFog of Warという機能についての記事。 Fog of Warは、簡単に言えばルートマニフェストを遅延読み込みさせる仕組みであり、ルートマニフェストを小さく始め、ユーザのリクエストに応じてルートを読み込むようにすることで、膨大なルートを持つサービスであってもパフォーマンスを維持できるようにするもの。 この機能はRemixの次のメジャーバージョン、つまりReact Router v7でデフォルトになる予定。
https://remix.run/blog/fog-of-war
@property
がBaselineに追加
@property
は、CSSのカスタムプロパティを定義するためのルールで、--
で始まるプロパティを定義するためのもの。これにより、カスタムプロパティを定義する際に、プロパティの型や初期値を指定できるようになる。
@property --item-size {
syntax: "<percentage>";
inherits: true;
initial-value: 40%;
}
.container {
display: flex;
height: 200px;
--item-size: 20%;
}
.item {
width: var(--item-size);
height: var(--item-size);
}
このアットルールがBaselineに追加、つまり主要ブラウザで互換性があることが確認された。 https://web.dev/blog/at-property-baseline?hl=en
es-toolkit
の紹介
es-toolkit
はLodash互換を目指している。代替ライブラリよりバンドルサイズやパフォーマンスに優れているとされている。
https://github.com/toss/es-toolkit
個人的にLodashのようなライブラリこそshadcn/uiのような提供方法が適しているように思うが、どうなのだろうか。
MPA View Transitionsの挙動をSpeculative rulesで改善する
View Transitionsは最近CSSのみでMPAでも利用できるようになったが、不安定な環境では、2つの画面をスムーズに切り替えるためのページ読み込みによってフリーズしたような表示になってしまう場合がある。
これを特定のルートを事前レンダリングできるSpeculation Rules APIを利用して改善する方法についての記事。
https://ryanseddon.com/web/view-transitions-speculative/
次のような記述で事前レンダリングをブラウザに要求できる。
<script type="speculationrules">
{
"prerender": [
{
"where": {
"href_matches": "/*"
},
"eagerness": "moderate"
}
]
}
</script>
現状Speculation Rules APIは、FirefoxとSafariではサポートされていない。
https://developer.chrome.com/docs/web-platform/prerender-pages?hl=en
CSSゲームにおけるキーボードナビゲーションの仕組み
コンテナスタイルクエリやアニメーションを利用して状態管理を行いCSSのみでゲームを作る記事。 https://frontendmasters.com/blog/how-keyboard-navigation-works-in-a-css-game/