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-window
no-window-prefix
verbatim-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
リスナーが登録されている際は、プロセスの終了がブロックされるように挙動が変更されました。