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)...
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)...
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)...
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などのパーミッションフラグを指定する方法はありませんが、要望はすでに挙げられているようです:...
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などをベースに実装されているようです。
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)
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の挙動が変更されています。...
2025/02/10〜2025/02/16の最新情報
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が使用されており かつ 対応する....