Deno v2.0.0-rc.0

Deno v2.0.0-rc.0がリリースされています。

アップデートについて

今回、GitHub Releaseは作成されていないようなので、deno upgradeによってアップデートする必要がありそうです。RCバージョンへのアップデートはDeno v1.46でサポートが入っているため、それ以前のバージョンをお使いの場合は、一度、v1.46を経由してからアップデートする必要がありそうです。

$ deno upgrade 2.0.0-rc.0

もし現在のDenoの実行可能ファイルを上書きしたくない場合は、--outputオプションを使えば回避できます:

# `./deno-2.0.0-rc.0`に保存します
$ deno upgrade --output deno-2.0.0-rc.0 2.0.0-rc.0

直近の変更点について

コミットログを参考に、v2.0.0-rc.0に入っている可能性がありそうな内容について紹介します

⚠️ここで書いている内容には推測も含まれています。もし機能が入っていなそうでしたら、すみません🙏

DENO_FUTURE=1設定時の振る舞いのデフォルト化

DENO_FUTURE=1を設定した際の振る舞いがデフォルト化されたようです。

BREAKING: DENO_FUTURE=1 by default, or welcome to Deno 2.0 (#25213)

具体的には、以下のような変更がデフォルトで適用されます:

--node-modulesオプション

Deno v2 向けに--node-modulesというフラグが追加されています。

⚠️上記のコミットログ内に含まれているため紹介しますが、試したところうまく動いていないようにも見えるので、もしかしたらこの変更はまだv2.0.0-rc.0には入っていない可能性もあるかもしれません🙏

以下の3種類のモードが指定できるようです:

モード説明備考
local-autoおそらく、Denoがnode_modules/を作成してくれるモード
local-manualおそらく、BYONMが有効化されますv2ではpackage.jsonがあれば自動でBYONMが有効化されるはずなので、このモードを指定する場面はおそらく多くはなさそうに思われます
global-autoおそらく、Denoがnode_modules/を作成せずにグローバルキャッシュにのみnpmパッケージを保存するモード

このモードは--node-modulesだけでなく、deno.jsonnodeModulesで設定することも可能なようです。

この変更に伴い、--node-modules-dir(nodeModulesDir)は削除される予定のようです。


Deno v1.46.2

Deno v1.46.2がリリースされています。

v1.46.0でのfetch()の改善について

Deno v1.46.0で導入されたfetch()のリクエストボディでのAsyncIterable<Uint8Array>のサポートがrevertされています。

意図せぬリグレッションが判明したことが背景のようです:

この対応については、仕様を改めて検討してから再導入することが考えられているようです (Add async iterable<T> type to WebIDL (whatwg/webidl#1397))

node:worker_threads

Workeronlineイベントが適切なタイミングで発火されない問題が修正されています。

Parcelのサポートに向けた対応のようです。

node:async_hooks

async contextのトラッキングが改善されています。


node:crypto

JWKのサポートに関して様々な改善が行われています:

  • createPublicKeyで作った公開鍵のJWK形式でのexportがサポート
  • createPublicKeyでJWK形式のEC公開鍵の取り込みがサポート
  • createPublicKeycreatePrivateKey"kty": "OKP"形式のJWK鍵がサポート
  • createPublicKey"kty": "RSA"形式のJWK鍵がサポート

node:cluster

log4jsを動かすため、node:clusterのAPIが改善されています。

deno run <task>

deno runコマンドでdeno.jsontasksで定義されたタスクを実行する際に、名前に:を含むタスクが実行できない問題が修正されています。

deno install

Deno v2に向けて、BYONMが有効化され かつ node_modules/がない場合に、npm installではなくdeno installの実行が提案されるように修正されています。

error: Could not resolve "picocolors", but found it in a package.json. Deno expects the node_modules/ directory to be up to date. Did you forget to run `deno install`?

deno_stdのリリース

deno_stdがリリースされています。

@std/encoding@1.0.3

@std/encoding@1.0.3がリリースされています

@doctor/encoding-stream@std/encodingに取り込まれました。

以下のモジュールが追加されています:

  • @std/encoding/base32-stream
    • Base32EncoderStream
    • Base32DecoderStream
  • @std/encoding/base32hex-stream
    • Base32HexEncoderStream
    • Base32HexDecoderStream
  • @std/encoding/base64-stream
    • Base64EncoderStream
    • Base64DecoderStream
  • @std/encoding/base64url-stream
    • Base64UrlEncoderStream
    • Base64UrlDecoderStream
  • @std/encoding/hex-stream
    • HexEncoderStream
    • HexDecoderStream

@std/http@1.0.4

@std/http@1.0.4がリリースされました。

@std/http/routemethodオプションに指定されたHTTPメソッドがルーティングの際に考慮されていなかった問題が修正されています。

@std/assert@1.0.3

@std/assert@1.0.3がリリースされています。

新しいAPIとしてassertNever(@std/assert/never)が追加されています。指定された値がnever型であるかどうかをチェックしてくれます。

@std/path@1.0.3

@std/path@1.0.3がリリースされています。

extname(@std/path/extname)とdirname(@std/path/dirname)の引数としてURLオブジェクトがサポートされています。

@std/testing@1.0.1

@std/testing@1.0.1がリリースされています。

@std/testing/typesIsExact型で、意図せずして型チェックが通ってしまうまたは失敗してしまうケースがある問題が修正されています。

@std/front-matter@1.0.3

@std/front-matter@1.0.3がリリースされています。

@std/front-matter/yaml:

extract()の引数としてParseOptions(@std/yaml/parse)を渡せるように改善されています。

@std/cache@0.1.1

@std/cache@0.1.1がリリースされています。

新規APIとしてTtlCache(@std/cache/ttl-cache)が追加されています。

@std/csv@1.0.2

@std/csv@1.0.2がリリースされています。

stringify()readonlyな配列を渡せるように型定義が改善されています。

@std/dotenv@0.225.1

@std/dotenv@0.225.1がリリースされています。

不正な形式のキーが.envに存在した場合、警告が表示されるよう挙動が改善されています。

NativeScript macOS Node-API Preview

NativeScriptの公式ブログで@nativescript/macos-node-apiパッケージが紹介されています。

このパッケージはNode.jsに加えてDenoでも動作するようです。

DjDeveloperr/NSBallのリポジトリでは、このパッケージとNode.jsまたはDenoを使って、macOS向けのデスクトップアプリを作成する例が公開されています。


Deno DeployにおけるWeb Cache APIのサポートについて

Deno DeployにおけるWeb Cache APIのベータサポートについてアナウンスされています。

この記事では、HTTPヘッダーに基づいたキャッシュの有効期間の管理や内部の仕組み、料金設定などについて解説されています。

Deno KV internals: building a database for the modern web

Denoの公式ブログでDeno KVの内部実装について解説した記事が公開されています。