はじめに
Deno v2.4がリリースされました。
この記事では主な変更点などについて解説します。
OpenTelemetryサポートが安定化
DenoのOpenTelemetryサポートが安定化されました (#29822)
これによって--unstable-otel
の指定が不要化され、OTEL_DENO
のみの指定によってOpenTelemetryサポートを有効化できます。
--unstable-raw-imports
が追加 (ファイルのテキスト/バイト形式での読み込みがサポート)
--unstable-raw-imports
オプションがサポートされています (#29855, #29924)
このオプションを指定すると、Import Attributes (
type: "bytes"
またはtype: "text"
)によって文字列もしくはバイト (Uint8Array
) 形式でファイルを読み込むことができます:
import data from "./data.txt" with { type: "text" };
console.info(data); // => "foo"
この機能はDENO_UNSTABLE_RAW_IMPORTS
環境変数によって有効化することも可能です。
また、deno publish
コマンドではまだこの機能はサポートされていないようです (#29954)
deno bundle
について
Deno v2.3.6で、esbuild
をベースにdeno bundle
コマンドが再導入されています。
このリリースでは、このdeno bundle
コマンドでも--unstable-raw-imports
オプションのサポートが追加されています (#29908)
また、このdeno bundle
コマンドに関する公式ドキュメントも追加されています (denoland/docs#1866)
Deno v2.4に関する公式ブログによると、今後、このdeno bundle
の機能をAPI経由で利用できるようにすることが検討されているようです。
deno update
コマンドが追加
deno update
コマンドが追加されています (#29187)
このコマンドによって依存関係の更新を行うことができます (実質的にdeno outdated --update
のエイリアスとして機能します)
$ deno update --latest @ts-morph/ts-morph
deno deploy
コマンドについて
小さな変更ですが、Deno v2.3.6で追加されたdeno deploy
コマンドについて、デフォルトでヘルプが含まれるよう修正されています (#29863)
$ deno help | grep deploy
deploy Manage and publish applications with Deno Deploy
deno check
tsconfig.json
の検出がサポート
deno check
がdeno.json
またはpackage.json
と同一ディレクトリにあるtsconfig.json
を検出してくれるよう改善されています (#29843, #29925)
tsconfig.json
においては、compilerOptions
に加えて、以下のフィールドがサポートされます:
references
extends
files
include
exclude
--preload
/--import
オプションの追加
--preload
(--import
) オプションが追加されています (#29626)
このオプションはNode.jsの--import
と同様に、エントリーポイントを実行する前にこのオプションで指定したモジュールが読み込まれます:
$ deno run --preload=jsr:@std/dotenv@0.225.5/load --allow-env=DATABASE_URL --allow-read=.env main.js
Permissions
Deno.execPath()
が--allow-read
を要求しないよう挙動を変更
Deno.execPath()
を利用する際に--allow-read
の指定が不要化されました (#29620)
Deno.execPath()
が--allow-read=deno
の要求を促すことによって、ユーザーが--allow-read
を指定してしまいがちで、却ってセキュリティリスクを増してしまうとの判断からこの変更が実施されたようです。
--allow-net
--unstable-subdomain-wildcards
が安定化
Deno v2.3.4で実装された--unstable-subdomain-wildcards
が安定化されました (#29902)
今後は--unstable-subdomain-wildcards
を指定せずに--allow-net
でのサブドメインに対するワイルドカード指定が利用できます。
CIDR表記による指定がサポート
--allow-net
及び--deny-net
でCIDR表記による指定がサポートされています (#29704)
$ deno run --allow-net=127.0.0.0/24 main.js
--deny-import
がサポート
--deny-import
オプションがサポートされています (#29702)
--allow-import
によって許可されるデフォルトのホストを無効化したい場合などに利用できます:
$ deno run --deny-import=raw.githubusercontent.com main.js
Deno.permissions.query()
でname: "import"
がサポート
Deno.permissions.query()
で--allow-import
に対応したname: "import"
オプションがサポートされています (#29610)
const status = await Deno.permissions.query({
name: "import",
host: "cdn.jsdelivr.net",
});
deno fmt
.svg
/.xml
/.mustache
形式のサポート
deno fmt
でSVGやXML, Mustache形式のファイルのフォーマットをサポートしています (#29851)
Mustache形式のフォーマットを行いたい場合は、--unstable-component
オプションによって明示的に有効化する必要があります。
UTF-8 BOMが取り除かれるよう挙動が変更
deno fmt
がファイルのUTF-8 BOMを取り除くよう挙動が変更されています (#29796)
deno run
Import mapsによるエントリーポイントの解決
deno run
とdeno serve
において、エントリーポイントに対するImport mapsによる解決がサポートされています (#29928)
以下のようにdeno run
の引数としてdeno.json
で定義されたImport mapsのエントリーを指定することができます:
$ deno add npm:cowsay@1.6.0
$ cat deno.json | jq .imports.cowsay
"npm:cowsay@1.6.0"
$ deno run -ER cowsay hi
____
< hi >
----
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
エントリーポイントが.
から始まらない場合や絶対パス形式でない場合はこの振る舞いが適用されるため、もしDeno v2.4へのアップデート以降、deno run
が意図せぬ振る舞いをする場合は、引数に./
を付与すると回避できます。
deno serve
Deno.ServeDefaultExport
でonListen
コールバックがサポート
Deno.ServeDefaultExport
にonListen
プロパティーが追加されています (#29449)
挙動としてはDeno.serve()
のonListen
オプションと同様に、サーバーが待ち受けを開始したタイミングでコールバックが実行されます。
DENO_AUTO_SERVE
環境変数がサポート
DENO_AUTO_SERVE
環境変数が追加されています (#29852)
この環境変数が指定された場合、deno run
の引数で指定されたエントリーポイントがDeno.ServeDefaultExport
を満たす場合、deno serve
と同様の振る舞いをします。
deno coverage
deno run
で--coverage
がサポート
deno run
でのカバレッジの収集がサポートされています (#29329)
deno run
に--coverage
を指定するか、DENO_COVERAGE_DIR環境変数を指定することで有効化されます。
DenoでMochaなどを実行したい場合に便利ではないかと思いました。
テーブルがMarkdown形式で表示されるよう改善
deno coverage
が出力するテーブルがMarkdown形式で表示されるよう改善されています (#29533)
deno bench
テーブルがMarkdown形式で表示されるよう改善
deno bench
においてもdeno coverage
と同様に、テーブルがMarkdown形式で表示されるよう改善されています (#29532)
deno install
deno install -g
によるnpmパッケージのインストールが改善
deno install -g
によるnpmパッケージのインストール時に、package.json
のbin
エントリーの解決が試みられるよう改善されています (#29884)
具体的には、deno install -g npm:@google/gemini-cli
を実行すると、gemini
が利用できるように改善されています。
Deno API
Deno.Command
Deno.Command
でdetached
オプションがサポートされています (#29933)
挙動はchild_process.spawn()
(node:child_process
)における同名オプションと同様です。
Deno.addSignalListener()
WindowsにおいてSIGHUP
がサポートされています (#27880)
Node.js互換性の改善
--unstable-sloppy-imports
の安定化
--unstable-sloppy-imports
が安定化されています (#29780)
今後は--sloppy-imports
として利用できます。
--unstable-node-conditions
が安定化
--unstable-node-conditions
が安定化されました (#29848, #29885, #29628)
今後は--conditions
として利用可能です。また、DENO_CONDITIONS
環境変数による指定もサポートされています。
DENO_COMPAT
環境変数
DENO_COMPAT
環境変数が追加されています (#29889)
この環境変数が設定されると、以下のフラグがまとめて有効化されます:
--unstable-bare-node-builtins
--unstable-detect-cjs
--sloppy-imports
Buffer
/global
/setImmediate
/clearImmediate
がデフォルトでグローバル化
Node.jsに関する以下のAPIがすべてのコードにおいてデフォルトでグローバル化されました (#29416, #29877)
global
Buffer
setImmediate
clearImmediate
今までこれらのAPIはnpmパッケージ中のコードにおいてのみグローバル化されていましたが、npmパッケージとユーザーコードの実行環境における差異の軽減のため、ユーザーコードにおいてもこれらのAPIがグローバル化されました。
この変更に伴って、--unstable-node-globals
が非推奨化されています (#29887)
node:fs
glob()
とglobSync()
が実装されています (#28972)
macOS向けにlchmod()
とlchmodSync()
が実装されています (#29833)
また、lchown()
及びlutimes()
がnode:fs/promises
からも読み込めるよう改善されています (#29870)