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.BrowserWindowOptionsのopacity及びtransparentオプションDeno.BrowserWindowのgetOpacity()及びsetOpacity()メソッド
--exclude-unused-npm
deno compileで提供されている--exclude-unused-npmオプションのサポートがdeno desktopコマンドにも追加されました (#35740)
desktop.backend
deno.jsonにおけるdesktop.backendフィールドの設定値が適用されない問題が修正されています (#35815)
セキュリティ
minimumDependencyAge
deno.jsonのminimumDependencyAge.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をダウンロードして実行することで実現されているようです。