Deno v1.42がリリースされました。
この記事では主な変更点などについて解説します。
Deno v2に向けた変更
DENO_FUTUREによるDeno.*配下の非推奨APIの削除
DENO_FUTURE=1を指定すると、Deno.*配下の非推奨APIが削除されるようになりました。
deno installに--globalオプションが追加
deno installコマンドはインターネット上などで公開されたスクリプトをインストールするためのコマンドです。(デフォルトのインストール先は$HOME/.deno)
Deno v2ではこのdeno installコマンドはデフォルトでdeno addコマンドのエイリアスとして機能するように変更される予定のようです。
この変更に向けてdeno installコマンドに--global/-gオプションが追加されました。Deno v2のリリース以降、Deno v1におけるdeno installと同じ振る舞いをさせるためには、この--globalオプションを指定する必要があります。
$ deno install --global --allow-read=. --allow-write=. --allow-net https://deno.land/x/udd/main.ts
deno lint
Quickfixのサポート
deno lintとdeno lspでQuickfixがサポートされました。deno lintでは--fixオプションによりQuickfixを実行できます。
$ deno lint --fix main.js
今のところ以下のルールでQuickfixがサポートされています。
no-windowno-window-prefixverbatim-module-syntax
jsr関連のルールの自動適用
deno.jsonにname/version/exportsが定義されていたら、jsr関連のlintルールが自動で有効化されるように挙動が変更されています。
適用されるルールについては以下で確認できます。
$ deno lint --rules-tags=jsr --rules
deno task
タスクのコメント
deno taskコマンドがタスクに記述されたコメントを認識してくれます。
// deno.jsonc
{
"tasks": {
// Run tests
"test": "deno test --allow-read=. --trace-leaks"
}
}
$ deno task
Available tasks:
- test
// Run tests
deno test --allow-read=. --trace-leaks
shebangのサポート
以下のようにスクリプトを実行するタスクを定義します。
{
"tasks": {
"script": "./my_script.js"
}
}
するとこのスクリプトに記述されたshebangをdeno taskが認識してくれるようになりました。
#!/usr/bin/env -S deno run
console.info("foo");
リダイレクトサポートの改善
入力リダイレクトがサポートされています。
{
"tasks": {
"script": "jq .tasks < deno.jsonc"
}
}
また指定したファイルディスクリプタへのリダイレクトもサポートされています。
{
"tasks": {
"script": "deno run some_script.js 2>&1"
}
}
$?のサポート
スクリプトで$?を参照できます。
{
"tasks": {
"script": "deno run some_script.js || echo $?"
}
}
deno publish
deno publish --dry-runでコミットされていないファイルが検出されたらエラーが起きるように改善されています。deno publishの実行時に、パッケージに含まれるべきモジュールがexcludeなどで除外されていた場合、エラーが発生するように挙動が変更されています。
deno test
JUnitレポーターにおけるサブステップの取り扱いが改善
JUnitレポーター(--reporter=junit)でサブステップ(t.step)の取り扱いが改善されています。
今までt.stepで定義されたテストケースは<property>によって表現されていたものの、gotestsumやvitestなどと同様に<testcase>が使用されるように変更されています。
これによりt.stepが失敗した際により詳細なエラーメッセージなどを含めることができるように改善されているようです。
deno lsp
vscode_denoでDeno: Reload Import Registries Cacheコマンドを実行してもjsrパッケージが再読み込みされない問題が修正されています。
deno check
deno checkコマンドでは--unstableの指定を提案しないように変更されています。
これは/// <reference no-default-lib="true"/>が使われており、かつdeno.unstableが読み込まれていない場合を想定した変更のようです。この場合、deno checkは--unstableの指定を提案するものの、実際に--unstableを指定しても効果がないため、混乱を招いてしまうというのがこの変更の理由のようです。
CLI
vendorディレクトリの取り扱いの変更
今まで、Denoの各コマンドはvendorと名のついたディレクトリをデフォルトで除外していました。
Deno v1.42でこの挙動が変更され、deno.jsonで"vendor": trueが指定されていない場合は、vendor/ディレクトリがデフォルトで無視されなくなりました。
Deno v1.41までの挙動に戻したい場合は、deno.jsonのexcludeなどで明示的に除外する必要があります。
https://github.com/denoland/deno/pull/23100
--watch-excludeオプションが追加
このオプションで指定されたファイルが変更された際は、--watchによる再起動が行われなくなります。
$ deno run --watch-exclude=data.json --watch main.js
TypeScript
TypeScript v5.4へのアップデート
Deno本体に搭載されたTypeScriptがv5.4へアップデートされています。
新しいSetメソッドの型定義
proposal-set-methodsで提案されているSetの新しいメソッドに関する型定義が追加されました。
Web API
EventSourceの改善
EventSourceで発生するリソースリークなどの問題が修正されています。
また、EventSourceで受け取ったメッセージのフィールドに:を含む値が設定されていた場合に、意図せずして値が部分的に切り取られてしまう問題も修正されています。
structuredCloneの型定義が修正
structuredCloneの型定義がTypeScript公式と同様の定義に合わせられました。
Node.js互換性の改善
node:fs
FSWatcher#unrefが実装されました。
node:events
EventEmitterAsyncResourceが実装されました。
node:crypto
ECDHのgetPublicKey/generateKeysメソッドでformat引数がサポートgetRandomValuesが追加subtleが追加createPublicKeyでEC鍵がサポート
node:string_decoder
内部実装が再実装され、Node.jsとの互換性が改善されています。
node:child_process
spawnSyncなどのstdioオプションに[null, null, null]を指定した際に["pipe", "pipe", "pipe"]と同様に取り扱われるように改善されました。
node:v8
serialize/deserializeが実装されました。
node:worker_threads
WorkerのworkerDataオプションにMessagePortを渡せるように改善されました。- ESMモジュールがCJSモジュールとして実行されてしまうことがある問題が修正されました。
parentPortにmessageリスナーが登録されている際は、プロセスの終了がブロックされるように挙動が変更されました。