Denoばた会議 Monthly レポート

Table of contents

Denoばた会議 Monthly 第7回

2022年3月20日開催。
connpassリンク

今月のアップデートを追う

Denoのアップデートを追っていくLT。
Discord上の会話はザックリと箇条書き。

@uki00aさんのスライド

Deno v1.20

permissionsオプションの挙動が変更(破壊的変更)

Deno.testpermissionsで明示されていないものはデフォルトで無効化されておらず、直感的ではなかったのでデフォルト無効化に変更された。

deno taskコマンド

deno.jsonに以下のように定義することで、deno task startのようなコマンドを実行可能になる

{
  "tasks": {
    "start": "deno run --allow-net mod.ts"
  }
}

deno benchコマンド

Deno.benchの内部に関数を書き、deno bench --unstableと書くことで、コードのベンチマークを取得できる。

Deno.bench("URL parsing", () => {
  new URL("https://deno.land");
});

HTTPレスポンスの自動圧縮

以下の条件を満たす場合、DenoのネイティブHTTPサーバー(std@0.130.0/http/server.tsserveなど)がHTTPレスポンスを自動圧縮するようになった。

圧縮後は、Content-Encodingヘッダーを設定してエンコーディングを反映、Varyヘッダーを調整しレスポンスに影響を与えたリクエストヘッダを追加する。

deno test --trace-ops

Deno.testでリソースリーク検出時のエラー内容が改善される。

Deno.connectのAPIが変更

今まではDeno.Connというオブジェクトを返していたが、transport: "tcp"を指定するとDeno.TcpConntransport: "unix"を指定するとDeno.UnixConnが返ってくるようになる。
Deno.Connに定義されていたsetNoDelay()setKeepAlive()Deno.TcpConnに移動している。

Deno.listenTlscertkeyオプションがサポート

元々存在していたcertFilekeyFileは非推奨化。

パフォーマンス改善

Op(という命令単位)の呼び出しが最大で60%程度まで高速化。また、atob/btoaも最大20倍ほどの改善がされている。

TypeScriptがv4.5.2からv4.6.2へアップデート

タグ付きユニオンがさらに進化するなどの更新内容が含まれている。
詳細は公式ブログ投稿を参照。

deno.json(c)でimportMapオプションがサポート

Deno.upgradeHttp()が追加

AbortSignal.timeout()が実装

deno_std

Web Streams APIへの段階的移行

多くのdeno_stdがDeno.Writer/Deno.ReaderといったGoスタイルで実施されていたが、それらを徐々にWeb Streams APIに移行していく。
進捗は以下Issueにまとめられている。
https://github.com/denoland/deno_std/issues/1986

uki00aさんもencoding/csvの移行作業に携わっている。

dotenvモジュールが追加

deno_std/nodeの改善

node-mysql2パッケージがある程度動くようになった模様。
deno_stdのリポジトリにexampleがある。

deno.landがNode.jsからDenoへ移行

Next.js/TailwindCSS/VercelからFresh/Twind/Deno Deployに移行。

FreshでIsland architectureが実装

Freshが、部分的ハイドレーションでWebサイトを構築するIsland architectureで実装された。
それに伴い、ディレクトリ構造の見直しやuseData()<Suspence>などの削除も行われた。<Suspence>は再度追加予定とのこと。

Remix v1.2.0での実験的なDenoサポート

Remix v1.2.0から、以下コマンドでDenoのテンプレートが構築される。

yarn create remix --template deno-ts

oakのNode.jsサポート

dntを利用してoakがNode.jsをサポート。@oakserver/oakという名称でnpmにパブリッシュされている。
現在は10.3.0と10.4.0、10.5.0がリリース済み。

Deno公式ブログに解説記事が公開されている。

仕様への提案の仕方について

Node学園の話

参考資料

上記をまとめる際に眺め、かつ上記の中に含められなかった資料です。
名前だけ掠ってて関係ない資料もあるかと思いますが、まとめる作業の可視化として残しています。
読まなくて大丈夫です。