Cybozu Frontend Monthly #38
イベント概要
サイボウズフロントエンドマンスリー は、サイボウズ社内で行っているフロントエンド情報共有会「フロントエンドウィークリー」の公開版です。
その月に気になったフロントエンドの情報を、サイボウズのフロントエンドエキスパートチームのメンバーが共有していきます。
このイベントのハッシュタグは #サイボウズフロントエンドマンスリー です。
※フロントエンドウィークリーとは
毎週火曜の 17:00 〜 18:00
で社内向けに行っているフロントエンドの気になる記事を紹介する会です。2016年3月15日から行われています。
ハッシュタグ
#サイボウズフロントエンドウィークリー
で実況しています。
zennのpublicationにてウィークリーのまとめも投稿していますので、ぜひこちらもご覧ください。 https://zenn.dev/p/cybozu_frontend
開催日
2023年08月29日
イベントページ
https://cybozu.connpass.com/event/292170/
配信URL
https://youtu.be/MuH3pBElZLY?si=TEEMkixta49xZ9e8
メンバー
コンテンツ
👀 Notable Articles
dnt — the easiest way to publish a hybrid npm module for ESM and CommonJS
- 共有者: nus3
CJS と ESM に対応した npm パッケージを簡単に作成できる dnt の紹介記事です。
dnt を使うことで、Deno で実装したモジュールを npm パッケージとして公開できます。また、dnt ではビルド時に生成された CJS、ESM のファイルそれぞれに対して Node.js でテストを実行してくれます。
実際に dnt を使ってみましたが、Deno を使って開発できるので、Lint、Format、Test、TypeCheck などのエコシステムがすぐに使えるのがとても良い点だと感じました。dnt はメジャーバージョンではなかったり、Deno の npm パッケージのサポート状況も考慮する必要がありますが、個人的には npm パッケージを作成する際に試してみたい構成です。
Sending UI over APIs
- 共有者: nakajmg
バックエンドがデータだけでなく UI も制御する手法である Server-Driven UI の紹介記事です。
以前Airbnb がこの手法を採用していることで話題になりましたが、Lyft や Instagram でもこの Server-Driven UI が採用されているそうです。
Server-Driven UI の特徴として、UI の変更がクライアントのコードの変更なしにできる点があります。この特徴を活かして Instagram では UI の変更・修正や A/B テスト、また A/B テストの結果に応じてユーザーに合わせた UI の表示を行うなど、イテレーションを高速に回していると紹介しています。 Web だけでなく iOS・Android アプリでサービスを展開してる場合に、ストアの審査などのプロセスを経ずに UI の更新をユーザーに届けられるといった利点についても触れています。
Server-Driven UI には、クライアントの表示ロジックの複雑さをサーバー側に移すといった側面もあるので、現代の複雑になりがちな Web アプリケーションの設計において一考の余地があるのかなと思いました。
記事中で紹介されている動画では、Instagram のエンジニアと Builder.io の CEO が Server-Driven UI について会話しているので、興味がある方はぜひ視聴してみてください。
Speeding up V8 heap snapshots
- 共有者: b4h0_c4t
Node.js 等 の JavaScript エンジンとして利用されている V8 がヒープスナップショット機能のパフォーマンスを改善させた話。
Web アプリケーション開発時にメモリリークが疑われる場合、その診断として活用されるツールの一つがヒープスナップショットです。 ヒープスナップショットは、Web アプリケーション実行中の特定タイミングにおけるヒープメモリの状態をスナップショットとして保存することが可能です。 これを利用することで開発者はどの時点でメモリリークが発生してそうなのかをある程度把握することができます。
当時、500MB のヒープを記録するのに 30 分を超える時間がかかっていたことに疑問を感じた開発者は問題を調査し、文字列をメモリに格納する際に生成するハッシュアルゴリズムに問題があることを発見しました。
ハッシュは通常の場合ある程度ランダムな値が生成されますが、格納する値が数値の時、桁数と数値を組み合わせた値をハッシュとして提供します。 つまり、0 から 9、10 から 99、100 から 999 といった数値は連続したメモリに格納されることになります。 このとき、とある文字列データのハッシュが数値のハッシュとバッティングした場合、該当の数値とそれ以降の数値のハッシュは次に空いているメモリの配列を探索するのですが、その探索コストがボトルネックとなっていることがわかりました。
解決策として、数値データのハッシュを生成する際のアルゴリズムに追加で値を 2bit 左シフトすることでメモリ空間での連続性がなくなり、該当の問題は対処されました。 一見違和感ないハッシュアルゴリズムも、特定のケースでパフォーマンスが大きく悪化してしまうという例でした。
また、この一件で V8 に --profile-heap-snapshot
というフラグが追加されており、ヒープスナップショット自体のプロセスをプロファイルすることができるようになっています。
ヒープスナップショットと合わせて、興味のある方はぜひ試してみてください。
🗓 Monthly Articles
📖 Framework, Library
- How React 18 Improves Application Performance
- React に新しく導入された transition, suspense, react server components などのパフォーマンス関連機能の解説
- How Turborepo is porting from Go to Rust
- Turborepo が Go から Rust へ徐々に移行している話
- Node.js v16 EOL
- Node.js v16 が 9/11 に EOL します
- Bun v0.7.0
- Bun v0.7.0 のリリース記事。Vite, WebWorker, structuredClone, AsyncLocalStorage などが利用可能に
- PartyKit
- リアルタイムやマルチプレイヤー向けのアプリケーションを作るための SDK
- Astro 2.9: View Transitions (experimental)
- Astro v2.9 のリリース記事。View Transitions が experimental として追加
- Astro 2.10: Persistent State in View Transitions
- Astro v2.10 のリリース記事。ViewTransitions で画面遷移した際に再レンダリングを抑えるディレクティブの追加など
- Introducing Valibot, a < 1kb Zod Alternative
- Zod の代替となる軽量 Validator
- Caching in Next.js
- Next.js のドキュメントに cache の説明が追加
- httptoolkit/brotli-wasm
- Brotli で圧縮解凍ができる Rust to Wasm 製ライブラリ
- https://bun.sh/1.0
- Bun v1 が 9/8 にリリース予定
- Joy UI is now in Beta!
- Joy UI が Beta リリース
- pnpm/pacquet
- pnpm org の Rust 製パッケージマネージャ
- evanw/esbuild v0.19.0
- esbuild v0.19.0 リリース。エントリポイントでワイルドカードが使用可能に
- Node.js’s Config Hell Problem
- Node.js はコンフィグが多くて辛いという記事(発信元は Deno)
- nodejs/node-core-test
node:test
の npm package 版、知らなかった
- src: add built-in .env file support - nodejs/node
- Node.js が
.env
をビルトインサポート
- Node.js が
⚡️ Services
- Build and Ship Astro Sites with Deno and Deno Deploy
- Astro の SSR の機能を使って Deno Deploy へデプロイする方法の紹介記事
- How we reduced the size of our JavaScript bundles by 33%
- Dropbox が JavaScript のバンドルサイズを削減した話
🖥 Browsers
- Arc 1.0 is now available
- Chromium ベース新ブラウザ「Arc」の v1 がリリース
- An update on Chrome Security updates – shipping security fixes to you faster
- Chrome がセキュリティーアップデートを週次で実施するように
🦆 Others
- Dan leave Meta
- React の開発者で知られている Dan さんが Meta 社を退職するそうです
- Security alert: social engineering campaign targets technology industry employees
- 悪意のあるプログラムを含む GitHub プロジェクトへ開発者を誘導してマルウェア等に感染させようとする事例への注意喚起
- Jotai で快適フロントエンド開発
- 状態管理ライブラリを Recoil から Jotai へ乗り換えた話
- Firefox がついに Chrome よりも高速なブラウザに
- Treeholder が公開したベンチマークテストの結果が Chrome よりも Firefox の方が高スコアだったという話
- dnt — the easiest way to publish a hybrid npm module for ESM and CommonJS
- dnt を使って Deno のモジュールを Node.js と npm 互換のパッケージとして公開する方法
- Understanding React Server Components
- Vercel による React Server Components についての解説記事
- import.meta.filename and import.meta.dirname
- host defined として ECMA で扱われている import.meta 周りについて、Node.js に対する PR をきっかけに WinterCG で仕様を決める動きが始まっているという話
- React Server Component のテストと Container / Presentation Separation
- RSC のテストや設計手法についての実例記事
- Introducing Next.js Commerce 2.0
- Next.js 13 の機能を使った EC サイト用のテンプレート
- shadcn join Vercel
- Radix UI と Tailwind CSS で作られたスニペット集の shadcn/ui の作者が Vercel にデザインエンジニアとして join
- Tracking issue: Performance improvement
- Valibot が Zod を比較対象としてほとんどの場合でパフォーマンスが悪いため、その分析や改善しようという Issue
- react-hook-form が Valibot に対応、Zod 比較でバンドルサイズが 92%削減
- react-hook-form が Valibot に対応した話
- Blogged Answers: My Experience Modernizing Packages to ESM
- Redux の開発者が経験した様々なツールで動作するモジュールを開発することの難しさについての記事
- Vue.js エコシステム動向 2023
- Vue.js とそのエコシステムの最近の動向
- Bringing Sharp to WebAssembly and WebContainers
- ブラウザで Node.js を直接実行する WebContainers で画像変換ライブラリの Sharp が使用可能に
- An Introduction to htmx, the HTML-focused Dynamic UI Library
- htmx の紹介記事
- 認可のアーキテクチャに関する考察(Authorization Academy II を読んで
- 認可の関心分離方法について整理した記事
- RedwoodJS Build Competition
- RedWood Build Competition が開催
- React 研修
- 株式会社リクルートのエンジニアコース新人研修で実施された React 研修の公開資料
- epicweb-dev/epic-stack decisions/031-imports.md
- epic-stack で tsconfig の path alias と Node.js の import フィールドの両方を利用するという決定
- Next.js に next/testmode という概念が出現し MSW x Playwright のテストがやりやすくなりそう
- Next.js に追加された
next/testmode
についての解説記事
- Next.js に追加された
- Vercel と提携し、ちょっと社はより多くの日本企業に向けてフロントエンドクラウドを提供します
- ちょっと株式会社が日本初の Vercel のパートナー企業に
- Resume and pause animations in CSS
animation-play-state
を使って CSS アニメーションを簡単に中断・再開する方法