2025/04/14〜2025/04/20の最新情報

Deno v2.2.10 Deno v2.2.10がリリースされています。 JavaScriptでのExplicit resource managementのサポート JavaScript向けにExplicit Resource Managementのサポートが追加されました (#28119) 今まで、Explicit Resource ManagementはTypeScriptでのみ利用可能でしたが、V8におけるサポートに伴い、JavaScriptでも利用できるよう改善されました。 // main.js class Disposable { [Symbol.dispose]() { console.info("Disposed!"); } } { using _ = new Disposable(); } // => "Disposed!" vsockのサポート 以前に紹介したvsockのサポートが正式に導入されました (#28725) Node.js互換性の改善 node:stream - 互換性の大きな改善 Node.jsにおけるnode:streamのソースコードをもとに、Denoにおける実装を自動生成する仕組み (ext/node/update_node_stream.ts) が導入されています (#28855) これによって、互換性の大きな改善が期待されそうです。 node:test - describe()/suite()のサポート describe()とsuite()が実装されています (#28847) import assert from "node:assert/strict"; import { describe, it } from "node:test"; describe("sum", () => { it("returns sum of numbers", () => { assert....

April 20, 2025

2025/04/07〜2025/04/13の最新情報

Deno v2.2.9 Deno v2.2.9がリリースされています。 Lockfile v5 Lockfile (deno.lock) の新しいバージョンであるv5が実装されています (#28647, #28842) グローバルキャッシュもしくは--node-modules-dir=auto使用時のプロセスの起動やdeno installの高速化が主な目的のようです。 下記PRにベンチマークが掲載されていますが、--node-modules-dir=auto使用時の起動が15倍近くまで高速化されるケースがあるようです: perf(npm): load npm resolution snapshot directly from lockfile (denoland/deno#28647) deno.lock内にnpmパッケージに関するメタ情報 (cpu, os, optionalDependencies, など…)をあらかじめ書き込んでおくことで、グローバルキャッシュへの読み込みを減らし、npmパッケージの解決をdeno.lockの情報のみで完結させることで高速化が図られているようです: Release 0.26.0 · denoland/deno_lockfile feat: put npm packument info in lockfile (denoland/deno_lockfile#42) 現状ではLockfile v5は実験的機能という扱いであり、--unstable-lockfile-v5オプションもしくはdeno.jsonで"unstable": ["lockfile-v5"]を指定することにより有効化が可能なようです (次のマイナーリリース以降、デフォルトで有効化される予定のようです) deno task - ~の展開やバッククォートによるコマンド実行のサポート deno taskでのスクリプト実行時に~の展開やバッククォートによるコマンド実行がサポートされています (#28832) # (1) `~`の展開 $ deno task --eval 'cat ~/.npmrc' # (2) バッククォートによるコマンドの実行 $ deno task --eval 'touch `date +%Y-%m-%d`....

April 13, 2025

2025/03/31〜2025/04/06の最新情報

Deno v2.2.7 Deno v2.2.7がリリースされています。 panic.deno.com Denoのプロセスがパニックした際に、panic.deno.comというサイトへのリンクが表示されるよう改善されています (#28470) エラーメッセージ中のリンクから詳細なスタックトレースを閲覧できるようです。 panic.deno.comのソースコードは以下にあります: https://github.com/denoland/panic OpenTelemetry V8 JS Engine Runtime metrics のサポート V8 JS Engine Runtime metricsのサポートが実施されています (#28592) OTEL_DENOまたはOTEL_DENO_METRICSによってMetricsが有効化されていれば、自動でヒープやGCなどに関する各指標が収集されます。 Node.js互換性の改善 npmライフサイクルスクリプト Denoにおいてnpmのライフサイクルスクリプトは、Node.jsのCLIフラグの有無などに応じてNode.jsまたはDenoのいずれかを使用して実行されます。 このリリースではnpmのライフサイクルスクリプトの実行において、より多くの場面でDenoが使用されるよう変更されています (#28715) これに合わせて、Denoでnpmライフサイクルスクリプトを実行する際に追加で以下のオプションが適用されるよう変更されています: --unstable-bare-node-builtins --unstable-detect-cjs --unstable-node-globals --unstable-sloppy-imports --unstable-unsafe-proto node:dns dns.lookup()の互換性が改善されています (#27936) node:netのconnect()においてホスト名を指定した場合、今まではDNSサーバーと解決したいホスト名の両方を--allow-netで許可する必要があったものの、この変更に合わせて解決したいホスト名の指定だけで動作するよう改善されているようです。 node:sqlite 空のBLOBがnullではなく空のUint8Arrayとして返却されるよう修正されています (#28674) node:process process.cpuUsage()でpreviousValue引数がサポートされています (#28550) deno lsp vscodeにおいて、deno lspでsettings.json (User settings)をフォーマットできるよう改善されています (#28706) その他 Error.isError Error.isErrorの型定義が追加されています (#28679) WebGPU 以下のAPIに関して変更が行われています (#28650) isFallbackAdapterプロパティーがGPUAdapterからGPUAdapterInfoへ移動 GPUSupportedLimits 各プロパティーがreadonlyに変更 maxBindGroupsPlusVertexBuffersとmaxInterStageShaderVariablesプロパティーが追加 Deno v2....

April 6, 2025

2025/03/24〜2025/03/30の最新情報

Deno v2.2.6 Deno v2.2.6がリリースされています。 静的解析可能なdynamic importの遅延読み込み (--unstable-lazy-dynamic-imports) --unstable-lazy-dynamic-importsが実装されました (#28593) 以下のスクリプトを実行する場合、通常であれば、まずはjsr:@std/text@1.0.12/unstable_dedentがダウンロードされてからスクリプトの実行が開始され、fooとbarが出力されます: // main.js console.info("foo"); await import("jsr:@std/text@1.0.12/unstable_dedent"); console.info("bar"); --unstable-lazy-dynamic-importsまたは"unstable": ["lazy-dynamic-imports"]を指定した場合、まずfooが出力されてからjsr:@std/text@1.0.12/unstable_dedentのダウンロードが開始され、その後にbarが出力されるよう挙動が変更されます。 Node.js互換性の改善 peerDependenciesの解決方法が変更 peerDependenciesに関する解決ロジックが変更されています。peerDependenciesで要求されるあるパッケージに関して、バージョンがマッチしない場合であっても、該当のパッケージが見つかった際はそれを使用するように修正されているようです (#28616) この挙動が適用された際はWarning The following peer dependency issues were foundという警告が表示されます。 将来的にオプションを導入して、任意でDeno v2.2.5までの挙動に戻せるようにすることも検討されているようです。 node_modules/.binが作成されないことがある問題の修正 deno outdated --updateでnpmパッケージを更新すると、そのパッケージがnode_modules/.bin からなくなってしまうことがある問題が修正されています (#28626) node:fs - mkdir()のバグ修正 mkdir()でmodeオプションに文字列を指定するとTypeErrorが発生する問題が修正されています (#28609) node:http - イベントの取り扱いの改善 HTTPリクエストがキャンセルされた際にServerResponseでcloseイベントが発火されるよう改善されています (#28601) また、IncomingMessageが保持するsocketで適切にcloseイベントが発火されていなかった問題も修正されています (#28582) パフォーマンス改善 deno installによるnpmパッケージのインストールが高速化されています (#28636) パッケージのメタ情報をファイルシステムからではなくインメモリのキャッシュから読み込むようにすることで高速化が図られているようです。 Web Crypto API ECDSAに関する改善 ECDSAを使用する際にSubtleCrypto#verify及びSubtleCrypto#signにおいて任意の曲線とハッシュの組み合わせが利用できるよう改善されています (#28574) deno_stdのリリース deno_stdのリリースが行われています (release-2025.03.25) @std/uuid@1.0.6 - UUIDv6の実験的サポート @std/uuid@1.0.6がリリースされています。 UUIDv6が実験的にサポートされています (#6415)...

March 30, 2025

2025/03/17〜2025/03/23の最新情報

Deno v2.2.5 Deno v2.2.5がリリースされています。 npmパッケージに対するパッチが実験的にサポート ⚠️Deno v2.3がリリースされるまでは、この機能の利用には"unstable": ["npm-patch"]の指定が必要なようです。今後、破壊的変更が加わる可能性もありそうです。 deno.jsonのpatchフィールドによるnpmパッケージへのパッチがサポートされています (#28512) この機能を利用するためにはnode_modulesが必要なため"nodeModulesDir": "manual"や"nodeModulesDir": "auto"などとの併用が必要なようです。 使い方はjsrパッケージにおけるパッチと同様で、patchフィールドにpackage.jsonを持つディレクトリへのパスを指定することで、該当のpackage.jsonの"name"フィールドの値に一致するパッケージがpatchフィールドで指定されたディレクトリの内容へ置き換えられます: { "nodeModulesDir": "auto", "patch": ["./path/to/patched-npm-package"], "unstable": ["npm-patch"] } このnpmパッケージのパッチ機能はnodeModulesDirの設定値によって振る舞いが若干変わるようです: nodeModulesDir 振る舞い "manual" パッチの内容を変更するたびにdeno installの実行が要求されるようです "auto" スクリプト実行のたびにnode_modulesが作り直されるため、起動時間が少し伸びるようです OpenTelemetry Span Eventsのサポート Span Eventsの基本的なサポートが実施されています (#28552) これによって、Span#addEventが利用できるようです。 意図せぬTypeErrorの修正 OpenTelemetryサポートを利用する際にTypeErrorが発生することがある問題が修正されています (#28538) Node.js互換性の改善 node:sqlite Denoのパーミッションシステムとの兼ね合いを考慮して、ATTACH DATABASEの使用が無効化されました (#28513) また、StatementSync#runから返却されるchangesフィールドに誤った値が設定される問題が修正されています (#28506) node:util getCallSites()が実装されています (#28546) その他 Deno本体のV8が135へアップデートされています (#28562) また、Error.stackTraceLimitの型定義が追加されています (#28539)...

March 23, 2025

2025/03/10〜2025/03/16の最新情報

Deno v2.2.4 Deno v2.2.4がリリースされています。 OpenTelemetry Context propagationのサポート Context propagationがサポートされています (#28460) OTEL_PROPAGATORS環境変数にカンマ区切りでPropagatorを設定可能です (デフォルト値はtracecontext,baggage) 現時点ではtracecontextとbaggageのみがサポートされているようです。 その他の改善 node:httpのrequest()が計装されています (#28463) また、fetch()で発生したエラーが適切に取り扱われるよう改善されています (#28480) deno check - package.jsonに基づいた型定義の解決に関する改善 package.jsonに関する以下のサポートが追加されています: "exports"フィールドにおけるtypes@{selector}形式 (#28450) typesVersionsフィールド (#28468) deno install プライベートなnpmパッケージに関する改善 ワークスペースのメンバーにプライベートなnpmパッケージが指定されている場合に、deno installが失敗しないように改善されています (#28401) file:のサポート package.jsonのdependenciesにおいてfile:形式での依存の指定がサポートされています (#28396) deno lint - プラグインシステムに関するバグの修正 プラグインシステムに関する以下のバグが修正されています: !==が!=として解釈されていた問題が修正されています (#28403) ({ a = b } = {}のようなコードがDeno.lint.ObjectPatternとDeno.lint.AssignmentPatternの組み合わせで表現されるよう改善されています (#28402) Node.js互換性の改善 CommonJSサポートの改善 CommonJSモジュールからESM形式のモジュールの再exportがサポートされています (#28379) module.exports = require("./index.mjs"); また、deno compileでrequire(esm)が動いてなかった問題も修正されているようです。 node:http STATUS_CODESがNode.jsと同様の形式に修正されています (#28489) その他 FORCE_COLOR環境変数のサポート FORCE_COLOR環境変数がサポートされています (#28490)...

March 16, 2025

2025/03/03〜2025/03/09の最新情報

Deno v2.2.3 Deno v2.2.3がリリースされています。 deno lint プラグインシステムにおけるセレクターの改善 セレクターにおいて、以下のように特定のプロパティを保持するノードのみの問い合わせがサポートされています (#28324) const plugin: Deno.lint.Plugin = { name: "sample-plugin", rules: { "some-rule": { create: (ctx) => { const visitor = { ".callee": (node) => { // `.callee`を保持するNodeのみを問い合わせる }, }; return visitor; }, }, }, }; また、セレクターの構文における:has()/:is()/:where()/:not()や属性に対する正規表現によるマッチング (例: MemberExpression[property.name=/Object/])がサポートされています (#28348, #28340) これらの機能の追加に合わせて、公式ドキュメントも改善されています (https://github.com/denoland/docs/pull/1508) プラグイン実行時のパーミッションの取り扱いの変更 プラグインの実行時に--no-promptが有効化されるよう挙動が変更されています (#28305) deno lspとdeno lintでJavaScriptプラグインを実行する際の方式を統一することを目的とした変更のようです。 現状、deno lintにおいては--allow-readなどのパーミッションフラグを指定する方法はありませんが、要望はすでに挙げられているようです:...

March 9, 2025

2025/02/24〜2025/03/02の最新情報

Deno v2.2.2 Deno v2.2.2がリリースされています。 deno check - compilerOptions.jsxImportSourceに関する修正 compilerOptions.jsxImportSourceが未定義の場合、v2.2から型チェックが失敗してしまう問題が修正されています (#28228) deno lint - プラグインシステムに関するバグ修正 :exitコールバックの実行タイミングの修正 JavaScriptプラグインにおいて:exitコールバックが呼ばれるタイミングが修正されます (#28229) 変更前 (v2.2.1): 対象ノードのすべての兄弟ノードを訪問し終えたあとに:exitコールバックが呼ばれていました 変更後 (v2.2.2): 対象ノードのすべての子孫ノードを訪問し終えて、上のノードを再度訪れるタイミングで:exitコールバックが呼ばれます Deno.lint.SourceCode.textにおけるTypeErrorの修正 JavaScriptプラグインのテスト時(deno test)にDeno.lint.SourceCode.textを参照すると、TypeErrorが発生する問題が修正されています (#28278) deno fmt - --extオプションでのNunjucksとVentoのサポート deno fmtの--extオプションでnjkとvtoの指定がサポートされています (#28262) パッチの絶対パス指定がサポート deno.jsonのpatchで絶対パスの指定がサポートされています (#28279) node:crypto: createDecipheriv()の修正 ブロック長が不正な場合、Decipher#finalがパニックする問題が修正されています (#28215) deno install - .cssなどの取り扱いの改善 パッケージが.cssなどのファイルへのimportを含んでいると、deno installが失敗する問題が修正されています (#28234) @sigma/deno-compile-extra @sigma/deno-compile-extraというJSRパッケージが公開されています。deno compileコマンドによって生成された実行可能ファイルは、deno runによってスクリプトを実行した場合と挙動が異なる場合があり、このパッケージはそういったギャップを吸収してくれることを目的としているようです: JSRパッケージ: @sigma/deno-compile-extra リポジトリ: https://github.com/sigmaSd/deno-compile-extra bxnch GitHubリポジトリに含まれるdeno bench --jsonによって生成されたJSONファイルを解析して、画像を生成してくれるサービスが公開されています: bxnch Deno Deployやfresh_chartsなどをベースに実装されているようです。

March 2, 2025

2025/02/17〜2025/02/23の最新情報

Deno v2.2.0 Deno v2.2.0がリリースされています。 以下に内容をまとめたため、よろしければこちらを参照いただければと思います。 Deno v2.2 Deno v2.2.1 Deno v2.2.1がリリースされています。 deno check - @types/*へのフォールバックがサポート npmパッケージが型定義を提供していない場合、@types/*から型定義を読み込むようフォールバックを行う対応が行われています (#28185) 注意点として、このフォールバック機能は該当の@types/*パッケージがプロジェクトの依存に含まれている場合のみ有効のようです。(#28185に画像を使った説明があり、こちらの説明がわかりやすいと思います) まだマージはされていないものの、deno lspに@types/*の導入を促すQuickfixの実装が進められているようです。(#28216) deno check - Deno本体に組み込まれたlibファイルに関する型チェックの安定性の改善 Deno v2.2.0のリリースに伴い、deno checkにおいてDeno本体に組み込まれたTypeScriptのlibファイルに関する型チェックがやや不安定になっていたようで、今回のv2.2.1のリリースで安定化するための対応が行われています (#28202) deno publish - jsx/tsxファイルのサポート deno publishコマンドでjsx/tsxファイルを含むパッケージの公開がサポートされています (#28188) パッケージを公開する際に、deno.jsonの設定を元にしてjsx/tsxファイルに以下のディレクティブを自動で書き込んでくれるようです @jsxRuntime @jsxImportSource @jsxImportSourceTypes @jsxFactory @jsxFragmentFactory node:sqlite StatementSync#setAllowBareNamedParametersが実装されています (#28197) また、StatementSync#setReadBigInts(true)が呼ばれていない状態で大きな整数値を読み込んだ際に、意図せず値が丸められてしまうことがある問題が修正されています (#28193) ワークスペース使用時のJSX関連の設定の改善 ワークスペースの使用時にJSX関連の設定が適切なdeno.jsonから解決されるよう改善されています。(#28186)

February 23, 2025

Deno v2.2

Deno v2.2がリリースされました。 この記事では主な変更点などについて解説します。 deno lint JavaScriptプラグインシステムの導入 deno lintのJavaScriptプラグインシステムが正式に導入されました。 プラグインを適用する際は、deno.jsonのlint.pluginsで有効化できます。 注意点として、JavaScriptプラグインを有効化している際はdeno lintのインクリメンタルキャッシュの仕組みが無効化されるようです (#28026) インクリメンタルキャッシュについては今後の対応が検討されているようです。 コミュニティーからいくつかプラグインがJSRに公開されています: https://github.com/NfNitLoop/deno-lints https://github.com/uki00a/deno-lint-plugin-extra-rules React/JSX関連のルールの追加 deno_lintで実装されていたReactやJSX関連のlintルールがDeno本体で有効化されました。 $ deno lint --rules --json | jq '.rules | map(select(.tags | (contains(["jsx"]) or contains(["react"])))) | .[].code' "jsx-boolean-value" "jsx-button-has-type" "jsx-curly-braces" "jsx-key" "jsx-no-children-prop" "jsx-no-comment-text-nodes" "jsx-no-duplicate-props" "jsx-no-unescaped-entities" "jsx-no-useless-fragment" "jsx-props-no-spread-multi" "jsx-void-dom-elements-no-children" "react-no-danger" "react-no-danger-with-children" "react-rules-of-hooks" 新しく追加されたこれらのルールにはjsxもしくはreactタグが付与されています。React関連のルールはrecommendedタグがついていなさそうなので、必要に応じてdeno.jsonのlint.rules.tagsなどで有効化するとよさそうです: { "lint": { "rules": { "tags": ["fresh", "react", "recommended"] } } } --rulesの挙動の変更 deno lint --rulesの挙動が変更されています。...

February 23, 2025