Frontend Weekly 2024-05-31
Storybook 8.1
2024 年 5 月 23 日に Storybook 8.1 がリリースされました。
GUI 上から Story ファイルの自動生成する機能が追加されました。
What’s a story? • Storybook docs
Subpath imports を利用した型安全なモジュールモック機能が追加されました。
Mocking modules • Storybook docs
RSC のユニットテストがサポートされました。多数の Next.js モジュールのモックを作成することで対応されているようです。
https://github.com/storybookjs/storybook-rsc-demo/blob/main/app/note/edit/page.stories.tsx
実験的な機能として、Story をcomposeStories を利用してポータブルストーリーに変換し、Playwright のテストを実行できる機能が入りました。これによりコンポーネントを個別にブラウザテスト出来るだけでなく、Playwright のテストコード生成機能など様々な恩恵を受けることが出来ます。
SolidStart v1.0
2024 年 5 月 22 日、SolidStart の初メジャーリリースが行われました。SolidStart は、Vite ベースの SolidJS アプリを構築するためのフレームワークです。
React Conf 2024 Recap
公式による React Conf 2024 の振り返り。
React Conf Follow-Up - Remix
Remix による React Conf のフォローアップ記事。
React Router v7 は、Remix/React Router から破壊的な変更なしで移行可能であること。React 19 に対応していることなどについて触れられています。
明示的な型注釈によって推論コストを下げる
現状 tsc の完全な代替は存在せず、Rust 製のツールでも tsc が大きなボトルネックになっていることに触れた上で、パフォーマンスを改善する手段としてユーザに明示的な型注釈を求めることで推論コストを下げるアプローチを紹介しています。
これを実現する手法として、TypeScript 5.5 でサポート予定のisolatedDeclarations ****モジュールからエクスポートされる関数や変数に明示的な型注釈をつけることを強制するオプションなどが紹介されています。
// Function must have an explicit return type annotation with --isolatedDeclarations.(9007)export const getRandomNum = () => Math.random() * 10; // ❌// export const getRandomNum = (): number => Math.random() * 10; // ✅tsc の代替実装は難しい。機能だけでなく tsc 自体のパフォーマンス改善に追い付かないといけない。TypeScript のエコシステムでは、代替実装ではない別のアプローチが模索されている。
Hidden vs. Disabled In UX
ユーザーが利用できない機能を無効にするべきか非表示にするべきか。
Hidden vs. Disabled In UX — Smashing Magazine
どちらを使うべきかに次のロードマップを提示している。
特定のユーザーはこの要素を操作できるようになりますか? はい → 無効化すべき いいえ → 非表示すべき
インジケーター、バリデーション、通知:適切な伝達手段の選択
ユーザーへの情報の伝達方法としてインジケーターとバリデーション、通知の比較。
インジケーター、バリデーション、通知: 適切な伝達手段の選択
次のようにまとめている。
- インジケーター:動的なコンテンツや UI 要素に関する補足情報を提供する。インジケーターは条件つきの伝達手段であり、特定の条件下で表示されたり変化したりする。
- バリデーション:ユーザーの行動や入力に密接な関連がある。
- 通知:システム関連のイベントを対象とする。
Rethinking Text Resizing on Web - Airbnb
フォントズームを考慮して、rem を優先して使う意思決定をした話。デザイナー・エンジニアがスムーズに移行できるために、どちらにも px を自動的に rem に変換する機能を提供した。コントロールが難しい Mobile Safari への対応もされている。
Others
City In A Bottle – A 256 Byte Raycasting System
HTML の表示を Markdown にする遊び。擬似要素を多用して実現しようとしている。img 要素が画像が指定されていない表示になってしまっている点以外は実現できていそう。display