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-run
with 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)
現時点での最新のドキュメントは以下から閲覧できます: