JSer.info #600 - BunというZig言語とJavaScriptCore(WebKitのJavaScriptエンジン)を使って書かれたJavaScript Runtimeが公開されました。
Bunは"all-in-one JavaScript runtime"とあるように、TypeScript/JSXのTranspiler/Bundler/Task Runerを同梱し、npm互換のパッケージマネージャーやNode-API(N-API)互換の実装、FetchなどのWeb APIの実装をもっています。
Denoと似ている立ち位置のRuntimeですが、Node.js互換のAPIやpackage.json
を扱えるnpm互換の実装を持つことで、Node.jsを置き換えて利用できることが意識されています。
Bunのロードマップは次のIssueで公開されています。
また、Bunをどのように作ったかについては、次の動画でインタビューに答えています。
Vite 3.0.0がリリースされました。
デフォルトのビルドターゲットをESMとDynamic Import/import.meta
をサポートしてるブラウザに変更、オプションの変更や削除、デフォルトportを5173
に変更されています。
また、minifyに利用するterser
パッケージへの依存をオプショナルへ変更、import.meta.glob
の仕様変更、Wasmファイルのimport方法の変更などが含まれています。
600回目の更新
この投稿で、JSer.infoは600回目の更新となります。
500回目の更新からは大体2年でした。
JSer.infoのslackワークスペースでは、気になるものを投稿したり、更新作業をやったりしています。
気になるものをメモ書きで投稿するぐらいの場所として扱うぐらいでいいと思います。
質問とかあったら調べて答える気もします。
JSer.infoのslackワークスペースは、次のリンクからだれでも自由に参加できます。
また、GitHub Sponsorsでの支援も引き続き募集しています。
JavaScript周りも新しいツールとかがまた続々と出てきている気がします(特に最近はCDN Edgeを意識したものが多い印象)。
今回公開されたBunも、作者が週80-90時間ぐらいを1年かけて作っているそうです。
こういう労力を結構かけて作られるものが増えている感じはします。
新しいツールが出てもウェブ標準互換やNode.js互換やCDN Edgeでの互換性などの互換性は強く意識されている感じはします。
そのため、完全に全く新しい知識を必要とするものは意外と少なくて、既存のものに対して何かフラストレーションがあり、それを置き換えるために新しいツールとして作りながら既存との互換性を意識するといった形式が多い気がします(Bunの場合はフラストレーションが"速度"で、それを置き換えることを目標にして進化してきた)。
一方でGoogle Chromeが巨大となりウェブ標準のCentralization問題や、AppleのiOS/iPadでWebKit以外のブラウザエンジンを許容しないこと対する反発の高まりといった問題なども起きています。
色々な物事が大きくなっている感覚はありますが、それを小さな視点から見ていくのがJSer.infoなのかなと思いました。
JSer.infoをサポートするには
- 😘 知り合いにJSer.infoをおすすめする
- ❤️ GitHub Sponsorsで@azuのスポンサーになる
- 🐦 X(Twitter)で@jser_infoをフォローする
JSer.info Sponsors
JSer.info SponsorsはGitHub SponsorsとしてJSer.infoを支援してくれている方々です。
ヘッドライン
vite/CHANGELOG.md at v3.0.0 · vitejs/vite
github.com/vitejs/vite/blob/v3.0.0/packages/vite/CHANGELOG.md
Vite 3.0.0リリース。
デフォルトのビルドターゲットをESMとDynamic Import/import.meta
をサポートしてるブラウザに変更、オプションの変更や削除、デフォルトportを5173に変更。
minifyに利用するterser
パッケージへの依存をオプショナルへ変更、import.meta.glob
の仕様変更、Wasmファイルのimport方法を変更など
July 7th 2022 Security Releases | Node.js
nodejs.org/en/blog/vulnerability/july-2022-security-releases/
Node.js 14/16/18のセキュリティリリース。
アーティクル
応答性を示す新しい指標「INP」 | フロントエンドBlog | ミツエーリンクス
www.mitsue.co.jp/knowledge/blog/frontend/202207/06_1002.html
ユーザー操作に対するインタラクションにかかった時間を計測するメトリクスであるINP(Interaction to Next Paint)について。
FIDとは異なりページのロード後に関する値を計測する。
CrUX、LighthouseのTimespanモード、Web Vitalsでの計測データの取り方についてなど
Announcing support for WASI on Cloudflare Workers
blog.cloudflare.com/announcing-wasi-on-workers/
Cloudflare WorkersでWASIに対応したWebAssemblyファイルを実行するライブラリがサポートされたことについて
Blogged Answers: How I Estimate NPM Package Market Share (and how Redux usage compares to other libraries) · Mark's Dev Blog
blog.isquaredsoftware.com/2022/07/npm-package-market-share-estimates/
npmパッケージのシェアを読み取るかについて、Reactとステート管理ライブラリを例に解説している記事。
npmパッケージのダウンロード数、GitHubの依存数を絶対数として見た時の問題点や相対的に見る方法についてなど
Flutter前史: ChromeがFlutterになるまで
zenn.dev/mjhd/articles/680a19ae893c1e
Flutterの歴史を振り返る動画について。
BlinkのForkから始まり、JavaScriptからDartへの切り替え、DOMからCanvasへの切り替えなどについて
NestJS製GraphQLサーバの起動が遅かったので調査した話 - もうずっといなかぐらし
katainaka0503.hatenablog.com/entry/2022/07/09/190340
GraphQLのスキーマからTypeScriptのファイルを生成するツールのボトルネックを調べて修正した話。
0x
を使ったボトルネック分析、ts-morph
でのTypeScript ASTの変換のパフォーマンス問題の修正についてなど
Executing shell commands from Node.js
2ality.com/2022/07/nodejs-child-process.html
Node.jsのnode:child_process
モジュールでのコマンドの実行についての解説。
spawnとexecの解説、spawnとexecの違い、Streamでの出力の読み取り、AbortControllerを使ったプロセスの終了、同期と非同期についてなど
サイト、サービス、ドキュメント
jcubic/wayne: Service Worker Routing library for in browser HTTP requests
Service Worker向けのルーティングライブラリ
Tailwind DX
Tailwind用のChrome拡張。
TailwindのクラスをChrome DevTools上で変更できる。
ソフトウェア、ツール、ライブラリ関係
samchon/typescript-json: Runtime type checkers and 5x faster JSON.stringify()
github.com/samchon/typescript-json
ttypescriptなどを使ったコード変換とRuntimeを合わせたJSONライブラリ。
TypeScriptの型を使ったRuntimeでの型チェック、JSON.stringify
相当の処理を提供する
oven-sh/bun: Incredibly fast JavaScript runtime, bundler, transpiler and package manager – all in one.
JavaScriptCoreとZig言語を使って書かれたJavaScriptのRuntime。
Bundler/TSのTranspiler/Task Runerを同梱し、npm互換のパッケージマネージャーやNode-API(N-API)互換の実装、FetchなどのWeb APIの実装をもつ。
oguimbal/pg-mem: An in memory postgres DB instance for your unit tests
In-memoryのPostgresエミュレーターライブラリ。
Postgresを使ったテストで利用する目的