Deno v1.32がリリースされました。
この記事では主な変更点などについて解説します。
WebGPU APIの削除
Deno v1.8で追加されたWebGPU APIが削除されました。
バイナリサイズや起動速度に影響があったというのが理由のようです。
ただし、削除は一時的なもののようで、将来的には再びWebGPU APIが追加される想定のようです。
KVストア
Deno本体にKVストアが実装されています。
ただし、こちらについてはまだ公式では紹介などはされておらず、今後、APIなどに大きな変更が入る可能性もあります。
詳細については、以下の記事を参照いただければと思います。
TypeScript
TypeScript v5.0.2へのアップデート
Deno内部に搭載されているTypeScriptがv5.0.2へアップデートされました。
ただし、制限として、ES Decoratorsのサポートについては現時点では除外されているようです。
--all
を指定しなかった際の初回の型チェックの実行が高速化
Denoでは型チェックの実行結果をSQLiteにキャッシュしておくことで、型チェックの効率化を図っています。
しかし、初回の型チェック実行時についてはこのキャッシュの仕組みが効かないため、型チェックの実行効率が少し落ちてしまいます。
この問題を解消するために、--all
が指定されていない際は、ローカルのファイルのみを型チェックするように挙動が変更されました。
これによって、キャッシュが効いていない場合でも、場合によっては2倍程度の高速化が見られることもあるようです。
CLIに関する改善
deno compile
でdynamic importとWeb Workerがサポート
deno compile
でdynamic importとWeb Workerを使用したコードのバイナリが作成できるようになりました。
例えば、以下のようなファイルがあったとします。
// sum.js
export function sum(...numbers) {
return numbers.reduce((a, b) => a + b, 0);
}
// main.js
const { sum } = await import("./sum.js");
console.info(sum(1, 2, 3));
このようにシンプルなケースでは、特に設定などは不要でうまく動いてくれます。
$ deno compile -o main main.js
$ ./main
6
ただし、制限として、dynamic importやWorker
に与えるURLやパスを動的に組み立てている場合、読み込まれる対象となるファイルをdeno compile
コマンドは認識することができません。
そういったケースに備えて、deno compile
に--include
オプションが追加されています。
例えば、以下のようにimport.meta.resolve
などを使用してURLを動的に作成している場合などにこのオプションを指定する必要があります。
// main.js
const { sum } = await import(import.meta.resolve("./sum.js"));
console.info(sum(1, 2, 3));
--include
を指定しない場合、以下のようにエラーが発生します。
$ deno compile -o main main.js
$ ./main
error: Uncaught (in promise) TypeError: Module not found
const { sum } = await import(import.meta.resolve("./sum.js"));
--include
を指定すると、うまく動作するようになります。
$ deno compile -o main --include=sum.js main.js
$ ./main
6
--ext
オプションの追加
deno compile
/deno run
/deno bundle
コマンドで--ext
オプションがサポートされました。
このオプションは、主に拡張子を持たないスクリプトを実行する場合に指定することが想定されているようです。
$ deno run --ext ts some_script_without_extension
deno repl
の改善
DENO_REPL_HISTORY
環境変数がサポートされました。
この環境変数を設定することで、ヒストリの保存先を変更できます。また、この変数に空を設定した場合は、ヒストリの保存が無効化されます。
$ DENO_REPL_HISTORY=./deno_repl_history.txt deno repl
また、配列などに対してタブ補完をした際に、全インデックスが補完されてしまう問題が修正されています。
--watch
とblob:
URLの併用
--watch
オプションとblob:
URLを併用すると、エラーが発生する問題が修正されました。
Deno API
WindowsでのDeno.FileInfo.dev
サポート
今までは、WindowsではDeno.FileInfo.dev
にはnull
が設定されていました。 (このオブジェクトはDeno.stat
などのAPIから返却されます)
今回のリリースでは、このプロパティに値が設定されるように改善されました。
この影響により、Deno.FileInfo.dev
プロパティの型定義がnumber | null
からnumber
へ変わっています。
マルチキャストのサポート
Deno.DatagramConnにjoinMulticastV4
とjoinMulticastV6
メソッドが追加されました。(利用には--unstable
の指定が必要になります)
これらのメソッドは、それぞれIP_ADD_MEMBERSHIP
及びIPV6_ADD_MEMBERSHIP
に対応し、Deno.MulticastV4Membership/Deno.MulticastV6Membershipを返却します。
これらのオブジェクトには、以下のメソッドが定義されています。
leave()
:IP_DROP_MEMBERSHIP
/IPV6_DROP_MEMBERSHIP
に対応します。setLoopback()
:IP_MULTICAST_LOOP
/IPV6_MULTICAST_LOOP
オプションを設定できますsetTTL()
:IP_MULTICAST_TTL
オプションを設定できます (Deno.MulticastV4Membership
のみ)
また、Deno.UdpListenOptionsにloopback
オプションが追加されています。
これにtrue
を設定すると、送信したマルチキャストパケットが送信元ソケットにループバックされるようになります。(IP_MULTICAST_LOOP
やIPV6_MULTICAST_LOOP
オプションに相当します)
Node.js互換性の改善
node:crypto
createCipheriv
が実装されました。 (aes-128-cbc
のみがサポートされています)createHmac
でリソースリークが起きる問題が修正されています。
node:process
kill
を呼ぶと、TypeError: DenoCommand is not a constructor
エラーが発生する問題が修正されています。
URLSearchParams.size
URLSearchParams
にsize
プロパティが実装されました。
const params = new URLSearchParams();
params.set("num", 123);
params.set("str", "foobar");
params.size; // => 2