Frontend Weekly 2023-05-14
Matsuri-tech Frontend Weekly 2023-05-14
Dart 3
2023 年 5 月 10 日に Google I/O 2023 で、Dart 3 の正式リリースが発表されました。
https://medium.com/dartlang/announcing-dart-3-53f065a10635
Dart は Flutter でしか使う機会はなく matsuri 社では全く使っていませんが、個人的な認識として Flutter ほど Android、iOS それぞれに依存した機能にまで対応したクロスプラットフォームフレームワークは存在せず、利便性は現状一強であると思っているので、リリースを少し取り上げます。
100% sound null safety
Dart は約 4 年をかけて、完全に Null safety になりました。これにより Null Pointer Exceptions などのランタイムエラーの回避や、コンパイル時に Null がないことを前提として最適化が可能になります。
Dart では 2 系から Null safety のモードを切り替えられるようにするなど段階的な移行を行なっており、既に人気な上位 1000 位までのパッケージの 99%は Null safaty に対応をしています。
パターンマッチング
Rust などのパターンマッチと一緒です。次のように記述します。
// seald修飾子によって、これは閉じた型族のルートになり網羅チェックが有効になるsealed class Shape {}
class Square implements Shape { final double length; Square(this.length);}
class Circle implements Shape { final double radius; Circle(this.radius);}
// switchが式で利用できるようになった。double calculateArea(Shape shape) => switch (shape) { Square(length: var l) => l * l, Circle(radius: var r) => math.pi * r * r};
Chrome 113
2023 年 5 月 3 日に Chrome 113 がリリースされました。
https://developer.chrome.com/blog/new-in-chrome-113/
WebGPU API
WebGL にはいくつか問題がありました。
- WebGL の登場以降、新たなネイティブ GPU API が登場しましたが、OpenGL(WebGL)に更新は予定されていないため、新機能が利用できない
- WebGL はグラフィックをキャンバスにレンダリングするというケースを前提にしていたため、GPGPU などは不得意
WebGPU はこれらの問題に対応した WebGL の後継として作られ、最新 GPU API との互換性向上、GPGPU のサポート、より高度な GPU 機能へのアクセスを提供します。
また API は Promise が使える他、関数名などもまともなため、WebGL と比べるとかなり使いやすくなっています。とはいえ、実際利用する際は何らかのライブラリを使うことが多いと思います。既に有名な WebGL ライブラリは WebGPU サポートに取り込んでおり、特に Babylon.js は完全なサポートを既に提供しています。
レスポンスヘッダーの上書き
DevTools でレスポンスヘッダーを上書きできるようになりました。
CSS update Media Query
https://developer.chrome.com/blog/css-update-media-query/
あまり使う機会はないと思いますが、デバイスのリフレッシュレート(デバイスのアニメーションや更新の頻度)によってスタイルを分けることが出来ます。
@media (update: slow) { // ....}
リフレッシュレートは以下の 3 つから選びます。
fast
:通常のコンピュータやスマホなど
slow
:電子書籍リーダーなど
none
:紙に印刷されるドキュメントなど
Next.js 13.4
2023 年 5 月 5 日に Next.js 13.4 がリリースされました。
https://nextjs.org/blog/next-13-4
Stable App Router
App Router が安定版になり、公式ドキュメントもデフォルトは App Router になりました。Using App Router から切り替えられます。
App Router に抵抗感を持っていたり、RSC も含めて PHP の再来と呼んで嘲笑している方々もいますが、普通に便利なので使っていきましょう。個人的には App Router(RSC)に触れて理解を進めていけば、必然的に良いコードが書けるようになると思うので、その点でもぜひ使ってください。
https://nextjs.org/docs/app/building-your-application/configuring/draft-mode
Server Actions (alpha)
フォームの状態について React は最近意見を持っているらしく、例えば(元々どちらかといえば制御コンポーネントを推奨していた気がしますが)現在は非制御コンポーネントを推奨していたり、ミューテーションに対するファーストパーティソリューションの開発に取り組んでいるそうです。
Server Actions は、中間層を作ることなく直接サーバーの関数を呼び出して、サーバーのデータ更新を可能になる実験的な機能です。次のような記述をします。
import db from "./db";import { redirect } from "next/navigation";
async function create(formData: FormData) { "use server"; const post = await db.post.insert({ title: formData.get("title"), content: formData.get("content"), }); redirect(`/blog/${post.slug}`);}
export default function Page() { return ( <form action={create}> <input type="text" name="title" /> <textarea name="content" /> <button type="submit">Submit</button> </form> );}
React Canaries
React は今後カナリアリリースを行なっていくそうです。
https://react.dev/blog/2023/05/03/react-canaries
Experimental チャネルとは異なり、採用の準備が整っていると合理的に判断される機能のみが含まれるとのことです。