Deno v2.2.9

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

Lockfile v5

Lockfile (deno.lock) の新しいバージョンであるv5が実装されています (#28647, #28842)

グローバルキャッシュもしくは--node-modules-dir=auto使用時のプロセスの起動やdeno installの高速化が主な目的のようです。

下記PRにベンチマークが掲載されていますが、--node-modules-dir=auto使用時の起動が15倍近くまで高速化されるケースがあるようです:

deno.lock内にnpmパッケージに関するメタ情報 (cpu, os, optionalDependencies, など…)をあらかじめ書き込んでおくことで、グローバルキャッシュへの読み込みを減らし、npmパッケージの解決をdeno.lockの情報のみで完結させることで高速化が図られているようです:

現状ではLockfile v5は実験的機能という扱いであり、--unstable-lockfile-v5オプションもしくはdeno.json"unstable": ["lockfile-v5"]を指定することにより有効化が可能なようです (次のマイナーリリース以降、デフォルトで有効化される予定のようです)

deno task - ~の展開やバッククォートによるコマンド実行のサポート

deno taskでのスクリプト実行時に~の展開やバッククォートによるコマンド実行がサポートされています (#28832)

# (1) `~`の展開
$ deno task --eval 'cat ~/.npmrc'

# (2) バッククォートによるコマンドの実行
$ deno task --eval 'touch `date +%Y-%m-%d`.txt'

deno compile

node_modulesの取り扱いの改善

--includenode_modulesディレクトリを指定すると、プロセスがパニックする問題が修正されています (#28782)

Node-APIに関するバグ修正 (macOS向け)

deno compileで生成されたmacOS向けの実行可能ファイルでNode-APIを使うとプロセスがパニックする問題が修正されています (#28800)

Deno.lint - .parentプロパティとデコレーターのサポート

各種ノードの型定義に.parentプロパティーの定義が追加されました (#28802)

あるノードの親ノードを参照することができます。.parentプロパティーはすでに実装はされていたものの、型定義が提供されていなかったようです。

また、deno lintのプラグインにおいてデコレーターがサポートされています (#28834)

Node.js互換性の改善

node:process

loadEnvFile()が実装されています (#28824)

利用するには--allow-readの指定が必要です。

node:fs/promises

FileHandlecreateReadStream()createWriteStream()メソッドが実装されています (#28700)

node:util

parseArgs()allowNegativeオプションがサポートされています (#28811)

node:child_process

spawnSync()inputオプションがサポートされています (#28792)

node:buffer

Buffer.copyBytesFrom()が実装されています (#28829)

node:stream

node:streamnode:stream/promisesfinished()ReadableStreamWritableStreamがサポートされています (#28600)

node:perf_hooks

monitorEventLoopDelay()から返却されるIntervalHistogramオブジェクトにreset()メソッドが実装されています (#28788)

node:crypto

privateEncrypt/privateDecrypt/publicEncryptにおいて戻り値がBufferとして返却されるよう修正 (#28826)

また、SHAKE128やSHAKE256がそれぞれshake128shake256だけでなく、shake-128shake-256という名前でも参照できるように改善されています (#28451)

node_modules/.binに関する改善

あるパッケージにおいてpackage.jsonbinエントリーが定義されていないもののregistry.jsonにはbinエントリーが定義されている場合は、registry.jsonの方の定義を元にnode_modules/.binにエントリーが作られるよう改善されています (#28822)

esbuild-wasmを使用しようとするとプロセスがパニックする問題があったようで、それを改善することが目的のようです。

postinstallスクリプトに関するバグ修正

postinstallスクリプトで実行されるスクリプトが拡張子を持たない場合、DenoではくNode.jsを使用してスクリプトが実行される問題が修正されています (#28786)

Deno v2.2.7におけるnpmライフサイクルスクリプトに関する挙動の変更に伴うバグのようです。

deno lsp - npmパッケージに対するauto-importsの改善

npmパッケージに対するauto-importsの候補として、グローバルキャッシュ中のパスも候補として表示されてしまう問題が修正されています (#28841)

createImageBitmap()のバグ修正

createImageBitmap()において整数のオーバーフローが適切に取り扱われるよう改善されています (#28764)

参考

deno_stdのリリース

deno_stdのリリースが行われています (release-2025.04.08)

@std/encoding@1.0.9

@std/encoding@1.0.9がリリースされています。

破壊的変更

下記の3モジュールに対して破壊的変更が実施されています (#6513)

  • @std/encoding/unstable-base32
    • calcMax()calcSizeBase32()へリネームされています
    • encodeRawBase32()が削除され、代わりにencodeIntoBase32()が追加されました
    • decodeRawBase32が削除されています
  • @std/encoding/unstable-base64
    • calcMax()calcSizeBase64()へリネームされています
    • encodeRawBase64()が削除され、代わりにencodeIntoBase64()が追加されています
    • decodeRawBase64()が削除されています
  • @std/encoding/unstable-hex
    • calcMax()calcSizeHex()へリネームされています
    • encodeRawHex()が削除され、代わりにencodeIntoHex()が追加されています
    • decodeRawHex()が削除されています

各種デコード関連のAPIでUint8Arrayがサポート

以下のAPIでUint8Arrayのサポートが追加されています (#6508)

  • decodeBase32() (@std/encoding/unstable-base32)
  • decodeBase64() (@std/encoding/unstable-base64)
  • decodeHex() (@std/encoding/unstable-hex)

@std/fs@1.0.16

@std/fs@1.0.16がリリースされています。

Node.jsサポートの改善

Node.jsサポートの改善に向けて、以下のAPIが追加されています:

  • chown() & chownSync() (@std/fs/unstable-chown)
  • readDirSync() (@std/fs/unstable-read-dir)

@std/datetime@0.225.4

@std/datetime@0.225.4がリリースされています。

format()parse()の挙動の改善

format()において時刻の小数部が意図せぬ形式でフォーマットされることがある問題が修正されています (#6516)

また、parse()においてyyyyyyがより厳格に取り扱われるよう改善されています (#6516)

フォーマット変更前変更後
yyyy1〜4桁までで年の指定が許容されていました4桁以外の年が拒否されます
yy1〜2桁までで年の指定が許容されていました2桁以外の年が拒否されます

@std/expect@1.0.15

@std/expect@1.0.15がリリースされています。

expect().toMatchObject()のエラーが改善

expect().toMatchObject()が失敗した際にエラーメッセージにdiffが含まれるよう改善されています (#6525)

@std/ini@1.0.0-rc.7

@std/ini@1.0.0-rc.7がリリースされています。

stringify()のバグ修正

stringify()においてDateなどのオブジェクトが意図せぬ形式でフォーマットされる問題が修正されています (#6517)

node-test-viewer.deno.dev

node-test-viewer.deno.devというWebページが公開されています (リポジトリ: denoland/node_test_viewer)

DenoはNode.jsの各種組み込みモジュールの互換性を担保するために、Node.jsのテストファイルを実行しています (denoland/node_test)

node-test-viewer.deno.devでは、DenoにおけるNode.jsのテストファイルの網羅率が可視化されています。