Deno v2.2のリリースについて Deno v2.2は先週にリリースが計画されていたようですが、おそらくは後述するV8 13.4へのアップデートなどの関連で、リリースが見送られたようです: https://x.com/rough__sea/status/1889406135578534314 V8のアップグレードとJavaScriptファイルでのExplicit Resource Managementのサポートについて 直近でDeno内部のV8を13.4へアップデートするPRがマージされています: feat: Upgrade V8 to 13.4 #28080 おそらく、Deno v2.2でリリースされるのではないかと思います。 この対応に合わせて、JavaScriptファイルでExplicit Resource Managementを利用できるようにする対応が進められています (今まで、Explicit Resource ManagementはTypeScriptでのみサポートされていました) feat: enable explicit resource management for JavaScript #28119 deno fmtでのTOMLのサポートについて deno fmtコマンドにTOMLファイルのフォーマットをサポートするためのPRが作成されています: feat(fmt): add TOML formatter #28104 dprint-plugin-tomlをベースに実装されているようです。 2.2.0のマイルストーンには含まれていないため、この機能のリリースは少し先になるかもしれません。 deno transpile コマンドの追加に関する提案 deno transpileコマンドをDenoに追加する提案が行われています: Add deno transpile subcommand #28069 まだ正式に実装されるかどうかはわかりませんが、issueにそれなりにリアクションがついていそうなので紹介します。 機能としては、.tsファイルを.jsファイルへトランスパイルしつつ.d.tsも生成することなどが想定されているようです。Denoでnpmパッケージを公開したい場合などに便利そうではないかと思いました。 Deno v2.1.10 Deno v2.1.10がリリースされています。 deno compile - --includeオプションがdeno compileで生成された実行可能ファイルを検出するよう改善 --includeオプションで指定されたディレクトリにすでにdeno compileで生成された実行可能ファイルが存在する場合に、それが新しく生成される実行可能ファイルに含まれてしまわないよう改善されています (#27877)...
2025/02/03〜2025/02/09の最新情報
Deno v2.2のリリースタイミングと直近の変更について Deno公式のXアカウントで、Deno v2.2のリリースが来週に行われる予定であることが発表されています: https://x.com/deno_land/status/1887943247697428819 直近でDeno v2.2に導入予定と思われる機能がいくつかマージされているため、紹介します。 deno lintのJavaScriptプラグインサポート 昨年の末頃から開発が進められていたdeno lintのJavaScriptプラグインがmainブランチへマージされました。 feat(lint): add JavaScript plugin support #27203 まだリリースはされていませんが、canaryバージョンであれば試すことができます。 先程のDeno公式のXアカウントの投稿にも動画が掲載されていますが、プラグインを利用する際は、Deno.lint.Pluginを実装したオブジェクトをdefault exportしたファイルもしくはJSR/npmパッケージをdeno.jsonのlint.pluginsで指定することで有効化することができます。 { "lint": { "plugins": [ // ローカルプラグイン "./lint-plugin.ts", // jsrで公開されているプラグインも指定できます "jsr:@uki00a/deno-lint-plugin-extra-rules@0.1.0" ] } } lint.pluginsでプラグインを設定しておくと、deno lintの実行時に自動的に対象のプラグインも適用されます: $ deno lint main.js error[deno-lint-plugin-extra-rules/no-env-to-object]: `Deno.env.toObject()` requires full `--allow-env` permission. --> /home/uki00a/ghq/github.com/uki00a/deno-sandbox/main.js:3:13 | 3 | const env = Deno.env.toObject(); | ^^^^^^^^^^^^^^^^^ = hint: Recommended to use `Deno....
2025/01/27〜2025/02/02の最新情報
Deno v2.1.8/v2.1.9 Deno v2.1.8とv2.1.9がリリースされています。 OpenTelemetry HTTPSエンドポイントのサポート HTTPSエンドポイントへのSignalsの送信がサポートされています (#27743) 以下の環境変数によって設定が可能です: OTEL_EXPORTER_OTLP_CERTIFICATE OTEL_EXPORTER_OTLP_CLIENT_KEY OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE deno check ワークスペースの各メンバーでのcompilerOptionsのサポート ワークスペースの各メンバーのdeno.jsonにおけるcompilerOptionsの定義がサポートされています (#27785) 今まではワークスペースのルートでしかcompilerOptionsを定義できませんでしたが、今後は各メンバーごとに柔軟に型チェックなどに関する振る舞いを設定できそうです。 npmパッケージに含まれる.tsファイルの取り扱いの改善 型チェックにおけるnpmパッケージ中の.tsファイルの取り扱いが改善されています (#27853) deno checkの実行時に限定して、型チェック時に.d.tsが見つからない際は追加で.tsファイルも探索してくれるようです。 deno install -gが指定され かつ deno.jsonが検出された際の警告について deno install -gの実行時にdeno.jsonが検出され かつ--configオプションが指定されていない場合に以下の警告が表示されるよう改善されています (#27745) Warning discovered config file will be ignored in the installed command. Use the --config flag if you wish to include it. deno lsp Ambient modulesに関する修正 Ambient modulesに対するimportでエラーが発生しないように修正されています (#27855) SvelteKitなどを使用したプロジェクトを想定した修正のようです。 deno publish .d.tsに関する改善 jsrパッケージのモジュール内でsloppy importsが使用されており かつ 対応する....
2025/01/20〜2025/01/26の最新情報
Deno v2.1.7 Deno v2.1.7がリリースされています。 v2.1.6で発生していたWorkerに関する問題の修正 v2.1.6においてWorkerの使用時にDenoがパニックすることがあった問題が修正されています (#27741) deno install -g --configに関する挙動の変更 deno install -gで--configが指定された際に、指定された設定ファイルに含まれるimportMapが無視されるよう挙動が変更されています (#27744) deno install -gで--import-mapと--configが併用された際に、意図せぬ動作をすることの防止が目的のようです。 Node.js互換性の改善 node:crypto Decipherでaes-256-gcmまたはaes-128-gcmを使用している際に、finalメソッドにおいて認証タグのチェックが行われるように改善されています (#27733) node:fs/promises FileHandleにdatasync()とsync()メソッドが追加されています (#27677) node:http ClientRequestが保持するsocketにおいてエラーが発生した際に、そのClientRequestオブジェクトでerrorイベントが発火されるよう改善されています (#27678) node:tls connect()でECONNRESETエラーが起きることのある問題が修正されています (#27707) deno_stdのリリース deno_stdのリリースが行われています (release-2025.01.22) @std/async@1.0.10 @std/async@1.0.10がリリースされています。 @std/async/unstable-wait-forが追加 waitFor (@std/async/unstable-wait-for)という新しい実験的APIが追加されています。predicateが満たされるまで待機してくれます。 import { waitFor } from "jsr:@std/async@1.0.10/unstable-wait-for"; // ... await waitFor( () => task.isFinished(), // predicate 5_000, // timeout ); @std/fs@1.0.10 @std/fs@1.0.10がリリースされています。 Node.js向けサポートの改善 @std/fsのNode.jsサポート向けに、以下のモジュールが追加されています: @std/fs/unstable-symlink (symlink()とsymlinkSync()が提供されます) @std/fs/unstable-chmod (chmod()とchmodSync()が提供されます) @std/fs/unstable-read-dir @std/assert@1....
2025/01/13〜2025/01/19の最新情報
Deno v2.1.6 Deno v2.1.6がリリースされています。 deno check compilerOptions.typesに関する修正 compilerOptions.typesで指定されたモジュールの解決が適切に行われないことがある問題が修正されています (#27686) 未サポートのメディアタイプに関する修正 Denoが認識しないメディアタイプのモジュールを常に.jsとして扱っていた問題が修正されています (#27631) Ambient modulesによって任意の拡張子のモジュール(例: *.svg)に型を適用しているパッケージに対して型チェックがうまく動作しない問題があったようです。 vite/client向けの改善 /// <reference types="..." />ディレクティブにおいて、typesにnpm:から始まらない名前が指定された場合に、うまくパッケージを解決できない問題が修正されています (#27690) 主にvite/clientを意識した対応のようです。 また、npmパッケージからimport.metaの型を拡張できない問題が修正されています。 deno lsp vscode_denoにおいて未保存のファイルをフォーマットできない問題が修正されています (#27637) deno compile - Windows向けのバグ修正 Windows向けに生成したバイナリーでerror: Uncaught SyntaxErrorエラーが発生することがある問題が修正されています (#27654) DENO_DIRがコンパイル対象のコードと別のドライブにある場合にこのエラーが発生していたようです。 Node.js互換性の改善 node:net npm-check-updatesパッケージやplaywright installコマンドを動かすためのワークアラウンドが導入されています。 node:fs/promises FileHandleに以下のメソッドが実装されています: writev chown utimes node:child_process spawn()などのAPIでoptions.envが指定された際に、指定された環境変数のみが子プロセスに設定されるよう挙動が修正されています (今まではoptions.envで指定されたものに加え、親プロセスに元々設定されていた環境変数もすべて引き継がれていたようです) esm.sh v136 esm.sh v136がリリースされています。 jsrパッケージの読み込みが正式にサポート 実験的機能であったjsrパッケージのサポートが正式に公開されています: import { pick } from "https://esm.sh/jsr/@std/collections@1.0.9/pick"; pkg.pr.newのサポート pkg.pr.newからのパッケージの読み込みがサポートされています。esm.sh/prから読み込むことができるようです。 pnpmへの依存の削除 pnpmへの内部的な依存が削除され、Goベースの独自のパッケージマネージャーが導入されているようです。これに伴いNode.jsへの依存も不要になる模様です。esm.shをセルフホストしたい場合に影響がありそうです。 unenvの導入 unenvが内部的に導入され、これに伴い以下のような読み込みがサポートされたようです: import { join } from "https://esm....
2025/01/06〜2025/01/12の最新情報
Deno v2.1.5 Deno v2.1.5がリリースされています。 QUICサポート QUICのサポートがリリースされました。 feat(unstable): Implement QUIC #21942 Deno.connectQuic()などのAPIが実装されています (利用するには--unstable-netの指定が必要です) deno lint - JavaScriptプラグイン向けの内部的な基盤の追加 deno lintにおけるプラグインシステムの内部APIであるDeno[Deno.internal].runLintPluginやセレクターの仕組みなどの実装がリリースされています。 deno.jsonにおけるlint.pluginsオプションの実装はリリースされていないため、まだ一般的な利用はできない状態です。 OpenTelemetry @deno/otelの不要化 OpenTelemetryサポートを利用するに当たり、@deno/otelの使用が不要化されています。 OTEL_DENO=trueと--unstable-otelさえ指定されていれば@opentelemetry/apiとの連携ができます。DenoがあらかじめglobalThis[Symbol.for("opentelemetry.js.api.1")]にTracerProviderなどを登録してくれるため、@opentelemetry/apiとの連携が自動で行われるようです。 まだ、Denoの公式ドキュメントにもOpenTelemetryサポートに関するドキュメントが追加されています (Add docs for OpenTelemetry in Deno (denoland/docs#1305)) feat(unstable): add OTEL MeterProvider #27240 feat(unstable): replace SpanExporter with TracerProvider #27473 feat(unstable): no config npm:@opentelemetry/api integration #27541 WASMモジュール jsrパッケージにおけるサポートの改善 jsrパッケージ内に含まれる.wasmモジュールが読み込めるよう改善されています。 fix(jsr): Wasm imports fail to load #27594 deno check モジュールが見つからなかった際のエラー形式の変更 モジュールが見つからなかった際のエラーメッセージがTypeScriptのdiagnosticsとして報告されるよう改善が行われています (#27533)...
2024/12/30〜2025/01/05の最新情報
直近のDenoの変更について まだマージされているわけではないのですが、いくつか面白そうなPRが作成されているため紹介します。 Geometry Interfaces Module Level 1 の実装について まだDraft状態ではありますが、DenoにGeometry Interfaces Module Level 1を実装するPRが作成されています: feat(ext/geometry): Geometry Interfaces Module Level 1 #27527 DOMPointやDOMQuad, DOMMatrixなどのAPIが実装されているようです。 Geometry interfaces OpenTelemetryサポートにおける@deno/otelの不要化について 今まで、DenoのOpenTelemetryサポートを利用してシグナルを送信するためには、Deno公式から公開されている@deno/otelパッケージの使用が想定されていました。 DenoのOpenTelemetryサポートを利用するに当たって、この@deno/otelの使用を不要とする対応が進められているようです: feat(unstable): no config npm:@opentelemetry/api integration #27541 このPRの対応が入ると、セットアップの手間が若干軽減されそうです。 deno_stdの今後の安定化に関する計画 deno_stdにおけるパッケージやunstableモジュールについての今後の計画が公開されています: Next STD Stabilization Iteration Plan #6299 @std/iniパッケージや@std/uuidにおけるUUIDv7サポートの安定化などが検討されているようです。 lint.deno.landからdocs.deno.comへの移行について 以前に紹介したdeno lintのLintルールに関するドキュメントのlint.deno.landからdocs.deno.comへの移行が正式に実施されたようです: chore: replace lint.deno.land with /lint/ page #1289 今後はhttps://docs.deno.com/lint/からドキュメントを参照することが推奨されそうです。
2024/12/23〜2024/12/29の最新情報
permission sets in deno.json まだDraft状態ですが、deno.jsonでパーミッションを管理する機能を追加するPRが作成されています: permission sets in deno.json #27483 このPRではdeno.jsonにpermissionSetsという項目が追加されており、複数のパーミッションセットを定義できるようです: { "permissionSets": { "default": { "read": ["data"], "net": ["http://localhost:3000/api"] }, "build": { "read": ["data"], "write": ["dist"] } } } Denoを実行する際に--permission-setオプションを指定することで、deno.jsonで定義されたパーミッションセットを適用する想定のようです: # デフォルトでは`default`という名前がついたパーミッションセットが適用されるようです $ deno run --permission-set main.ts # buildという名前がついたパーミッションセットを有効化します $ deno run --permission-set=build scripts/build.ts deno lint - JavaScriptプラグインでのセレクターのサポートについて deno lintのJavaScriptプラグインにセレクターの仕組みを実装するPRがマージされています: feat(unstable): support selectors in JS lint plugins #27452 サポートされている構文については上記のPRに詳しく記載されていますが、以下のように柔軟にノードの問い合わせを行うことができるようです:...
2024/12/16〜2024/12/22の最新情報
QUICとWebTransport APIのサポートについて QUICのサポート DenoのmainブランチにQUICを実装するPRがマージされています。Deno v2.2あたりでリリースされる可能性がありそうです: feat(unstable): Implement QUIC #21942 quinnをベースに以下のAPIが実装されており、利用には--unstable-netの指定が必要なようです: Deno.connectQuic Deno.listenQuic Deno.QuicBidirectionalStream (Deno.QuicConn#createBidirectionalStreamで作成できます) Deno.QuicConn (Deno.connectQuicなどから返却されます) Deno.QuicListener (Deno.listenQuicから返却されます) Deno.QuicReceiveStream (Deno.QuicConn.incomingUnidirectionalStreamsで取得できます) Deno.QuicSendStream (Deno.QuicConn#createUnidirectionalStreamで作成できます) WebTransport APIのサポート まだマージはされていませんが、先程のQUICサポートをベースにWebTransport APIを実装するPRも作成されています: feat(unstable): WebTransport #27431 このPRではWebTransport APIに加えてDeno.upgradeWebTransportというWebTransportサーバーを立てるための独自のAPIも実装されているようです。引数にDeno.QuicConnを渡すことで、WebTransportオブジェクトを返却してくれます。 WebTransport APIについてもQUICと同様に、利用するには--unstable-netの指定が必要なようです。 deno lint - JavaScriptプラグインを実行するための内部APIが追加 以前に紹介したdeno lintでのプラグインサポートの件についてですが、ひとまずDeno[Deno.internal].runLintPluginという内部的なAPIの実装(今のところdeno testコマンドの実行時以外では参照できないよう制御されています)がmainブランチへマージされています。 feat(unstable): add JS linting plugin infrastructure #27416 このPRではまだCLIオプションなどは実装されていないためまだ一般的に利用できる状況ではなさそうですが、JavaScriptプラグインに関するテストコードが追加されており、今後、プラグインを書く際などの参考になりそうです。 deno_stdのリリース deno_stdのリリースが行われています: release-2024.12.18 release-2024.12.20 @std/cli@1.0.9 @std/cli@1.0.9がリリースされています。 promptMultipleSelectが追加 以前に追加されたpromptSelect()に続いて、promptMultipleSelect() (@std/cli/unstable-prompt-multiple-select)というAPIが追加されています。promptMultipleSelect()は選択肢から複数の値を選択できます。 @std/fs@1.0.7 & @std/fs@1.0.8 @std/fs@1....
2024/12/09〜2024/12/15の最新情報
Deno v2.1.4 Deno v2.1.4がリリースされています。 Node.js互換性の改善 deno install --entrypointの挙動の改善と--unstable-npm-lazy-cachingの導入 今までDenoはnpmパッケージに依存したスクリプトを実行する際に、package.jsonで指定されたパッケージをすべてインストールしていました。 このリリースではdeno install --entrypointの挙動が変更され、指定したエントリポイントから依存されているnpmパッケージのみがキャッシュされるよう改善されています。 他のコマンドでもdeno install --entrypointと同様の振る舞いをさせたい場合は、--unstable-npm-lazy-cachingまたはDENO_UNSTABLE_NPM_LAZY_CACHINGを指定することで有効化できます。 feat(unstable): support caching npm dependencies only as they’re needed #27300 パスに@が含まれるモジュールを提供するパッケージの取り扱いの改善 npmパッケージからファイル名に@が含まれるモジュールをimportしようとするとエラーが発生する問題が修正されています。 fix: do not error when specifier subpath has an @ symbol #27290 node:fs readFile()でファイルディスクリプターの指定がサポートされています。 fix(ext/node): accept file descriptor in fs.readFile(Sync) #27252 node:v8 serialize()とdeserialize()でFloat16Arrayがサポートされています。 fix(ext/node): handle Float16Array in node:v8 module #27285 _http_common @mswjs/interceptorsなどのNode....