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.durationhttp.server.active_requestshttp.server.request.body.sizehttp.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オプションを定義できるようにする改善などについても言及されています。