Advent Calendar 2023

フロントエンドの​2023年を​振り返る​(前編)

この記事はyamanoku Advent Calendar 2023の23日目の記事になります。

yamanokuがウォッチしてきたフロントエンドにまつわる動向やニュースを振り返ります。今回は1月から6月までの前半を振り返ってみます。

1月

React NativeがTypeScriptをサポート

First-class Support for TypeScript · React Native

React Nativeの公式ブログにて、v0.71よりTypeScriptファーストになったことが発表されました。これまではflowにて静的型チェックを行っていました。新たなるアプリテンプレートを作る場合はTypeScriptがデフォルトになります。

nuxt.newが公開

nuxt/nuxt.new: Create a new Nuxt project from your address bar.

nuxt/nuxt.newはNuxtプロジェクトのスターターキットでCLIにて作成できるようになりました。特定のアドレスを入力するとCodeSandboxかStackBlitzでNuxtプロジェクトが作成できます。

Remixの新規サービス採用事例

新規サービスにRemixを採用したぜ✌️ - Ateam Tech Blog

株式会社エイチームのエンジニアブログにて、新規サービスにRemixを採用したことが発表されました。この当時はNext.jsでの採用事例が多かった中でRemixを新規採用する事例はまだ見かけていなかったので印象に残っています。

Google Chrome 109よりMathMLがサポートされる

New in Chrome 109: OPFS on Android, new css properties, MathML Core support - YouTube

MathMLは数学的・科学的コンテンツのためのW3Cの標準規格です。これまでFirefoxとSafariのブラウザエンジンで実装されていたのですが、ChromeがBlinkへとエンジンを切り替えた際に削除されていました。

Chrome 109からはMathML CoreというMathMLのサブセットにてサポートされるようになりました。以下は数式のサンプル表示例です。

1 2

すべての機能が使えるわけではないですが、ブラウザの相互運用性を考えると大きな進歩だと思います。この復活に貢献したIgaliaのプロジェクトや該当記事も併せてご覧ください。

Nuxt.jsの2023年のビジョン

Nuxt: A vision for 2023 · Nuxt Blog

Nuxtチームより2023年内に行いたいことをまとめた記事が公開されました。以下概要です。

Astro2.0リリース

Astro 2.0 | Astro

Content Collection機能、ハイブリッドレンダリング、開発中のエラー画面のリデザイン、HMRの改善、Vite 4.0のサポートが追加されました。ちなみにAstro 1.0のリリースは2022年8月でした。

Vue本体よりReactive Transformが消える

⚠️ Dropped Reactivity Transform · vuejs/rfcs · Discussion #369

Vue.js Nation 2023のEvan Youの発表にて、RFCとして開発していたReactive Transformがv3.4より削除されることが発表されました。

R.I.P Reactivity Transformという見出しのスライドを発表するEvan You
Vue.js Nation 2023の発表

これまで使用していた人向けにVue Macrosに機能を切り出して互換性を保つようにしているようです。

Dan Abramov氏がCreate React Appの今後についてを語る

Replace Create React App recommendation with Vite by t3dotgg · Pull Request #5487 · reactjs/react.dev

Create React App(以下CRA)は去年の4月を最後に更新されておらず、新たにReactアプリを作るにはViteを使うことを推奨してみるのはどうかという提案が出されました。色々と議論があった中、今後のCRAについてをDan Abramov氏が長文でコメントしています。今後のCRAとしての選択肢としては以下のように挙げられています。

  1. フルスクラッチで作り直す→現実的ではない
  2. CRAを非推奨にしてViteテンプレートを推奨する→結局ViteとReactを併せたものをメンテナンスする(新しいものをつくることになる)ことになる
  3. CRAを非推奨にしてReactフレームワークを推奨する→Reactアプリを作る中立性のあるものが存在しなくなる(ガイドがそれぞれのフレームワーク頼りになる)
  4. CRAから他のフレームワークでアプリを作るようにする→似通ってるものの場合解決するものを選ぶことが困難になる
  5. ランチャーアプリとして運用する→これが現実解になりそう?

2月

NetlifyがGatsby社を買収

ホスティングサービスとサーバーレスのバックエンドサービスを提供するNetlifyがGatsbyを開発するGatsby Inc。を買収しました。Gatsby自体は引き続きオープンソースとして開発していき、Gatsby Cloudの機能やValhalla Content Hubという新サービスがNetlifyに統合されることが発表されました。

Interop 2023の開始

Interop 2023: continuing to improve the web for developers  |  web.dev

ブラウザベンダ間でWebの相互運用性を改善していくプロジェクトのInteropの2023年版が始まりました。CSS、JS、Web APIなどを含めた合計26箇所が重点分野として挙げられています。

Eleveny v2.0.0リリース

Eleventy v2.0.0, The Stable Release — Eleventy

Eleventyのv2.0.0がリリースされました。大きな変更として依存関係の削減やビルド速度の改善が行われています。

React.js: The Documentary

How A Small Team of Developers Created React at Facebook | React.js: The Documentary - YouTube

現代におけるフロントエンドのライブラリとして有名となったReact.jsのドキュメンタリー動画が公開されました。関係者や献身的な開発者を交えてFacebook(現Meta)での誕生から黎明期、そして現在に至るまでを振り返る内容になっています。

DevToolsにて複数の拡張子がシンタックスハイライトサポート

What’s New In DevTools (Chrome 110)  |  Blog  |  Chrome for Developers

Vueファイルのシンタックスハイライトが効くようになった
What's New In DevTools (Chrome 110)より引用

Chrome Dev ToolsのSourceパネルにてVue、JSX、Dart、LESS、SCSS、SASS、そしてインラインCSSのシンタックスハイライトがサポートされるようになりました。

WebContainer API

WebContainer API is here.

StackBlizで使用されているブラウザ上で動くWebAssemblyベースのコンテナAPIです。具体的には以下のようなメリットがあります。

また、OpenAI(ChatGPT)連携でアプリケーション作成のプロンプトを渡すとライブアプリケーション作ってくれるサービスも公開されています。

core-jsのこれまでとこれからについて

core-js/docs/2023-02-14-so-whats-next.md at master · zloirock/core-js

core-jsのv3.28.0がリリースされたのと同時にメンテナでもあるzloirock氏によるcore-jsの歴史と自身にまつわる事件、財政的な支援について、そしてこれからのcore-jsのロードマップ語られています。

Angularへリアクティビティプリミティブの「Signals API」

[Watch This Space] Angular Reactivity with Signals · angular/angular · Discussion #49090

Vue.js、Preact、SolidJSがすでに採用しているリアクティブの機能をAngularでも扱えるようにするためのAPIのプロトタイプが公開されていきました。

当時の日本語での解説は「ついにやってくるSignals!Angularはどう変わるのか?【ng-japan OnAir #63】」を参考ください。Google公式でAngular Signals スタートガイドも公開されています。

CSSコンテナクエリがクロスブラウザ対応

要素自体の幅を判定して要素のレイアウトを切り替えるようにする機能の「コンテナクエリ」がクロスブラウザ対応されました。以下のように要素の幅が560px未満の場合には非表示にするようにできます。

@container (max-width: 560px) {
  .item {
    display: none;
  }
}

具体的な解説はコンテナクエリ @container が全ブラウザ対応。新時代のレスポンシブ対応を完全理解するを参照ください。

Web Push APIがiOS、iPadOSでもサポート

Web Push for Web Apps on iOS and iPadOS | WebKit

macOSでは16.1よりサポートされていましたが、iOSとiPadOSの16.4以降のPWAにおいてもプッシュ通知ができるようになりました。併せてBadging APIもサポートされるようになりました。

実際の検証についてはiOS 16.4でSafariのPWAがPush通知に対応したのでWeb Pushの動作検証するを参照ください。

3月

Rspack

Announcing Rspack - Rspack

TikTokの開発元で知られるByteDanceのWebインフラチームが、RustベースのWebpackにあたる「Rspack」をオープンソースとして公開しました。

インクリメンタルコンパイルやHMR、高速なビルドを搭載しており、Webpackと比較して5〜10倍の性能向上がされていると言われております。RspackはWebpackチームとも連携してWebpack自体の性能向上にも貢献していき、将来ある程度Rspackが成熟してきた時点で、WebpackにRspackを統合することも視野に入れているようです。

TypeScriptのv5.0がリリース

Announcing TypeScript 5.0 - TypeScript

v5.0からの大きな変更点としてDecoratorがサポートされるようになったのが挙げられます。型パラメータの宣言時にconstが使えるようになったり、すべてのenumsはenumの値に定数以外の値を指定できるUnion enumsになりました。

Vite、esbuild、SWC、Webpack、Parcelなどのバンドラとの共存を改善する、--moduleResolution bundlerというmodule bundlerオプションが導入されるなど、オプションの追加・変更も多くありました。

Prettierのv2.8.5でもTypeScript 5.0のサポートが追加されています。

Reactのドキュメントがリニューアル

Introducing react.dev – React

新たに刷新されたReactドキュメントでは、ドメインも.orgから.devに変わり、これまでクラスコンポーネントのサンプルだったものを関数componentsとReact Hooksを使ったものに変更されました。

これまでのドキュメントサイトはlegacy.reactjs.orgに移動されました。

Edge Functionsの利用実態調査

State of Edge Functions

Cloudflare Workers、Fastly、Deno Deploy、Vercel Edge FunctionといったEdge Functionsの利用実態を調査したサイトが公開されました。

<search>要素の追加

Add the <search> element · whatwg/html@c598ff0

role="search"に相当するHTML要素である<search>がLiving Standardsに追加されました。下記のように<form>要素を<search>要素でラップするようにして扱うことができます。

<search>
  <form action="search.php">
    <label for="query">Find an article</label>
    <input id="query" name="q" type="search" />
    <button type="submit">Go!</button>
  </form>
</search>

Chakra UIに関するこれからについて

The future of Chakra UI - Segun Adebayo

Chakra UIは@emotion/styledに依存するランタイムCSS-in-JSを排除しReact Server Componentsで活用ができるようにしたいことや、フレームワークにとらわれない形でソリューションを提供できるようにしたい今後の展望が述べられています。

今後はモノリシックな開発を辞め、それぞれが管理しやすいようにモノレポな環境に分割して開発を進めていくことが述べられています。

SassのネストとCSS Nestingの違い

Sass: Sass and Native Nesting

CSSが独自でネスト(CSS Nesting)ができるようになってきたことに対して、Sass側でネストする利点についての記事が公開されました。

Sassのネスト自体はCSS Nestingと互換性がまったくないので影響はないのですが以下については注意が必要です。

4月

Storybook v7.0リリース

Storybook 7.0

StorybookイベントのStorybook Dayにてv7.0が発表されました。Viteをファーストサポート、Next.jsやSvelteKitのサポート、Component Story Formatのv3、MDX2サポートなどが追加されました。

Nuxt 3.4リリース

Nuxt 3.4 · Nuxt Blog

Nuxt 3.4からページ間をトランジション移動できるようになるWeb APIのView Transitions APIを実験的にサポートするようになりました。Nuxt内でのペイロードの扱いを切り替えるrenderJsonPayloadsという実験的機能も追加されました。

Node.js v20リリース

Node.js 20 is now available! | Node.js

Node.js 14がEOL

4月30日をもってNode.js 14がEOLとなりました。Node.js 14は2020年4月にリリースされ、LTSは2021年10月からになっていました。

5月

Deno KVの発表

Announcing Deno KV

世界35箇所のリージョンにて提供されるDenoのkey-valueデータベースであるDeno KVが発表されました。

const kv = await Deno.openKv();

const key = ['users', crypto.randomUUID()];
const value = { name: 'Alice', created: new Date() };
await kv.set(key, value);

const result = await kv.get(key);
console.log(result.value);
// { name: "Alice", created: 2023-05-01T09:24:07.620Z }

ローカル環境ではSQLiteへ保存され、Deno DeployでデプロイするとFoundationDBによってDeno社へデータが管理されるようになります。

Qwikのv1.0リリース

Qwik Reaches v1.0

builder.ioによって作られたフロントエンドフレームワークのQwikiがv1.0になりました。

ChromeのURL欄のロックアイコンが差し替わる

Chromium Blog: An Update on the Lock Icon

もともとはHTTPS通信ができているかどうかのアイコンであったが、ユーザーはそれだけを見て「信頼できるサイト」であると評価しているため(ヒートマップで検証)誤解を与えいていました。

具体的にどういった部分がセキュリティとして評価されているかを知れるようにクリックしやすいアイコンに変更するとのことです(HTTPS通信に関するアイコン自体はそのままにする形)。iOS Chromeでは鍵アイコンをタップできないので削除されるらしいです。

<select>要素を<hr>でセパレートできるようになった

Allow <hr> to be used inside <select> as a separator · whatwg/html@b9c5dee

<select>の子要素に<hr>を含められるようにLiving Standardに追加されました。以下のように<hr>を挟むことで区切り線でセパレートすることができます。

<label>
 Select the song to play next:
 <select required name="next">
  <option value="sr">Random
  <hr>
  <option value="s1">It Sucks to Be Me (Reprise)
  <option value="s2">There is Life Outside Your Apartment
  …

Baseline

Web技術のブラウザサポートの明示をよりわかりやすくするBaselineという取り組みがスタートしました。

Browser compatibility自体はそのまま残しつつ、主要ブラウザの最新2メジャーverでどこまでサポートされているかを確認しやすくなりました。MDNドキュメントやweb.devにて展開されてるようになっています。現在はCan I Useでも表示されるようになりました。

Vue v3.3がリリース

Announcing Vue 3.3 | The Vue Point

v3.3になりdefinePropsにて複合の型が書ける、Generic Componentsの登場、defineEmitsをラベル付きTupple要素で記述可能、defineSlots・defineModel・defineOptionsの登場が挙げられます。コードネームは「るろうに剣心」です。

Bunのバンドラが登場

The Bun Bundler | Bun Blog

Bunのネイティブバンドラのベータ版が登場しました。CLIからはbun build、JavaScript APIからはbun.build()で実行できます。

Bunのビルド速度比較。速度の順番はBun(0.17秒)、esbuild(0.30秒)、rspack(4.45秒)、Percel2(26.32秒)、Rollup+Terser(32.00秒)、Webpack5(38.02秒)になっている。
ソースマップと最小化を使ってthree.jsの10個複製した分をゼロからバンドルした比較

6月

Starlightの公開

Starlight 🌟 Build documentation sites with Astro

Astro製のドキュメントサイト作成スターターキット「Starlight」が公開されました。

Enzoのリリース

Open sourcing Ezno’s checker and trying out / previewing the JavaScript type checker today · kaleidawave/ezno · Discussion #21

Rustで書かれた型チェッカーであるEznoがリリースされました。Oxcで使うことにより足りていない機能を補えるようになっています。

WAI-ARIA 1.2がW3C勧告に

Accessible Rich Internet Applications (WAI-ARIA) 1.2 is a W3C Recommendation | 2023 | News | W3C

Accessible Rich Internet Applications Working Groupは、Accessible Rich Internet Applications (WAI-ARIA) 1.2をW3C勧告として発表しました。これは2017年12月にWAI-ARIA1.1の勧告がとなってから約5年ぶりのアップデートになります。

State of CSS 2023が公開

State of CSS 2023

毎年恒例のCSSのサーベイが開始されました。

Svelte 4のリリース

Announcing Svelte 4

Svelte 3から4年以上ぶりのメジャーバージョンアップになります。モダンツールの導入や古いバンドラーやレガシーバージョンの刷新を行うといったメンテナンスリリースのみに注力しており、Svelte 5への基盤となるような更新になっています。

2023年上期発売したフロントエンド関連の書籍

2023年上期のフロントエンド関連のイベント

参考情報源

この記事に関する修正依頼
トップへ戻る