Cybozu Frontend Monthly #54

イベント概要
サイボウズフロントエンドマンスリー は、サイボウズ社内で行っているフロントエンド情報共有会「フロントエンドウィークリー」の公開版です。
その月に気になったフロントエンドの情報を、サイボウズのフロントエンドエンジニアのメンバーが共有していきます。
このイベントのハッシュタグは #サイボウズフロントエンドマンスリー です。
※フロントエンドウィークリーとは
毎週火曜の 17:00 〜 18:00
で社内向けに行っているフロントエンドの気になる記事を紹介する会です。
2016年3月15日から行われています。
ハッシュタグ
#サイボウズフロントエンドウィークリー
で実況しています。
zennのpublicationにてウィークリーのまとめも投稿していますので、ぜひこちらもご覧ください。 https://zenn.dev/p/cybozu_frontend
開催日
2025年01月28日
イベントページ
https://cybozu.connpass.com/event/341910/
配信URL
https://www.youtube.com/watch?v=K_BjZ89mJu0
メンバー
コンテンツ
👀 Notable Articles
Storybook v9 で test メソッドの導入を検討
- 共有者: @nus3_
Storybook のインタラクションテストを定義する際に使っていた play 関数について、Jest や Vitest のようにかけるような test メソッドを v9 で導入することを検討しているそうです。
RFC の概要を見ると、test メソッドは次のように形式が提案されています
import { config } from '#.storybook/preview';
import { AddLabelForm } from './AddLabelForm';
const meta = config.meta({ component: AddLabelForm });
// the story can be seen as the arrange step in testing
export const ManyLabels = meta.story({
args: { labels: [{...}, {...}] }
});
// 👇 easy to write (and read!) full sentence specs!
ManyLabels.test('submitting invalid label shows inline error', async ({ canvas }) => {
// act/assert
await userEvent.type(canvas.getByText('Label:'), 'invalid label');
await userEvent.click(canvas.getByRole('button'));
await expect(...).toHave(...);
});
この API の設計は難しく、どのようなインターフェースにするかはフィードバックを求めているとのことです。
Jest や Vitest のようにインタラクションテストも書きたいという要望はとてもわかるので Storybook9 のリリースが楽しみですね。
facebookexperimental/Recoil のリポジトリがアーカイブに
- 共有者: @mugi_uno
Meta 社が OSS として公開していたフロントエンドの状態管理用ライブラリである facebookexperimental/Recoil のリポジトリが 2025/1/2 にアーカイブされました。 2023/4/12 にリリースされた 0.7.7 を最後に更新が無い状態が続いており、状況を尋ねる Issue なども作成されていましたが、残念ながら今後はメンテナンスされないことになったようです。
内部事情として Meta 社のレイオフの関係でメインのコントリビュータが不在となり、その後も引き継がれることがなかった、という背景が語られています。 https://x.com/mengdi_en/status/1875916781950468341
New Front-End Features For Designers In 2025
- 共有者: @sakupi01
2025 年、積極的に使っていきたい CSS の新機能を振り返る記事です。今回は、この中から、個人的に注目している機能を紹介します。
CSS Anchor Positioning For Tooltips And Popovers
2024 年は、Popover API が Baseline Newly Availableとなりました。これにより、popover
属性を任意の HTML 要素につけ、Invoker となる要素(Popover をトリガーする要素)にpopovertarget
属性を指定することで、Popover を実装することができるようになりました。これにより、任意の要素を Top Layer に表示し、その開閉を JS を使わずに実現でき、そして Light Dismiss で閉じることもできるようになりました。
そんな Popover に強力な機能を付加するのが、CSS Anchor Positioning です。以下のようにanchor-name
・position-anchor
プロパティ(またはanchor()
関数)を利用することで、Anchor と Positioned Element を紐付けて、配置を指定できます。
<button popovertarget="ex-tooltip">Open</button>
<div popover id="ex-tooltip">Yey</div>
<style>
button {
anchor-name: --anchor-btn;
}
[popover] {
position-anchor: --anchor-btn;
position-area: top center;
}
</style>
この 「Anchoring」の概念により、Top Layer に配置される Popover や Dialog といった要素を、Anchor となる要素を基準に配置することが可能になりました。
High-Definition Colors With OKLCH And OKLAB & Relative Colors In CSS
CSS Color Module Level 4 では、oklch()
や oklab()
関数が追加されました。
これまで、hsl()
による指定では明度(Lightness)・彩度(Saturation)を一定にしても視覚的な均一性は保証されていませんでした(特に、黄色系の色味が明るすぎるなど)。
OKLCH 色域とは、明度(Lightness)、彩度(Chroma)、色相(Hue)で構成される色域で、sRGB 色域に比べて、 明度・彩度の均一性が改善された色空間です。
oklch()
や oklab()
が追加された背景に関しては、以下の記事でわかりやすく解説されています。
また、CSS Color Module Level 5 で追加された CSS Relative Color Syntax を併用することで、from
キーワードで指定された色を基準に、それぞれのカラーパラメータを指定することができます。
.lighten-by-25 {
background: oklch(from blue calc(l * 1.25) c h);
background: oklch(from blue calc(l + 0.25) c h);
}
Collaborating across W3C and Ecma for web-interoperable server runtimes through WinterTC
- 共有者: @sajikix
WinterCG が、JavScript の標準化も行なっている Ecma International に移行し、新たに WinterTC(TC55) という名称に変更されました。
元々、WinterCG は 2022 年に設立された W3C の ランタイムの相互運用性を推進するコミュニティグループで、Deno や Node.js Cloudflare Workers などのステークホルダーが参加していました。その成果としてMinimum Common APIなどが公開されています。
今回、この WinterCG の機能や作業を Ecma International に移行し、新たに WinterTC(Web-interoperable server runtimes Technical Committee) という名称の Ecma Technical Committee として立ち上げることが決定されました。EcmaInternational では Technical Committee ごとに番号が振られており、WinterTC は TC55 としても呼ばれるようになります。
この移行により JavaScript の標準化(=ECMAScript)も行なっている Ecma の TC39 との連携がより強まることはもちろん、W3C のコミュニティグループとして公開まで至らなかった独自標準の公開・策定も視野に入れた移行のようです。
WinterTC は W3C の中からは抜ける形となりますが、引き続き W3C のワーキンググループとも連携をとっていくとしています。
参考
🗓 Monthly Articles
📖 Framework, Library
- Next.js 15.1
- React19 の Stable に対応した Next.js 15.1 がリリース
- Node v23.4.0
assert.partialDeepStrictEqual
が試験的に追加
- Next.js PPR と比較して理解する Astro Server Islands
- Astro と Next.js のレンダリングモデルを解説
- Build Qwik with Deno
- Deno で Qwik を使ってアプリを作成するガイドがドキュメントに追加
- Astro 5.0
- Server Islands などが追加された Astro 5.0 がリリース
- State of JavaScript 2024
- State of JavaScript 2024 が公開
- bun test が速いので vitest から置き換えたらめちゃ高速化された
- vitest から bun test に置き換えた結果実行速度が大幅に向上した事例
- Security Vulnerability Report | rspack
- postinstall script を悪用した rspack へのサプライチェーンアタックがあったという報告
- recoil が 1 月 2 日、アーカイブに
- 5 tips to effectively optimize INP in React
- React で INP を改善するための tips
- standard-schema/standard-schema
- zod や valibot などに代表されるスキーマライブラリなどの標準インタフェースを定義した仕様
- 2024 JavaScript Rising Stars
- 2024 年に GitHub での Star 数の増加が大きかった JavaScript 関連リポジトリのランキング
⚡️ Services
- MDN 2024 content projects | MDN Blog
- MDN が、HTTP, MathML, Web Manifest のドキュメントに絞り、2024 年 7 月から 12 月にかけてコンテンツを刷新
💬 Languages
- CSS Wish List 2025
- Eric Mayer が 2025 年の CSS に期待する機能をまとめた記事
- New Front-End Features For Designers In 2025 — Smashing Magazine
- ここ数年で新たに利用可能となった HTML および CSS 機能のまとめ
🖥 Browsers
- Baseline 2024: more tools to help web developers
- Baseline 2024 のふりかえり
- Release Notes for Safari Technology Preview 210 | WebKit
- CSS の text-autospace property や ::details-content pseudo-element サポートが追加された Safari Technology Preview 210 のリリースノートが公開
- Proposed contractual remedies in United States v. Google threaten vital role of independent browsers
- 米司法省が Google に提示した独占禁止是正措置に対して、「Web 自体に害を与えるのではないか」と Mozilla が警鐘を鳴らしている記事
- 2024 Year-in-Review: A look back at your year with Microsoft Edge - Microsoft Edge Blog
- Microsoft Edge の 2024 年のふりかえり
- Firefox 134.0
- RegExp.escape() や Promise.try() のサポートなどが含まれる Firefox 134.0 がリリース
- Firefox 135.0a1 Nightly
- Temporal のサポートなどが含まれる Firefox 135.0a1 Nightly がリリース
- Announcing Supporters of Chromium-based Browsers
- https://blog.chromium.org/2025/01/announcing-supporters-of-chromium-based.html
- https://www.linuxfoundation.org/supporters-of-chromium-based-browsers
- Google と The Linux Foundation がパートナーシップを締結
📝 Specifications
- Form Validation That Doesn’t Annoy Users: CSS :user-valid and :user-invalid
- ユーザのインタラクション後に発火する:user-valid, :user-invalid について、従来の:invalid, :valid との挙動を比較しながら解説
- ECMA-426 1st edition – Source map format specification
- 新しく JavaScript、WebAssembly、および CSS のソースマップ形式の仕様が策定された
- Goodbye WinterCG, welcome WinterTC
- JS ランタイムの相互運用性を推進するコミュニティグループであった WinterCG が Ecma International に移行し、新たに WinterTC という名称に変更
- Updates to the customizable select API
- 2024/9 に出された RFC からの差分をまとめた、「Customizable Select Element」のアップデート記事
🦆 Others
- コピペってなんだろう?Clipboard 編
- OS ごとのクリップボードの大まかな仕組みを解説
- The 2024 Web Almanac
- Web Almanac 2024 のレポートが公開
- A Note from our Executive Director - Let’s Encrypt
- Let’s Encrypt の 2024 年のふりかえりと 2025 年の展望
- 2024 In Review: What’s New In Web Performance? | DebugBear
- 2024 年にあった Web パフォーマンス周りの変化についてまとめた記事
- Design Token-Based UI Architecture
- セマンティックトークンやコンポーネントトークンなどデザイントークンの解説記事
- google.com の証明書の誤発行が CT で見つかる
- Blog: DoubleClickjacking: A New Era of UI Redressing
- 悪意のあるページによるダブルクリックを利用した攻撃手法に関しての解説
- What is an Input Method Editor?
- 文字入力に使われる IME の基本的な概念や API に関しての解説