2025/05/19〜2025/05/25の最新情報

Reports of Deno’s Demise Have Been Greatly Exaggerated Denoの公式ブログで以下のような記事が公開されています: Reports of Deno’s Demise Have Been Greatly Exaggerated この記事では、先週の Fresh v2 に関する紹介に続けて、現在のDeno DeployやDeno KVにおいての直近での取り組みや今後について紹介されています。具体的には以下のような取り組みなどが進められているようです: 特定のリージョンへのアプリケーションの固定のサポート 自身のクラウド内でのアプリケーション実行のサポート (推測ではありますが、Deno Deploy NextGenのことを指している可能性が高いのではないかと思います) Deno Deployから関係データベースの利用をよりシンプルにするための取り組み Cloudflare Durable Objectsに影響を受けた状態管理のための仕組み これらについては、今後、詳細が共有される計画のようです。 deno deployサブコマンドについて まだマージはされていませんが、Deno本体にdeno deployサブコマンドを実装するPRが作成されています: feat: deploy subcommand (denoland/deno#29407) 内部的には@deno/deployパッケージを実行している模様で、プロジェクト内の各ファイルをDeno Deployにアップロードする機能などが提供されているようです。 先程紹介したDeno公式の Reports of Deno’s Demise Have Been Greatly Exaggerated の記事において、Denoは単純なJavaScriptランタイムではなくプラットフォームであることを意識されているようで、この変更もその一環ではないかと思われます。 参考 1461910 jsr:@deno/deploy@0.0.2 Deno SvelteKit adapter (@deno/svelte-adapter) Deno公式からSvelteKit向けのアダプター (@deno/svelte-adapter) が公開されています:...

May 25, 2025

2025/05/12〜2025/05/18の最新情報

Deno v2.3.2 & v2.3.3 Deno v2.3.2とDeno v2.3.3がリリースされています。 https://github.com/denoland/deno/blob/395878c5fb72d87a44f7c88ce9f391acc31feab3/Releases.md#233--20250516 deno lint deno lintプラグインでコメントの取得がサポートされています (#29189) SourceCodeクラス (RuleContext.sourceCodeからアクセス可能) にgetAllComments()/getCommentsBefore()/getCommentsAfter()/getCommentsInside()メソッドが追加されています。 また、Programにもcommentsプロパティーが追加されています。 deno coverage deno coverage --htmlで生成されるHTMLレポートで、OS設定に基づいてlightとdarkテーマが切り替わるように改善されています (#29267) deno jupyter - 複数カーネルの管理がサポート deno jupyterコマンドで複数のカーネルをインストール・管理するための機能が導入されています (#29249) --nameオプション deno jupyterコマンドに--nameオプションが追加されています。 --installオプションとともに--nameオプションが指定されると、カーネルがインストールされる際のディレクトリ名を変更できます (デフォルトはLinuxだと~/.local/share/jupyter/kernels/denoで、--name deno-canaryを指定すると~/.local/share/jupyter/kernels/deno-canaryにインストールされます) --installが省略された場合、--nameオプションによって指定された名前でkernel.jsonがインストールされているか確認できます。 deno jupyter --install --display <name> deno jupyter --installに--displayオプションが追加されています。 このオプションを指定することで、kernel.jsonのdisplay_nameをカスタマイズできます (デフォルトはDeno) deno jupyter --install --force deno jupyter --installに--forceオプションが追加されています。 このオプションを指定すると、カーネルがすでにインストール済みである際も強制的にカーネルを再インストールしてくれます。 deno check Ambient moduleに関する挙動の改善 Ambient moduleによって型が定義されたパスに対して発生する型エラーが無視されるよう挙動が変更されています (#29135) 例えば、Ambient moduleによって*.svgに対する型定義が定義されていたら、*.svgに対するimportによって型エラーが起きぬように改善されています。 deno.lock deno.lockの更新タイミングが型チェックの実行前から実行後へ変更されています (#29265) 型チェックの実行時にはじめて@types/nodeが必要となるケースがあるため挙動が変更されたようです。...

May 18, 2025

2025/05/05〜2025/05/11の最新情報

Lume v3 Lume v3がリリースされています。 https://lume.land/blog/posts/lume-3/ https://github.com/lumeland/lume/releases/tag/v3.0.0 いくつか破壊的変更が実施されており、マイグレーションガイドが公開されています。 Site#addの追加とプラグインの振る舞いの変更 Site#copyにおいてコピー対象のファイルが Processor で処理されない問題を改善するため、Site#addが追加されています。このAPIの追加に合わせて、Site#loadAssetsとSite#copyRemainingFilesが削除されています (Site#copyもv3.0.0で削除されていましたが、v3.0.1で改めて追加され直されています) Site#addの追加に合わせてプラグインの振る舞いが変更されており、各プラグイン自身はファイルの読み込みは行わず、Site#addで明示的に追加されたファイルのみを処理するよう挙動が変更されているようです。 また、一部のプラグインにおいて、正しい順番でプラグインを登録しないと動作しないよう挙動が変更されています。今まで、プラグインの登録順に関わらず各プラグインが動作するよう設計されていましたが、複数のプラグイン間に依存関係がある場合、この挙動は混乱を招いてしまうということで振る舞いが見直されたようです。この変更に関する移行を補助するため、deno lint向けのプラグインが追加されています (lume/lint.ts) jsxプラグインの刷新とjsx_preact/liquidプラグインの削除 jsxプラグインがReactからSSXベースへ移行されています。LumeにおいてReactの一部機能はサポートされておらず、混乱を招いてしまうことなどが背景のようです。この移行により、パフォーマンスの改善や非同期コンポーネントのサポートなどが実現されるようです。 jsxプラグインの変更に合わせて、jsx_preactプラグインが削除されています。 また、liquidプラグインも削除されています。LumeでサポートされているNunjucksに文法が近いことや関数が実行できないことなどが背景のようです。 esbuildプラグインの改善 esbuildプラグインにおいてesbuild_deno_loaderが使用されるように変更されています。Deno本体との挙動の互換性が改善されそうです。 dnt v0.42.0 dnt v0.42.0がリリースされています。 Workspaceのサポートが行われ, これに合わせてdeno.jsonも自動で検出されるように改善されています (#462) また、build()にcompilerOptions.experimentalDecoratorsオプションが追加されています (#442)。この変更の影響で、legacy decoratorsを有効化したい場合はこのオプションに明示的にtrueを設定する必要があるようです。

May 11, 2025

2025/04/28〜2025/05/04の最新情報

Deno v2.3.0 Deno v2.3.0がリリースされました。 以下のページに変更内容をまとめているため、よろしければ参照ください: Deno v2.3 Deno v2.3.1 Deno v2.3.1がリリースされています。 このリリースではDeno v2.3.0において誤ったバージョンが表示されてしまう問題が修正されています。 deno_stdでBunを使用してパッケージのテストコードを実行する仕組みが導入 deno_stdでBunを使用してパッケージのテストコードを実行する仕組みが導入されています: chore: run some test cases in bun in CI #6635 この仕組みによってテストされているパッケージ (_tools/node_test_runner/run_test.mjs) については、Bunでも安定して利用ができる可能性が高そうです。

May 4, 2025

Deno v2.3

はじめに Deno v2.3がリリースされました。 この記事では主な変更点などについて解説します。 v2.3のRCバージョンでの変更内容に関しては以下を参照いただければと思います: Deno v2.3.0-rc.1〜rc.3 また、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....

May 4, 2025

2025/04/21〜2025/04/27の最新情報

Deno v2.2.12 Deno v2.2.12がリリースされています。 Windowsにおけるdeno compileのバグ修正 Deno v2.2.11におけるWindows環境で発生するdeno compileの問題が修正されています。deno compileによって生成した実行可能ファイルがエラーが出ずに実行が終了する問題の修正 (#28986)や、リソースの読み込みに失敗してしまう問題への一時的な対策 (#29005, #29039)などが実施されています。 後述するv2.2.3のRCバージョンにもこれらの変更は取り込まれています。 Deno v2.3について リリース時期について deno.newsにて、Deno v2.3のリリースについて言及されています: Deno v2.3 is almost here まもなくリリース予定のようです。直近でv2.3向けと思われる機能がいくつか追加されているため、紹介します。 Deno.connectでのAbortSignalのサポート Deno.connectにsignalオプションが追加されています (#27113) AbortSignalを指定することで、接続をキャンセルすることができます。現状ではTCP接続のキャンセルのみがサポートされています。 TypeScript v5.8 Deno本体に搭載されたTypeScriptをv5.7からv5.8へアップデートする対応が実施されています: feat: TypeScript 5.8 #29041 このPRはすでにマージされており、Deno v2.3で正式に導入される可能性が高そうです。 DENO_EMIT_CACHE_MODE環境変数 DenoにおいてDENO_EMIT_CACHE_MODEという環境変数をサポートするPRがマージされています: feat(cache): add DENO_EMIT_CACHE_MODE #29025 この環境変数にdisableという値を指定しておくと、DenoがTypeScriptからJavaScriptへトランスパイルした結果のファイルシステムへのキャッシュが無効化されるようです。 Deno v2.3.0-rc.1〜rc.3 Deno v2.3.0のrc.1, rc.2, 及びrc.3がリリースされています: v2.3.0-rc.0〜rc.1 v2.3.0-rc.1〜rc.2 v2.3.0-rc.2〜rc.3 deno lsp 診断 (diagnostics) リダイレクトに関する診断 (The import of \"${from}\" was redirected to \"${to}\"....

April 27, 2025

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