フロントエンドの2023年を振り返る(後編)
この記事はyamanoku Advent Calendar 2023の24日目の記事になります。
yamanokuがウォッチしてきたフロントエンドにまつわる動向やニュースを振り返ります。今回は7月から12月までの後半を振り返ってみます。
7月
Prettier 3.0リリース
Prettierの3.0がリリースされました。すべてのソースコードをESMに対応したこと、ラテン文字と中国語または日本語の文字の間に半角スペースが挿入されなくなったこと、trailingComma
がall
でデフォルトになりました。今回のアップデートに伴いNode.jsサポートポリシーも決めたそうです。
Kuma UIのリリース
kuma-ui/kuma-ui: 🐻❄️ A Headless, Utility-First, and Zero-Runtime UI Component Library ✨
ヘッドレス、ユーティリティファースト、そしてゼロランタイムなUIコンポーネントライブラリであるKuma UIがリリースされました。
react-tweet
パフォーマンスを犠牲にすることなく、1行のコードでツイートをReactアプリケーションに埋め込むことができるライブラリです。
この頃Twitterが𝕏へと改名するというのもあり、シュールな発表であったのを記憶しています。
Web Environment Integrityの提案
Web-Environment-Integrity/explainer.md at main · explainers-by-googlers/Web-Environment-Integrity
Google従業員により新たなるWeb API「Web Environment Integrity」の提案が行われました。ユーザーがサイトにアクセスする際に、信頼できる第三者にブラウザやプラットフォームのデータを提出して正当なユーザーであることを認証してもらう仕組みで、表面上はbotによる不正利用や詐欺行為や、不正プログラムの実施を防ぐためメリットが感じられます。
しかしこのAPIで認証できないブラウザと判断することが企業側の判断に委ねられていること、それによりブラウザの使用がより狭まり、企業でのブラウザの寡占が進むことが懸念されています。VivaldiやBraveの公式ブログ記事においてこのAPIがいかに危険なものであるかを指摘しています。
- Unpacking Google’s new “dangerous” Web-Environment-Integrity specification
- “Web Environment Integrity”: Locking Down the Web | Brave
8月
RomeからフォークされたBiomeがリリース
Rome Tools, Inc.は資金難に陥り、給与も払えず退職やレイオフが相次ぎました。結果としてRomeの開発は停滞し、関連するリソースも関係者が操作できない状態になっていました。
Romeのコアチームメンバーが開発を継続するためにフォークされて刷新されたBiomeがリリースされました。
Dan Abramov氏がBlueSkyのソフトウェア開発者へ
Meta社でReact開発やAdvocatorとして尽力していたDan Abramov氏が7月で退職。BlueSkyのソフトウェア開発者となることになりました。
Astro 3.0リリース
Astro 3.0がリリースされました。主な変更点は以下のとおりです。
- 前々からexperimentalで実装されていたViewTransitionsが正式導入
- レンダリングパフォーマンス改善
<Image>
コンポーネントで画像最適化- Vercelの公式ホスティングパートナーになったことでSSR機能強化
- JSXビルドサポートによるHMR改善
9月
Romeリポジトリがアーカイブ
rome/tools: Unified developer tools for JavaScript, TypeScript, and the web
9月1日をもってRomeリポジトリがアーカイブされました。
nitrogql 1.0リリース
TypeScriptプロジェクトでGraphQLを使うためのツールチェインであるnitrogql 1.0がリリースされました。具体的な内容については公式ブログ記事を参照してください。
TypeScript JPが解散
TypeScriptに関する国内コミュニティであるTypeScript JPが解散しました。新型コロナウイルスの影響によりTSConf JP 2020の開催が中止となったことは非常に残念なことではありました。これまでの活動、お疲れ様でした。
FirefoxでのVue.jsの高速化改善
Faster Vue.js Execution in Firefox - Mozilla Hacks - the Web developer blog
FirefoxのProxy挙動を改善した結果、Vue3のリアクティビティが高速化されてベンチマークが約40%改善されたそうです。Firefox 118より改善された変更がリリースされるそうです。
TurboリポジトリよりTypeScriptを削除
Remove TypeScript by afcapel · Pull Request #971 · hotwired/turbo
Hotwireの構成要素の1つでもあるTurboの次期バージョン開発においてはTypeScriptは使用しないため削除が行われました。
Bun 1.0リリース
Node.js、Denoに次ぐ新たなるJavaScriptランタイムであるBunの1.0がリリースされました。
Node.js 16がEOL
doc: mark v16.x as End-of-Life by targos · Pull Request #908 · nodejs/Release
9月12日をもってNode.js 16がEOLとなりました。Node.js 16は2021年4月にリリースされ、LTSは2021年10月からになっていました。
当初2024年4月にLTSが終了する予定でしたが、OpenSSL 1.1.1系列のサポートが2023年9月11日に終了となることと相まって、終了が早まった背景があります。
jsbundling-railsにBunサポートが追加
Add Bun support by terracatta · Pull Request #167 · rails/jsbundling-rails
RailsでのJavaScriptバンドルツールであるjsbundling-railsにBunのサポートが追加されました。これまでesbuild、Webpack、Rollupのいずれかを選択できましたがそこに新たに追加された形になります。
CSS Subgridがクロスブラウザ対応
CSS Gridの新しい機能であるSubgridがクロスブラウザ対応となりました。これまでグリッド指定は直下のものしかグリッドアイテムとして認識されませんでしたが、Subgridを指定することで親子関でグリッド関係を認識できるようになります。
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
}
.subgrid {
grid-column: span 4;
display: grid;
/* 子要素の行方向を揃えてくれるようになる */
grid-template-rows: subgrid;
}
具体的な解説はCSSのSubgridが全ブラウザ対応。Gridの入れ子の基本から応用までを完全理解するを参照ください。
v0 by Vercel Labs
VercelがテキストのプロンプトからUIを生成するサービスをプライベートアルファでリリースしました。作成されるUIにはshadcn/uiが使用されています。
Svelteの新リアクティブシステム「Runes」
Svelte 5で導入予定の新リアクティブシステムで、$state
、$derived
、$effect
といったマクロを使いリアクティブなステート管理をするRunesについての紹介記事です。既存のAPIと併用できるため、漸進的な導入や移行が可能なようです。
TypeScriptのドキュメンタリー映像が公開
TypeScriptの誕生から現在までの関わった関係者たちへのインタビューによるドキュメンタリー映像が公開されました。
State of HTML 2023の公開
HTMLに関する初めてのサーベイとしてのState of HTML 2023が公開されました。
10月
PhotoshopをWebブラウザ上で動かすための実装方法
Photoshop is now on the web!. Enabled by WebAssembly, Web Components… | by Addy Osmani | Medium
PhotoshopのデスクトップWebアプリケーションはChromeとAdobeとが共同で開発しており、WebAssembly + Emscripten、Web Components + Lit、Service Workers + Workbox、そして新しいWeb APIを活用による実装についての解説記事です。
今後はCreative Cloud suite全体のアプリケーションもWebブラウザ上で動かせるようにしていくそうです。
Viteの今後の動向について
ViteConf 2023にてEvan Youより今後のViteに関する発表がありました。以下、要点になります。
- RemixがViteへのマイグレーションを検討している(今はesbuildを使用している)
- ビルダーとしてRollup、esbuildがもつ欠点を補うべくRustベースのRollupとなる「Rolldown」を開発中
- RollupメンテナやRspeck(RustベースWebpack)のコントリビューターも貢献してる
- Viteでの本番ビルドをRolldownで使えるように目指す
Lit 3.0リリース
Lit Launch Day: Lit 3.0, Labs graduations, a compiler and more! – Lit
Lit 3.0がリリースされました。IE11サポートが廃止され、Decoratorsをサポートするようになりました。Lit内でリアクティブな実装ができる@lit-labs/preact-signals
も発表されました。
Rspressのリリース
Rspress, the Rspack-based static site generator · web-infra-dev · Discussion #5
Rspackベースでの静的サイトジェネレーターRspressのv1.0がリリースされました。特徴は以下のとおりです。
- Rspackを使用し、Reactフレームワークに基づいてレンダリングされる
- MDXコンテンツ開発をサポートし、高性能、使いやすさ、柔軟なカスタマイズできることが強み
- デフォルトのテーマセットを使用してドキュメントサイトを迅速に構築でき、テーマをカスタマイズできる
- i18n、マルチバージョンサポート、全文検索などの基本機能を提供
- プラグインシステムを搭載し、拡張機能を提供
The State of WebAssembly 2023の結果
WebAssemblyにまつわるサーベイであるThe State of WebAssembly 2023の結果が公開されました。
Yarn 4.0リリース
パッケージマネージャのYarnの4.0がリリースされました。主な変更点は以下のとおりです。
- Node.js 18+が必要
yarn init
で作成される新プロジェクトは、Zero-Installをデフォルトで有効化しないyarnPath
ではなくCorepack
を使用するようになっている
typescript
、interactive-tools
といった公式プラグインがデフォルトで含まれるyarn workspaces foreach
コマンドの構文が変更- ワークスペースに対するバリデーションであるConstraintsの刷新
- ユーザーインターフェイスの改善
- パフォーマンス向上
4.0のリリースに伴いウェブサイトもリニューアルされました。
MSW 2.0リリース
MSW 2.0がリリースされました。Node.jsとTypeScriptのバージョンが更新され、ReadableStream
のサポートやブラウザ向けのAPIをmsw/browser
へ移動やrequest.body
がReadableStream
を返すようになったなどの破壊的変更、新しいAPIの開発がされました。
多くの変更点を含みますが、2.0へのアップデートに向けたマイグレーションガイドも用意されています。併せてドキュメントサイトの刷新もありました。
URL PatternがLiving Standardに追加
WICGの管轄であったURL Patternが標準化となりLiving Standardに追加されました。
Next.js 14リリース
Next.js 14がリリースされました。具体的な新規APIはありませんでしたが、以下が変更点になります。
- Server Actionsの安定化
- Partial Prerenderingがプレビュー版で公開
Server ActionsのデモではSQLをクライアントサイド側で書けるコードのインパクトが強かったです。
function Bookmark({ slug }) {
return (
<button
formAction={async () => {
"use server";
await sql INSERT INTO Bookmarks (slug) VALUES (${slug});`;
}}
>
<BookmarkIcon />
</button>
);
}
その他、Turbopackの進捗についての発表と、App Router・認証・データベースといったものを学習できるサイト(next.js.org/learn)も公開されました。
ESLintでのフォーマットルールは非推奨に
Deprecation of formatting rules - ESLint - Pluggable JavaScript Linter
ESLint v8.53.0からフォーマットルールを非推奨とすることが公式ブログより発表されました。代わりにPrettierやdprintといった別のフォーマッターツールを使うことを推奨しています。
Stylelintでもv15よりフォーマットにまつわるルールは非推奨となっています。
RemixでのViteサポート
これまでコンパイラとしてesbuildを使っていたRemixで、ViteのプラグインとしてRemix使えるようになりました。その結果、10倍速いHMRと5倍速のHDR(Hot Data Revalidation)が実現できるようになり、Viteのプラグイン利用もできるようになりました。ただしUnstalbeなサポートのため今後の仕様変更には注意です。
11月
State of React 2023
React開発者向けサーベイであるState of React 2023が公開されました。
Prettierによる新しい三項演算子のフォーマットの提案
Prettierのv3.1.0より--experimental-ternaries
オプションを付けることで三項演算子にフォーマットを試せるようになっています。
以下のような三項演算子があった場合に、
const animalName = pet.canBark() ? pet.isScary() ? 'wolf' : 'dog' : pet.canMeow() ? 'cat' : 'probably a bunny';
以下のようにフォーマットされるようになります。
const animalName =
pet.canBark() ?
pet.isScary() ?
"wolf"
: "dog"
: pet.canMeow() ? "cat"
: "probably a bunny";
このフォーマットについてGoogle Formからのフィードバックも受け付けているようです。
Vite 5.0リリース
Viteの5.0がリリースされました。主な変更点は以下のとおりです。
- ビルドパフォーマンス向上のためにRollup 4を採用
- 開発サーバーのパフォーマンス向上の新オプションが導入
- APIの整理、非推奨機能の削除、機能の改善
- Node.js 18+が必要
- CJS Node APIが非推奨に
TC39でソースマップの標準化にまつわるタスクグループが発足
Ecma TC39 “ECMAScript®” initiates a new task group to standardize source maps - Ecma International
ソースマップの定義と標準化に向けたEcma TC39タスクグループが発足しました。この取り組みにはBloomberg、Google、JetBrains、Meta、Microsoft、Mozilla、Replay.io、Sentryが参加しています。
ちなみにGoogleとMozillaによるRFCはおよそ8年前に提案されていました。
The Prettier Challengeが開催
Rustを使ってPrettierの95%以上のテストケースをパスした場合、$10,000の賞金が提供されるチャレンジが開催されました。VercelのCEOであるGuillermo Rauchも賛同して賞金は$20,000となり、最終的にBiomeプロジェクトがこのチャレンジで優勝して賞金を獲得しました。
State of JavaScript 2023の公開
毎年恒例のJavaScriptのサーベイが開始されました。
12月
Vitest v1.0リリース
Vitestのメジャーバージョンがリリースされました。
Astro 4.0リリース
Astro 4.0がリリースされました。年内で2.0から4.0までアップデートが進みました。主な変更点は以下のとおりです。
- Astro Dev Toolbar(ローカル開発環境向上のための新ツール)
- i18nルーティング
- ビルドパフォーマンス向上
- 新しいView Transitions API
- Astro CLIでのログ改善
Starlightテンプレートでのドキュメント全面見直しもあったようです。
CSSテキストモジュールレベル4の機能がChromeに導入
word-break: auto-phrase
、text-autospace
、text-spacing-trim
がサポートされるようになりました。一部言語での10px以下のフォントサイズの切り上げがあったものが廃止されて、ブラウザの互換性向上のための変更もありました。
OxcLintリリース
Oxlint General Availability | The JavaScript Oxidation Compiler
Rust製のJavaScript・TypeScriptのパーサー、Linter、フォーマッターといったツール郡のOxcに、LintツールのOxcLintがリリースされました。現時点ではESLintの代替置き換えになるものではなく、速度面で補佐できるようにしていくみたいです。
StorybookでのReact Server Componentsサポート
experimentalNextRSC
を有効にすることでReact Server Componentsを使用したStorybook開発ができるようになりました。
SvelteKit 2リリース
SvelteKit 2がリリースされました。Vite 5への対応、モーダルやポップアップビューに活用できるShallow routing機能の追加が挙げられます。
:has()
がクロスブラウザ対応
引数に渡されるクラスセレクターを含んでいるセレクタを指定する擬似クラスの:has()
がクロスブラウザ対応しました。以下のような使い方ができます。
a:has(img) {
/* img要素があるa要素にのみ適応するスタイル */
}
/* ダイアログが開いたときに画面を固定するようにする */
html:has(dialog[open]) {
overflow: hidden;
}
React Aria Components 1.0リリース
Adobeが開発するReact AriaベースのヘッドレスコンポーネントライブラリであるReact Aria Componentsの1.0がリリースされました。
2023年下期発売したフロントエンド関連の書籍
- Nuxt 3 フロントエンド開発の教科書
- フロントエンドの知識地図 ――一冊でHTML/CSS/JavaScriptの開発技術が学べる本
- 実装で学ぶフルスタックWeb開発 エンジニアの視野と知識を広げる「一気通貫」型ハンズオン
- フロントエンド向けWebAssembly入門
2023年下期のフロントエンド関連のイベント
- レバレジーズ x ココナラ x ニフティ 合同フロントエンド勉強会 - connpass
- Workers Tech Talks #1 - connpass
- Vue.jsの勉強会はなんぼあってもいいですからね - connpass
- Figmaを知ることで変わるフロントエンドの開発生産性 - connpass
- 3rdparty.js #1 制約を超えろ!サードパーティJS開発の探求 - connpass
- Quramy×Takepepeが語る、フロントエンドテストの最前線 - connpass
- Vue.js v-tokyo Meetup #18 - connpass
- PWA Night vol.54 ~移行〜 - connpass
- Encraft #6 Focus on UI Component 実装 - connpass
- Nihonbashi.js #7 - connpass
- ジャムスタックチョットデキル!! ナカノ!! - connpass
- Think ! FrontEnd by DMM #5 新卒回 オンライン開催 - connpass
- フロントエンドの開発生産性〜Online Conference〜 - connpass
- TC39 x JSConf.jp meetup (September 25th) - connpass
- We Are JavaScripters! @42nd【初心者歓迎・LT会】 - connpass
- ViteConf 2023
- Kyoto.js 20 - connpass
- Deno Fest ディノフェス - presented by toranoana.deno
- Vue Fes Japan 2023
- #朝までマークアップ - CSS Nite | Doorkeeper
- フロントエンドカンファレンス沖縄2023
- JSConf JP 2023
- Meguro.css #9 @ oRo - connpass
- Svelte Japan Online Meetup #1 - connpass
- We Are JavaScripters! @43rd【初心者歓迎・LT会】 - connpass
- UIT × Bonfire Front-end Meetup #1 - connpass
- 次世代 Web カンファレンス 2023 - connpass