Deno 2.0 Release Candidate
Denoの公式ブログでDeno v2.0.0のRCバージョンについての解説記事が公開されています。
今までリリースされたv2.0.0のRCバージョンで行われた変更点について解説されています。
Deno v2.0.0-rc.3/v2.0.0-rc.4
Deno v2.0.0-rc.3とv2.0.0-rc.4がリリースされています。
破壊的変更
deno add
deno addでJSRパッケージを追加する場合にjsr:プレフィックスの指定が必須になりました:
$ deno add @david/dax
error: @david/dax is missing a prefix. Did you mean `deno add jsr:@david/dax`?
deno cache
deno cacheコマンドを--helpに表示しないようにする対応が行われています。
今後はdeno cacheではなくdeno install --entrypointの使用が推奨されるようです。
deno run
Deno v1.46でエントリポイントを指定せずにdeno runを実行した場合、タスクの一覧を表示する変更が実施されましたが、この変更が取り消しされています。(deno run <task>によるタスクの実行は引き続きサポートされます)
Deno.Seeker(Sync)の削除
Deno.SeekerとDeno.SeekerSyncが削除されています。@std/io@0.224.8にSeekerとSeekerSyncが追加されているため、そちらへの移行が推奨されます。
Deno.UnsafeFnPointer
Deno.UnsafeFnPointerの(pointer: PointerObject, definition: Fn)形式のconstructorの型定義が削除されています。
TypeScript
TypeScript v5.6
Deno内部に搭載されたTypeScriptがv5.6へアップデートされています。
noImplicitOverride
TypeScriptのcompilerOptions.noImplicitOverrideがデフォルトで有効化されました。
deno test
--docによるコードブロックの実行がサポート
deno test --docで JSDocコメントとMarkdownファイル内のコードブロックが実行されるようになりました (今まではJSDocコメントやMarkdownファイル内のコードブロックの型チェックは行われていたものの、実行はサポートされていませんでした)
例えば、以下のようにsum.tsというファイルがあったとします:
/**
 * ```typescript
 * import { assertEquals } from "jsr:@std/assert@1.0.5/equals";
 *
 * assertEquals(sum(1, 2), 3);
 * assertEquals(sum(), 0);
 * ```
 */
export function sum(...numbers: Array<number>): number {
  return numbers.reduce((a, b) => a + b, 0);
}
以下のように実行すると、sum()関数のJSDocコメントに記述されたコードブロックがテストされます:
$ deno test --doc ./sum.ts
Check file:///home/uki00a/ghq/github.com/uki00a/deno-sandbox/sum.ts
Check file:///home/uki00a/ghq/github.com/uki00a/deno-sandbox/sum.ts$2-8.ts
running 0 tests from ./sum.ts
running 1 test from ./sum.ts$2-8.ts
file:///home/uki00a/ghq/github.com/uki00a/deno-sandbox/sum.ts
$2-8.ts ... ok (0ms)
ok | 1 passed | 0 failed (32ms)
deno check --doc-only
また、この変更に併せてdeno checkでも--doc-onlyというオプションが追加されています。deno check --doc-onlyはJSDocコメントとMarkdownファイル中のコードブロックの型チェックを行います (今までのdeno test --docと同じような振る舞いをします)
deno check --doc
また、deno check --docという形式もサポートされており、これはJSDocコメント中のコードブロックの型チェックを行います (--doc-onlyとは異なり、Markdownファイル中のコードブロックは型チェックされないようです)
deno lsp
Auto import
deno lspがTypeScriptの型をAuto importする際に、importではなくimport typeが挿入されるように振る舞いが改善されています。
deno serve
Listening on ...メッセージ
deno serveやDeno.serveで表示されるListening on ...メッセージが標準出力ではなく標準エラー出力へ出力されるように挙動が変更されています。
Deno.ServeHandlerInfoのサポート
fetch関数の第2引数にDeno.ServeHandlerInfoが渡されるように改善されています。
deno lint
no-process-globalsルールが追加
このルールはNode.jsのprocessグローバル変数の使用が検出された場合、node:processからのimportを促します。
これはDeno v2.0.0-rc.1において、npmパッケージ外であってもprocessはグローバル変数として公開されたので、その対応に併せて導入されたルールのようです。
deno upgrade
LTSチャネル
deno upgradeでLTSチャネルがサポートされています (deno upgrade lts)
現状では特に効果はないと思いますが、Deno v2がリリースされて以降、本格的に利用できるようになるのではないかと思います。
deno task
終了コードの修正
引数なしでdeno taskを実行した場合、終了コードとして1が返却されてしまう問題が修正されています。
--allow-run
allow-listなしで--allow-runを使用した場合、以下のような警告が表示されるように挙動が変更されています。
Warning --allow-run without an allow list is susceptible to exploits. Prefer specifying an allow list
- feat: warn when using --allow-runwith no allow list #25215
- feat: update warning message for –allow-run with no list #25693
Deno API
Deno.mainModuleのパーミッションの見直し
Deno.mainModuleが--allow-readを要求しないように挙動が変更されました。
fetchのclientオプションが安定化
Deno.createHttpClientの安定化に続けてfetchのclientオプションが安定化されています。
Node.js互換性の改善
node:http2
Http2ServerRequestとHttp2ServerResponseのimportがサポートされています。
この変更によりqwikが動作するようです。
node:child_process
spawn()のdetachedオプションが実装されています (ただし、Windowsではまだ動作しないようです)
node:trace_events
Denoからnode:trace_eventsのimportがサポートされました (現状では最低限の実装のみが行われています)
node:process
allowedNodeEnvironmentFlags
allowedNodeEnvironmentFlagsが追加されています。
process.on
WindowsでSIGHUPなどの未サポートのシグナルに対してprocess.onでリスナーを登録すると、エラーが発生する問題が修正されています。(未サポートのシグナルにリスナーを登録すると警告が表示されます)
node:tls
rootCertificatesが追加されています。
Deno公式からNext.jsのチュートリアルが公開
Denoの公式ドキュメントに、DenoでNext.jsアプリケーションを作成するためのチュートリアルが公開されています (denoland/docs#871)
現時点での最新のドキュメントは以下から閲覧できます: