Deno v2.9.2

Deno v2.9.2がリリースされています。

deno desktop

--hmr - フレームワークとの統合

フレームワーク検出機能によってフレームワークが検出され かつ --hmrオプションが指定されている場合、該当フレームワークのdevサーバーが起動されるように改善されています (#35722, #35851)。ただし、まだすべてのフレームワークで本機能がサポートされているわけではなく、現状ではFreshと各種Viteベース (Nuxt, SvelteKitなど) のフレームワークのみがサポートされているようです。

React Router (フレームワークモード) のサポート

deno desktop及びdeno compileフレームワーク検出機能においてReact Routerのフレームワークモードがサポートされています (#35557)。@react-router/devパッケージの有無に基づいて検出されます。

opacity/transparent

ウィンドウの透明度の調整がサポートされています (#35646)。

下記APIによって利用できます。

  • Deno.BrowserWindowOptionsopacity及びtransparentオプション
  • Deno.BrowserWindowgetOpacity()及びsetOpacity()メソッド

--exclude-unused-npm

deno compileで提供されている--exclude-unused-npmオプションのサポートがdeno desktopコマンドにも追加されました (#35740)

desktop.backend

deno.jsonにおけるdesktop.backendフィールドの設定値が適用されない問題が修正されています (#35815)

セキュリティ

minimumDependencyAge

deno.jsonminimumDependencyAge.excludeにおいてワイルドカード形式によるパッケージ指定がサポートされています (#35746)

{
  "minimumDependencyAge": {
    "age": 1440,
    "exclude": [
      "jsr:@std/*"
    ]
  }
}

node:net

Deno v2.9における対応に続き、node:netによってUNIXソケットへ接続またはlistenする際も--allow-net=unix:<path>が要求されるように挙動が変更されています (#35835)

--ignore-read

--ignore-readオプションにコンマ区切りで複数のパスの指定がサポートされています (#35661)

OpenTelemetry

下記環境変数がサポートされています (#35068)

Attribute に長い文字列が設定された場合、これらの環境変数で指定された長さに収まるように切り捨てられます。

--inspect

Node.jsと同様に、SIGUSR1シグナルを受信した際にインスペクター (--inspect) が起動されるように改善されています (#35738)

node:v8

setHeapSnapshotNearHeapLimit()が実装されています (#35694)

利用するためにはカレントディレクトリに対する書き込み権限 (--allow-write) が必要です。

node:test

getTestContext()が実装されています (#35678)

node:child_process

createWritestream() (node:fs) やSocket (node:net) などのfdオプションに対して、spawn()などのstdioオプションで設定された4つ目以降の追加の fd を指定できるように改善されています (#34133, #35805)

node:fs

glob()followSymlinksオプションがサポートされています (#35524)

Web Cache API

Cache#keys()が実装されています (#35455)

パフォーマンス改善

deno install

npmパッケージに関するメタデータの読み込みを最適化することで、インストールが高速化されています (#35698)。ベンチマークによるとDrizzle ORMのインストールが2倍以上高速化されているようです。

Streams API

Streams APIのパフォーマンス最適化が実施されています (#35689, #35773, #35788, #35790, #35799, #35810, #35813, #35842, #35844)

主要な改善として、pipeTo()などによって接続されたReadableStream及びWritableStreamがどちらもDenoによって管理されるリソース (例: Deno.FsFile.readable, Deno.stdout.writable, など) 由来のものであった場合に、Rust ↔ JavaScript 間でのデータのコピーを抑制することによるオーバーヘッドの削減が行われているようです (Fast streams (#16046))。特定のファイルの内容を/dev/nullに書き込むことでpipeTo()のパフォーマンスを計測するベンチマークによると、 7.5倍ほどの高速化が確認されているようです (#35689)。

queueMicrotask()

queueMicrotask()が独自の実装ではなくV8から提供される実装 (--enable-queue-microtask) を利用するように変更されています (#35787)。パフォーマンスの改善が見込まれるようです。

直近のDenoの開発について

直近でいくつかの大きめの機能の開発が実施されているため、紹介いたします。

⚠️ これらの変更はまだリリースされておらず、今後、仕様などに変更が発生する可能性があります。

TypeScriptのフォーク版 (denoland/typescript) の廃止について

まだリリースはされていませんが、今までDenoの内部で使用されていたdenoland/typescriptを廃止して、標準のmicrosoft/typescriptを使用する変更がmainブランチにマージされています。

この対応はコミットメッセージ (34d5929) によるとDeno v3に向けた変更のようです。

deno sync-types

まだリリースはされていませんが、deno sync-typesコマンドを実装するPRがmainブランチにマージされています。

jsrパッケージなどに依存したコードベースを標準のtscなどで型チェックできるようにするために、プロジェクトの依存関係に基づいてtsconfig.jsonを自動生成してくれるようです。

TypeScript 7による型チェックの有効化について

まだマージはされていませんが、TypeScript 7を使用して型チェックを実装するPRが作成されています:

現時点では、前述のdeno sync-typesコマンドの仕組みを活用しつつ、npmレジストリからTypeScript 7をダウンロードして実行することで実現されているようです。