Deno v2.2がリリースされました。
この記事では主な変更点などについて解説します。
deno lint
JavaScriptプラグインシステムの導入
deno lint
のJavaScriptプラグインシステムが正式に導入されました。
プラグインを適用する際は、deno.json
のlint.plugins
で有効化できます。
注意点として、JavaScriptプラグインを有効化している際はdeno lint
のインクリメンタルキャッシュの仕組みが無効化されるようです (#28026)
インクリメンタルキャッシュについては今後の対応が検討されているようです。
コミュニティーからいくつかプラグインがJSRに公開されています:
React/JSX関連のルールの追加
deno_lint
で実装されていたReactやJSX関連のlintルールがDeno本体で有効化されました。
$ deno lint --rules --json | jq '.rules | map(select(.tags | (contains(["jsx"]) or contains(["react"])))) | .[].code'
"jsx-boolean-value"
"jsx-button-has-type"
"jsx-curly-braces"
"jsx-key"
"jsx-no-children-prop"
"jsx-no-comment-text-nodes"
"jsx-no-duplicate-props"
"jsx-no-unescaped-entities"
"jsx-no-useless-fragment"
"jsx-props-no-spread-multi"
"jsx-void-dom-elements-no-children"
"react-no-danger"
"react-no-danger-with-children"
"react-rules-of-hooks"
新しく追加されたこれらのルールにはjsx
もしくはreact
タグが付与されています。React関連のルールはrecommended
タグがついていなさそうなので、必要に応じてdeno.json
のlint.rules.tags
などで有効化するとよさそうです:
{
"lint": {
"rules": {
"tags": ["fresh", "react", "recommended"]
}
}
}
--rules
の挙動の変更
deno lint --rules
の挙動が変更されています。
今までは無効化されているルールは表示されませんでしたが、Deno v2.2からは無効化されているものも含め利用可能なルールがすべて表示されるように挙動が変更されています。有効化されているルールには✓
マークが表示されるため、見分けることはできそうです。
また、deno lint --json --rules
からマークダウンドキュメントが削除されています。(代わりに公式ドキュメントへのリンクが表示されます)
Deno API
WebTransport
WebTransport API及びDeno.upgradeWebTransport
が実装されています。これらのAPIの利用には--unstable-net
が必要です
Deno.upgradeWebTransport
はDeno v2.1.5で導入されたQUICのサポートとの併用が想定されており、引数としてDeno.QuicConn
を受け取り、WebTransportインスタンスを返却します。
Deno.cwd()
で--allow-read
が不要化
Deno.cwd()
で--allow-read
パーミッションが要求されなくなりました。元々、Error
を意図的にthrow
してスタックトレースを解析することでカレントディレクトリを判断することができたため、権限を要求する必要性が薄いと判断されたようです。
Deno.cpuUsage()
Deno.cpuUsage()
が実装されています。戻り値の形式はnode:process
のprocess.cpuUsage()
と同様です。
また、node:process
のprocess.cpuUsage()
も合わせて実装されています。
OpenTelemetry
Deno.serve()
のMetricsの拡充
Deno.serve()
に関して以下のMetricsが追加されています。
http.server.request.duration
http.server.active_requests
http.server.request.body.size
http.server.response.body.size
Spanでのリンクの設定
Span#addLink
などによるリンクの設定がサポートされています。
node:sqlite
Denoにnode:sqlite
モジュールが追加されました。インメモリーデータベース(:memory:
)を利用する場合を除いて、該当のデータベースファイルに対する読み込み(--allow-read
)と書き込み権限(--allow-write
)を与える必要があります (ただし、readOnly: true
を指定した場合は書き込み権限は要求されません)
import { join } from "node:path";
import { DatabaseSync } from "node:sqlite";
const denoDir = Deno.env.get("DENO_DIR");
const db = new DatabaseSync(join(denoDir, "check_cache_v2"), {
readOnly: true,
});
const stmt = db.prepare("SELECT * FROM tsbuildinfo");
const rows = stmt.all();
for (const row of rows) {
console.info(row.specifier);
}
db.close();
Web API
Temporal
Temporal.ZonedDateTime#getTimeZoneTransition
が実装されています。
createImageBitmap()
の互換性の改善
createImageBitmap()に感して以下のような改善が実施されています:
jpeg
/png
/bmp
/ico
形式がサポートcolorSpaceConversion
オプションがサポート- 引数として
ImageBitmap
がサポート
Web Cache API
Web Cache APIのバックエンドとしてlscache
というものがサポートされているようです (#27628)
詳細についてはわからないのですが、DENO_CACHE_LSC_ENDPOINT
環境変数にカンマ区切りでエンドポイントとトークンを指定することで有効化できるようです。
deno outdated
依存関係の対話的な更新がサポート
deno outdated
で依存関係の対話的な更新がサポートされました。--update
と--interactive
を併用することで、Denoが対話的に依存関係を更新するUIを表示してくれます:
$ deno outdated --update --interactive
? Select which packages to update (<space> to select,↑/↓/j/k to navigate, a to select all, i to invert selection,
enter to accept, <Ctrl-c> to cancel)
❯ ○ jsr:@hono/hono 4.6.14 -> 4.7.2
○ npm:@nestjs/common 10.4.4 -> 10.4.15
○ npm:@nestjs/core 10.4.4 -> 10.4.15
○ jsr:@oak/oak 17.1.0 -> 17.1.4
deno task
ワイルドカード指定(*
)によるタスクの一括実行がサポート
指定されたパターンにマッチするタスクをまとめて実行することができます:
# `check:`から始まるタスクをまとめて実行します
$ deno task 'check:*'
--frozen
のサポート
deno task
で--frozen
オプションがサポートされています。
"nodeModulesDir": "auto"
が有効化されている際にdeno task
でエラーが起きてしまうことがあるようで、その場合に--frozen=false
を指定することで回避できるようにすることが目的のようです。
deno check
compilerOptions.rootDirs
のサポート
deno check
コマンドでTypeScriptのcompilerOptions.rootDirs
がサポートされました。
npmの依存解決失敗時のエラーの改善
deno check
コマンドにおいて、npmの依存関係の解決に関するエラーがtsc
と同様の形式で表示されるよう改善されています。
deno compile
sloppy importsのサポート
deno compile
がsloppy importsを認識してくれるよう改善されています。
sloppy importsは"unstable": ["sloppy-imports"]
や--unstable-sloppy-imports
などで有効化できます。
deno jupyter
GPUTexture
とGPUBuffer
の表示がサポート
GPUTexture
はimage/png
, GPUBuffer
はtext/plain
形式で解釈されるようです (#28117に動画があります)
deno bench
--permit-no-files
オプション
deno bench
コマンドに--permit-no-files
オプションが追加されています。deno test
の同名オプションと同様に、このオプションが指定されると、ベンチマークファイルが検出されない場合にエラーが発生しなくなります。
Deno.bench
にwarmup
/n
オプションが追加
Deno.bench()
にv1.21で削除されたwarmup
とn
オプションが再追加されました。
その他
TypeScript v5.7
Deno本体に組み込まれたTypeScriptがv5.7.3へアップデートされています。
これに合わせて、deno_std
においてもTypeScript v5.7への対応がすでにリリースされています (articles/2025/02/02)
V8 v13.4
Deno本体に組み込まれたV8が13.4へアップデートされています。
ワークスペースにおけるimportMap
サポートの改善
ワークスペースのルートのdeno.json
にimportMap
が定義されていると、各メンバーのimportMap
がうまく動作しない問題が修正されています。
macOSにおけるXDG_CACHE_HOME
のサポート
macOSにおいてDenoのグローバルキャッシュ(DENO_DIR
)を決定する際にXDG_CACHE_HOME
が考慮されるよう改善されています。
おわりに
このページは主にリリースノートを参考に記載されています。
Denoの公式ブログにおいては、OpenTelemetryサポートについて正式に発表されています。また、ワークスペースの各メンバーごとにcompilerOptions
オプションを定義できるようにする改善などについても言及されています。