はじめに
Deno v2.3がリリースされました。
この記事では主な変更点などについて解説します。
v2.3のRCバージョンでの変更内容に関しては以下を参照いただければと思います:
また、Deno v2.3に関する公式ブログではすでに実装されていたnpmパッケージへのパッチ機能やvsockのサポートなどについても正式にアナウンスされています。
deno.lock
v5
deno.lock
のv5 ("version": "5"
)がデフォルトで有効化されました。
今後、deno.lock
が新しく作成される際はv5がデフォルトで有効化されます。
deno add
--npm
と--jsr
オプションがサポート
deno add
とdeno install
コマンドで--npm
と--jsr
オプションがサポートされています (#28666)
複数のJSRまたはnpmパッケージをまとめて追加する際の記述を若干簡略化できます:
# `jsr:@std/uuid`と`jsr:@std/ulid`を追加
$ deno add --jsr @std/uuid @std/ulid
# `npm:koa`を追加
$ deno add --npm koa
# `--jsr`オプションを指定した状態でnpmパッケージをインストールする場合、`npm:`を明示する必要があります
$ deno add --jsr @std/uuid @std/ulid npm:koa
deno check
引数なしでのdeno check
がサポート
deno check
を引数なしで実行した際に、deno check .
と同等の振る舞いをするよう改善されています (#28655)
tsconfig.json
の自動検出
deno.json
もしくはpackage.json
がある際は、tsconfig.json
が自動で検出されるよう改善されています (#29092)
deno.json
でcompilerOptions
が定義されている際はこの検出機能は無効化されます。
compilerOptions.erasableSyntaxOnly
のサポート
後述するTypeScript v5.8へのアップデートに合わせて、compilerOptions.erasableSyntaxOnly
がサポートされています (#29097)
deno compile
FFIとNode.jsネイティブアドオン (.node
)のサポート
deno compile
でFFIやNode.jsネイティブアドオンを利用したコードに対する実行可能ファイルの作成がサポートされました (#28934)
現状では、v2.1でdeno compile
に追加されたV8コードキャッシュへのサポートと同様に、/tmp
ディレクトリに共有ライブラリやNode.jsアドオンを書き込むことで実現されているようです。そのため、一部シナリオにおいてはうまく動作しないことも考えられるようです。この点に関しては、今後、改善が検討されているようです (#28918)
--exclude
がサポート
deno compile
コマンドに--exclude
オプションが追加されています (#28805)
--include
オプションとの併用が想定されており、実行可能ファイルに埋め込むディレクトリから特定のファイルを除外したい場合に使用します:
# `./data/test.txt`と`./data/dummy.txt`の埋め込みを無効化します
$ deno compile --include ./data --exclude ./data/test.txt --exclude ./data/dummy.txt main.js
Explicit Resource Managementのサポート
deno compile
によって生成された実行可能ファイルでExplicit Resource Managementが動作するよう改善されています (#29084)
deno fmt
Tagged template内のHTML/CSS/SQLのフォーマットがサポート
deno fmt
コマンドがtagged template内のHTMLやCSS, SQLなどをフォーマットしてくれるよう改善されています (#29014)
SQLのフォーマットについてはまだ実験的サポートの段階であるため、使用する場合は場合は--unstable-sql
の指定が必要です。
例えば、以下のようなコードがあったとします:
sql`
SELECT
*
FROM
users;
`;
deno fmt --unstable-sql
を実行すると、以下のようにフォーマットされます:
sql`
SELECT
*
FROM
users;
`;
dprint-plugin-typescript
のオプションの追加
dprint-plugin-typescriptで提供される以下のオプションがサポートされました (https://dprint.dev/plugins/typescript/config/)
quoteProps
useBraces
bracePosition
singleBodyPosition
nextControlFlowPosition
trailingCommas
operatorPosition
jsx.bracketPosition
jsx.forceNewLinesSurroundingContent
jsx.multiLineParens
typeLiteral.separatorKind
spaceAround
spaceSurroundingProperties
これらのオプションはdeno.json
のfmt
配下で設定可能です (#28946)
--permit-no-files
のサポート
deno fmt
で--permit-no-files
オプションがサポートされています。
このオプションを指定すると、フォーマット対象のファイルが一つも見つからない場合でもエラーが発生しなくなります。
deno lint
--permit-no-files
のサポート
deno lint
でも--permit-no-files
オプションがサポートされています。挙動はdeno fmt
の同名オプションと同様です。
deno coverage
deno test --coverage
の挙動が変更
deno test --coverage
コマンドがカバレッジレポートの生成も行うよう挙動が変更されています (今までは、別途、deno coverage
コマンドの実行が必要でした)
以前のバージョンまでの挙動に戻すには--coverage-raw-data-only
の指定が必要です。
DENO_COVERAGE_DIR
DENO_COVERAGE_DIR
環境変数が追加されています (#28291)
この環境変数を設定しておくと、deno test
コマンドが指定したディレクトリへカバレッジを保存します (deno test --coverage
と同様の挙動をします)
// deno-coverage-ignore
コメント
カバレッジの収集を制御するための特殊コメントがサポートされています (#26590)
コメント | 説明 |
---|---|
// deno-coverage-ignore | 次の行が集計対象から除外されます |
// deno-coverage-ignore-start と// deno-coverage-ignore-stop | それぞれのコメントで囲まれた範囲が集計対象から除外されます |
// deno-coverage-ignore-file | 宣言されたファイルは集計対象から除外されます |
deno lsp
deno jupyter
使用時の振る舞いの改善
各セル間で変数や型定義、依存モジュールの宣言などが共有されるよう挙動が改善されています (#28769)
Import Mapsでマッピングされたモジュールに対するAuto importの挙動が変更
Import Mapsでマッピングされたモジュールに対してAuto importを適用する際に、相対パス形式でimport
が挿入されるよう挙動が変更されています (#29098)
バグ修正
Deno 2.2.7から発生していた型チェックに関する問題や意図せぬ箇所に対して診断が報告される問題などが修正されています (#29061, #29019)
deno serve
DENO_SERVE_ADDRESS
DENO_SERVE_ADDRESS
環境変数がサポートされています。
deno serve
コマンドがデフォルトで利用するアドレスを設定できます:
# `127.0.0.1:3000`でHTTPサーバーを起動します
$ DENO_SERVE_ADDRESS=tcp:127.0.0.1:3000 deno serve main.js
unix:
から始まるアドレスを指定することでUNIXドメインソケットを、vsock:
から始まるアドレスを指定することでvsockを使用することも可能です。
--open
オプションのサポート
deno serve
コマンドに--open
オプションが追加されています (#25340)
このオプションを指定すると、Denoが自動でブラウザーを開いてくれます
deno clean
--except
がサポート
deno clean
コマンドで--except
オプションがサポートされています (#28424)
このオプションが指定された場合、グローバルキャッシュ (DENO_DIR
) を削除する際に、指定したエントリーポイントの実行において必要とされるファイルのみは削除せずに保持してくれます:
# `npm:koa`の実行に必要なファイルは維持する
$ deno clean --except npm:koa
# `jsr:@std/uuid`の実行に必要なファイルは維持する
$ deno clean --except jsr:@std/uuid
また、--dry-run
オプションも追加されており、deno clean
によって削除される予定のファイルを確認することができます:
$ deno clean --dry-run --except jsr:@std/uuid
deno info
Denoのバージョンが追加
deno info
コマンドの出力にDenoのバージョン (denoVersion
) が含まれるよう改善されました:
$ deno info --json | jq .denoVersion
"2.3.1"
Deno API
Deno.connect()
でAbortSignal
がサポート
signal
オプションにAbortSignal
を指定することで、コネクション接続時のタイムアウトの制御などができます (#27113)
Deno.build.standalone
Deno.build.standalone
が追加されています (#28750)
deno compile
によって生成された実行可能ファイルである場合のみtrue
が設定されます。
Deno.createHttpClient
でlocalAddress
オプションがサポート
このオプションを設定することで、fetch()
の利用時に使用されるローカルIPアドレスを選択できます (#28781)
Deno.webgpu
Deno.webgpu
が追加されています (#28192)
今のところdeviceStartCapture
とdeviceStopCapture
の2つのAPIが提供されています (利用には--unstable-webgpu
の指定が必要です)
CLI
--allow-env
の挙動の改善
セキュリティ改善
--deny-env
が指定された際はDeno.env.toObject()
の実行が拒否されるよう挙動が改善されています (#29079)
また、アクセスが許可されていない環境変数をprocess.env
から読んだ際に、undefined
を返すのではなくDeno.errors.NotCapable
をthrow
するよう挙動が変更されています (#28280)
NO_COLOR
/FORCE_COLOR
に関する挙動の変更
NO_COLOR
とFORCE_COLOR
環境変数を--allow-env
なしで読み込めるよう挙動が修正されています (#29090, #28280)
DENO_CACHE_DB_MODE
/DENO_KV_DB_MODE
環境変数がサポート
Web Cache APIとDeno KVにおいてSQLiteに関する挙動を制御するためのDENO_CACHE_DB_MODE
/DENO_KV_DB_MODE
環境変数が追加されています (#29026)
これらの環境変数にはdisk
またはmemory
のいずれかを指定可能です (デフォルトはdisk
)
memory
を指定した場合、インメモリデーターベース (:memory:
)の使用が強制されます。テストコードなどにおいて役立ちそうです。
DENO_EMIT_CACHE_MODE
環境変数
DENO_EMIT_CACHE_MODE
環境変数が追加されています (#29025)
サポートされている値はnormal
(デフォルト)もしくはdisable
のいずれかで、disable
を指定することで、トランスパイルされたコードのファイルシステムへのキャッシュを無効化できます。
--v8-flags=--single-threaded
--v8-flags=--single-threaded
がサポートされています (#29066)
これを指定すると、V8が単一のスレッドのみを使用してタスクを処理するよう挙動が変更されます。単純なスクリプトにおいての使用が想定されているようです。
Windows向けの実行可能ファイルへのコード署名
Windows向けのDenoの実行可能ファイルにコード署名が適用されています (#28963)
Denoの公式ブログによると、この変更によってWindows DefenderからDenoの実行可能ファイルが信頼されるよう改善されるとのことです。
Node.js互換性の改善
node:sqlite
DatabaseSync#loadExtension
が実装されています (#29050)
このAPIを利用するには--allow-ffi
の指定が必要です。
node:http
HTTPサーバーのパフォーマンス改善が実施されています。
ServerResponse#end
の不要な呼び出しの削減 (#29069)やAbortSignal
の取り扱いの改善 (#29071)が実施されています。
node:assert
assert.deepStrictEqual(0, -0)
が等価と判定されてしまう問題が修正されています (#29060)
node:fs
readFile()
においてsignal
オプションがサポートされています (#29028)
node:dns
ttl
オプションのサポートが追加されています (#27676)
TypeScript v5.8
Denoに搭載されたTypeScriptがv5.8.3へアップデートされています (#29041)
また、このアップデートに合わせて、前述したcompilerOptions.erasableSyntaxOnly
のサポートも導入されています。
OpenTelemetry
Span Links/Span EventsでAttributesがサポート
Span Links/Span Eventsに設定されたAttributesのバックエンドへの送信がサポートされています (#28584)