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.SeekerDeno.SeekerSyncが削除されています。@std/io@0.224.8SeekerSeekerSyncが追加されているため、そちらへの移行が推奨されます。

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 serveDeno.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

Deno API

Deno.mainModuleのパーミッションの見直し

Deno.mainModule--allow-readを要求しないように挙動が変更されました。


fetchclientオプションが安定化

Deno.createHttpClientの安定化に続けてfetchclientオプションが安定化されています。


Node.js互換性の改善

node:http2

Http2ServerRequestHttp2ServerResponseimportがサポートされています。

この変更によりqwikが動作するようです。


node:child_process

spawn()detachedオプションが実装されています (ただし、Windowsではまだ動作しないようです)


node:trace_events

Denoからnode:trace_eventsimportがサポートされました (現状では最低限の実装のみが行われています)


node:process

allowedNodeEnvironmentFlags

allowedNodeEnvironmentFlagsが追加されています。


process.on

WindowsでSIGHUPなどの未サポートのシグナルに対してprocess.onでリスナーを登録すると、エラーが発生する問題が修正されています。(未サポートのシグナルにリスナーを登録すると警告が表示されます)


node:tls

rootCertificatesが追加されています。


Deno公式からNext.jsのチュートリアルが公開

Denoの公式ドキュメントに、DenoでNext.jsアプリケーションを作成するためのチュートリアルが公開されています (denoland/docs#871)

現時点での最新のドキュメントは以下から閲覧できます: