2024/07/29〜2024/08/04の最新情報

What we got wrong about HTTP imports DenoにおいてHTTPインポートが実装された背景やそのトレードオフ、JSRが開発された背景などについて解説された記事がDenoの公式ブログで公開されています。 What we got wrong about HTTP imports HTTPインポートについては今後も削除される予定はないものの、ある程度の規模のプロジェクトにおいてはImport MapsとJSRを併用することが推奨されています。 また、この記事によると、Deno v2のリリースは今年の9月に実施されることが検討されているようです。 Denoでpackage.jsonやnpmパッケージのサポートが入った理由について node:sqliteのサポートについて Node.jsで最近実装されたnode:sqliteのサポートに関するissueがlittledivy氏によって作成されています。 Tracking issue for node:sqlite (#24828) 現在はクローズされていますが、過去にDeno本体にSQLiteドライバーを追加するPRが作成されていたことがあったので、もしかしたらDenoでnode:sqliteが実装される可能性もありそうな気はします。 feat: Add Deno.sqlite bindings (#14627) Deno v1.45.5 Deno v1.45.5がリリースされています。 Node.js互換性の改善 package.json importsのワイルドカードが認識されるように改善されています。 Subpath patterns node:child_process IPC(fork)の再実装: 以下のような点などが改善されているようです: TypedArrayをやり取りができない問題が解消 IPCチャネルを作成すると、イベントループが停止しなくなる問題が解消 nullを渡そうとすると、チャネルが終了してしまう問題が解消 この改善により、--pool=forkを指定した際もvitestが動作するようです。(これはvitest v2のデフォルトの挙動のようです) --v8-options: 各種APIによってDenoを子プロセスとして実行する際に、Node.jsの--v8-optionsがDenoの--v8-flags=--helpとして解釈されるように挙動が修正されています。これにより、Denoでv8flagsが動作するようです。 node:fs/promises watch()がNode.jsと同様にAsyncIterableを返却するように修正されています。 node:timers/promises scheduler.{wait,yield}が実装されています。...

August 4, 2024

2024/07/22〜2024/07/28の最新情報

Deno v1.45.3 Deno v1.45.3がリリースされています。 Node.js互換性の改善 npm workspaces npm workspace内の複数のメンバー間で特定のパッケージのバージョンがコンフリクトした際に、それぞれのメンバー配下にnode_modulesが作られるように挙動が改善されています。(例: ./workspace-aと./workspace-bがそれそれ@foo/barパッケージのv1とv2に依存している場合、./workspace-a/node_modulesと./workspace-b/node_modulesが作られるようです) --allow-scripts deno.jsonでnodeModulesDir: trueが未設定の場合であっても、コマンドラインで--node-modules-dirが指定されていれば--allow-scriptsが動作するように改善されています。 node:fs exists(Sync)のパフォーマンスが最適化されています (#24613) また、WindowsでStats.modeに適切な値が設定されるように改善されています (chokidarがWindowsで動かない問題があったようです) node:http request()でBufferのsubarrayをボディに指定すると、データが欠損してしまう問題が修正されています。 node:tty WriteStreamでhasColors()とgetColorDepth()メソッドが実装されています。 deno publish deno publishコマンドにLICENSEファイルが含まれていない場合に警告を表示する機能が追加されています。 現状では警告が表示されるようですが、エラーとするように挙動を変更することも検討されているようです。(Error when missing license file for deno publish (denoland/deno#24676)) ライセンスファイルの一覧 deno lsp deno lspでnpm workspacesがサポートされています。 また、依存関係のキャッシュに失敗するとLSPがフリーズする問題が修正されています。 deno compile deno compileで生成されたバイナリーでNode-APIがサポートされました。 その他 console.logなどでErrorのcauseプロパティの内容がフォーマットして出力されるように改善されています。 また、lib.deno_web.d.tsのlib.dom.d.tsやlib.webworker.d.tsとの互換性が改善されています。(#24599) Deno v1.45.4 Deno v1.45.4がリリースされています。 deno lint no-sloppy-importsルール sloppy importsに関する警告がdeno lintへ移動されています。deno lintに--unstable-sloppy-importsを指定するとno-sloppy-importsルールが有効化されるようです。 構文エラーの報告 構文エラーなどが検出された際に、deno lintがエラーを報告してくれるように挙動が改善されています。 deno lsp Infer function return typeによってnpmパッケージから提供される型が推論される際に、常にfile:形式のURLが挿入されてしまう問題が修正されています (#24344)...

July 28, 2024

2024/07/15〜2024/07/21の最新情報

@ts-typesと@ts-self-typesプラグマについて Denoで@ts-typesと@ts-self-typesというプラグマが実装されていたようです。 Document @ts-self-types (denoland/deno-docs#502) @ts-typesについては@deno-typesプラグマと同様に、特定のJavaScriptモジュールに対して型定義を適用したい場合に指定することが想定されているようです。今後は@deno-typesではなく@ts-typesの方の使用が推奨されるようです。 // @ts-types="./add.d.ts" import { add } from "./add.js"; @ts-self-typesについても、JavaScriptで書かれたモジュールに型を適用するための機能のようですが、実質的に/// <reference types="..." />と同様に動作するようです。基本的にJavaScriptモジュールに対して型を適用したい場合を除いて、/// <reference types="..." />の方の使用が推奨されるようです。 // @ts-self-types="./globals.d.ts" feat(unstable): add @ts-types and clean up @deno-types (denoland/deno_graph#444) feat(unstable): add support for @ts-self-types pragma (denoland/deno_graph#445) deno_stdのリリース deno_stdがリリースされています。 @std/async@1.0.0 @std/async@1.0.0がリリースされています。 @std/cli@1.0.0 @std/cli@1.0.0がリリースされています。 @std/text@1.0.0 @std/text@1.0.0がリリースされています。 このリリースに合わせて@std/text/caseが削除されています。代わりに@std/text/caseで提供されていた各APIは@std/text/to-camel-caseや@std/text/to-kebab-caseなどのファイルへ移行されています。 @std/ulid@1.0.0 @std/ulid@1.0.0がリリースされています。 @std/csv@1.0.0-rc.4 @std/csv@1.0.0-rc.4がリリースされています。 ParseErrorが削除されています (今後はSyntaxErrorがthrowされます) @std/yaml@1.0.0-rc.4 @std/yaml@1.0.0-rc.4がリリースされています。 stringify()やparse()で利用されていたYamlErrorが削除されています。今後はstringify()からはTypeError, parse()からはSyntaxErrorがthrowされます。 @std/expect@1.0.0-rc.3 @std/expect@1.0.0-rc.3がリリースされています。 expect.extend()との併用を想定して、expect()に型引数が追加されています。 @std/semver@1.0.0-rc.3 @std/semver@1.0.0-rc.3がリリースされています。 @std/semver/increment: increment()のprereleaseとbuildmetadata引数が削除されています。代わりにoptions引数が追加されており、そこでprereleaseやbuildオプションを指定できます。 @std/dotenv@0.225.0 @std/dotenv@0....

July 21, 2024

2024/07/08〜2024/07/14の最新情報

Deno v1.45 Deno v1.45がリリースされています。 以下に内容をまとめたため、よろしければこちらを参照いただければと思います。 Deno v1.45 Deno v1.45.1 Deno v1.45.1がリリースされています。 --import-map Denoまたはnpmのワークスペースを設定している状態で--import-mapオプションを指定すると、エラーが発生する問題が修正されています。 ライフサイクルスクリプト fseventsなどのパッケージをインストールすると、警告が表示される問題が修正されています。npmはbinding.gypが存在する場合、そのパッケージにデフォルトでinstallスクリプトを追加するものの、fseventsのようにnpmへの公開時にbinding.gypをパッケージから除外しているケースなどにおいて、Denoが意図せず警告を表示してしまう問題があったようです。 また、Denoがライフサイクルスクリプトを含むnpmパッケージを検出した際に、初回のみ警告を表示するように挙動が変更されています。 Deno v1.45.2 Deno v1.45.2がリリースされています。 fseventsを動かすための対応 fseventsパッケージを動かそうとするとエラーが発生する問題が修正されています (#24542) WebGPU GPUDevice#createRenderPipelineAsyncがPromiseを返却していなかった問題が修正されています。 Web Crypto API crypto.randomUUIDのパフォーマンスが5倍近くまで改善されています。 deno_stdのリリース deno_stdのリリースが行われています。 release-2024.07.09 release-2024.07.12 @std/assert@1.0.0 @std/assert@1.0.0が正式にリリースされました。 @std/path @std/path@1.0.0-rc.4 @std/path@1.0.0-rc.4がリリースされています。 以下のAPIが削除されています。 削除されたAPI 移行先 FormatInputPathObject Partial<ParsedPath> GlobToRegExpOptions GlobOptions @std/path@1.0.0 @std/path@1.0.0が正式にリリースされました。 @std/toml@1.0.0 @std/toml@1.0.0がリリースされました。 このリリースに合わせてTOMLParseErrorが削除されています。(今後はSyntaxErrorがthrowされます) @std/regexp@1.0.0 @std/regexp@1.0.0が正式にリリースされました。 @std/msgpack@1.0.0 @std/msgpack@1.0.0が正式にリリースされました。...

July 14, 2024

2024/07/01〜2024/07/07の最新情報

Denoのnpm workspacesサポートについて Deno本体にnpm workspacesのサポートを追加するPRがマージされています。おそらくDeno v1.45.0あたりでリリースされる可能性がありそうです。 feat: npm workspace and better Deno workspace support (#24334) Denoがpackage.jsonのworkspacesフィールドを認識してくれるようです。 現状では、各ワークスペースの依存関係はプロジェクトのルートディレクトリ直下のnode_modulesディレクトリにまとめてインストールされるようです。今後、この挙動は改善が検討されているようです。 また、以下のようなワイルドカードによる指定についてもまだサポートはされておらず、今後、対応が検討されているようです (#24420) { "workspaces": ["packages/*"] } Denoのワークスペース機能への変更 この対応に合わせて、Denoのワークスペース機能にも変更が加わっており、deno.jsonのworkspacesキーがworkspaceにリネームされています。 また、このdeno.jsonのworkspaceにはpackage.jsonを含むディレクトリをワークスペースのメンバーとして指定できるように改善されています。(今まではdeno.jsonを含むディレクトリのみがワークスペースのメンバーとしてサポートされていました) deno_stdのリリース deno_stdのリリースが行われています。 @std/crypto@1.0.0 @std/crypto@1.0.0がリリースされました。 @std/assert@1.0.0-rc.3 @std/assert@1.0.0-rc.3がリリースされています。 各ファイルの名前からassert_のプレフィックスが削除されています。例として、@std/assert/assert_equalsは@std/assert/equalsに、@std/assert/assert_rejectsは@std/assert/rejectsへリネームされています。 @std/csv@1.0.0-rc.1 @std/csv@1.0.0-rc.1がリリースされています。 各ファイルの名前からcsv_プレフィックスが削除されています。例えば、@std/csv/csv_parse_streamは@std/csv/parse_stream、@std/csv/csv_stringify_streamは@std/csv/stringify_streamにリネームされています。 また、ReadOptionsが非公開APIに変更されています。 @std/expect@1.0.0-rc.1 @std/expect@1.0.0-rc.1がリリースされています。 Immutable.jsのオブジェクトに関するサポートが削除されています。 また、expect().toHaveBeenNthCalledWith()で0以下の数値が指定された際に、例外が発生するように挙動が修正されています。 @std/json@1.0.0-rc.2 @std/json@1.0.0-rc.2がリリースされています。 各ファイル名からjson_プレフィックスが削除されています。例えば、@std/json/json_parse_streamは@std/json/parse_stream、@std/json/json_stringify_streamは@std/json/stringify_streamにリネームされています。 @std/semver@1.0.0-rc.1 @std/semver@1.0.0-rc.1がリリースされています。 非推奨化されていた以下のAPIが削除されています。 rangeMax() (greaterThanRange()への移行が推奨) rangeMin() (lessThanRange()への移行が推奨) testRange() (satisfies()への移行が推奨) また、SEMVER_SPEC_VERSION定数が削除されており、@std/semver/constantsも非公開モジュールに変更されています。 @std/yaml@1.0.0-rc.1 @std/yaml@1.0.0-rc.1がリリースされています。 APIの削除 parse()APIの以下のオプションが削除されています。 legacy filename listener TypeとSchema型も非公開になりました。parse()のschemaオプションには文字列を渡せるのでそちらへの移行が推奨されます。 また、parseAll()のiterator引数が削除されています。 リネーム DumpOptionsがStringifyOptionsにリネームされています。...

July 7, 2024

2024/06/24〜2024/06/30の最新情報

deno_stdのリリース deno_stdがリリースされています。 @std/media-types@1.0.0 @std/media-types@1.0.0がリリースされました。 このリリースに合わせて、extensionsByType()(@std/media_types/extensions_by_type)がallExtensions()(@std/media_types/all_extensions)にリネームされています。extension()の命名と合わせることが目的のようです。 @std/http@1.0.0-rc.1 @std/http@1.0.0-rc.1がリリースされています。 @std/http/serverの削除 非推奨化されていた@std/http/serverが削除されています。Deno.serve()への移行が推奨されます。 @std/http/unstable_signed_cookieのリネーム @std/http/unstable_signed_cookieが@std/http/signed_cookieにリネームされています。ただし、@std/http/signed_cookieから提供されるAPIは引き続き実験的APIとして扱われるようです。 また、verifyCookie()がverifySignedCookie()へリネームされています。 @std/http/cookie getCookies()またはsetCookie()でthrowされるエラーがSyntaxErrorに統一されました (今まではErrorまたはTypeErrorのどちらかがthrowされていました) @std/http/file_server Deno.serve()に合わせてファイルサーバーのデフォルトの起動ポートが4507から8000に変更されています。 @std/testing@1.0.0-rc.1 @std/testing@1.0.0-rc.1がリリースされています。 @std/testing/assertsの削除 非推奨化されていた@std/testing/assertsが削除されました。@std/assertで同様の機能が提供されているので、そちらへの移行が推奨されます。 @std/testing/time 複数のFakeTimeを同時に作成できないように挙動が変更されています。 また、newなしでDate()を呼んだ際にスタブが適用されない問題が修正されています。 @std/testing/mock spy()にclassを渡した際に、そのclassのconstructorがthrowしたエラーがきちんと追跡されるように振る舞いが改善されました。 @std/jsonc@1.0.0-rc.1 @std/jsonc@1.0.0-rc.1がリリースされました。 @std/jsonc/parse ParseOptionsとParseOptions.allowTrailingCommaが削除されています。今まではallowTrailingCommaにfalseを指定することで、配列などの最後の要素の後のカンマの指定を禁止することができましたが、有効なユースケースが少ないと判断され削除されました。 @std/yaml@0.224.3 @std/yaml@0.224.3がリリースされました。 parse()とstringify()のschemaオプションで文字列の指定がサポートされています。 schemaオプションに指定できる有効な文字列は以下のいずれかです。 "core" (CORE_SCHEMAを指定した場合と同様の振る舞いをします) "default" (DEFAULT_SCHEMAを指定した場合と同様の振る舞いをします) "failsafe" (FAILSAFE_SCHEMAを指定した場合と同様の振る舞いをします) "json" (JSON_SCHEMAを指定した場合と同様の振る舞いをします) "extended" (EXTENDED_SCHEMAを指定した場合と同様の振る舞いをします) deno_stdext deno_stdextというdeno_stdへの拡張パッケージが公開されています。現時点では以下のパッケージが公開されているようです。 @stdext/crypto @stdext/encoding @stdext/http また、deno-sqlxのリポジトリで開発されていたSQLドライバー向けの共通インターフェースはdeno_stdextに取り込まれることが検討されているようです。 feat(sql): add sql standard interfaces (halvardssm/deno_stdext#5) まだこのPRはマージはされていませんが、以下のパッケージの追加が検討されているようです。 @stdext/sql @stdext/collections deno_mysqlにおけるdeno-sqlxへの対応について 先週紹介したdeno_mysqlにおけるdeno-sqlxへの対応はリバートされたようです。 Revert “Implement SQLx interface” (denodrivers/mysql#169)...

June 30, 2024

2024/06/17〜2024/06/23の最新情報

History of WebGPU in Deno (Web Engines Hackfest ‘24) Web Engines Hackfest 2024でのcrowlKats氏の発表内容が公開されています。 動画 スライド DenoにおけるWebGPU APIの実装やWebGPU APIが一時的に削除された背景、WebGPU APIに関する今後の計画などについて解説されています。今後、OffscreenCanvasなどの実装も検討されているようです feat(ext/canvas): OffscreenCanvas (#23773) Deno v1.44.3 Deno v1.44.3がリリースされています。 deno lsp ワークスペース直下以外の各ディレクトリに存在するdeno.jsonが認識されるように改善されています。 feat(lsp): multi deno.json resolver scopes (#24206) この改善によって、例えば、以下のような構成のプロジェクトにおいて、各deno.jsonがdeno lspによって認識されるようです。 ./frontend/deno.json ./backend/deno.json ./backend/sub_dir/deno.json 上記のPRによると、各deno.jsonごとに型チェックの振る舞いや設定などを分離できるようにすることなども今後、検討されているようです。 Node.js互換性の改善 node:net: BlockListとSocketAddressが追加されています。 node:http: Server#closeでGraceful shutdownが行われるように改善されています。 node:diagnostics_channel: dd-traceのサポート向けにNode.jsとの互換性が改善されています。 AbortSignal AbortSignal.timeoutのリソースリークが修正されています。 Deno v1.44.4 Deno v1.44.4がリリースされています。 Deno.addSignalListener Deno.addSignalListenerで'SIGPOLL'と'SIGUNUSED'がサポートされています。 node:fs DirentにparentPathとpathプロパティが追加されています。 deno_stdのリリース deno_stdがリリースされています。...

June 23, 2024

2024/06/10〜2024/06/16の最新情報

Deno v1.44.2 Deno v1.44.2がリリースされています。 CLI deno lsp textDocument/formattingで DocumentFormattingParamsのoptionsが考慮されるように挙動が改善されています。(LSP: Formatting ignores passed formatting options (#23257)) また、auto importにおいて.d.tsなどが提案されるべき場面で、誤って.jsが提案されてしまうことがある問題が修正されています。(lsp: import suggestion imports .d.ts file as .js (#23017)) deno lint BOM付きのUTF-8形式のファイルでdeno lintがパニックする問題が修正されています。 バグ修正 複数のDenoプロセスが並列で同時にリモートモジュールのダウンロードを行っていると、処理が失敗することがある問題が修正されています。 また、dynamic importをするとプロセスがハングすることがある問題が修正されています。(Investigating hung/paused process while dynamically importing async module (#24098)) Node.js互換性の改善 Node-API Node-APIの実装がリライトされています。これにより、Prismaがハングしてしまう問題が解消されるようです。(Prisma library using N-API hangs often (#24010)) node:child_process stdioオプションで'ipc'とファイルディスクリプタ(整数)の指定がサポートされました。 node:http ServerResponse#setHeaderのvalue引数に配列が指定された場合の挙動が修正されています。 今までの挙動: 配列の各値をカンマ区切りで結合し、単一のヘッダーとして追加されていました。 Deno v1.44.2: 配列の各要素ごとにヘッダーが追加されます。 node:vm Scriptにおける以下の問題が修正されています。 node:processがimportできない問題 (#22441) globalが未定義になる問題 (#23852) メモリリーク (#23913) WebSocket WebSocketでBlobを送信する際に、順番通りにメッセージが送られない問題が修正されています。(websocket....

June 16, 2024

2024/06/03〜2024/06/09の最新情報

Deno v1.44.1 Deno v1.44.1がリリースされています。 Node.js互換性の改善 dynamic import 以下のような形式のdynamic importがサポートされています (ただし、importの引数に指定された変数が静的に解析可能な場合にのみ限定されます) const specifier = "npm:chalk@5.3.0"; const chalk = await import(specifier); .npmrc あるパッケージのtarballのURLに対して、常にそのパッケージが属するスコープ向けの認証設定が適用されてしまう問題が修正されています。 fix(npm): use configured auth for tarball urls instead of scope auth (#24111) レジストリとパッケージのtarballを配信するドメインが異なる場合、v1.44.0の時点では、それぞれのドメインに対して別々の認証設定を適用できない課題があったようです。 Workerにおけるパッケージ解決の改善 Workerにおいて特定のnpmパッケージを利用しようとすると、プロセスがパニックしてしまうことがある問題が修正されています。 deno lsp jsr:向けのマッピングがImport mapsで定義されている場合、うまく補完が動作しない問題が修正されています。(#24050) Deno.exitCode Deno.exitCodeに整数以外の値を設定しようとした際にTypeErrorが発生するように挙動が変更されています。 deno_stdのリリース deno_stdのリリースが行われています。 release-2024.06.03 release-2024.06.06 @std/bytes@1.0.0 @std/bytes@1.0.0がリリースされています。特に大きい変更はありませんが、deno_stdのパッケージとしては初の安定版リリースになります。 @std/assert 0.226.0と1.0.0-rc.1の2つのバージョンがリリースされています。 0.226.0 assertEqualsからformatterオプションが削除されています。 @std/assert@0.226.0 1.0.0-rc.1 assertAlmostEqualsのtolerance引数のデフォルト値が変更されています。 今までは1e-7がデフォルト値として使用されていました。 このバージョンでは、デフォルト値が以下のように変更されています。 expected引数が有限な値であればexpected * 1e-7 そうでなければ1e-7 @std/assert@1....

June 9, 2024

2024/05/27〜2024/06/02の最新情報

Deno v1.44 Deno v1.44がリリースされています。 以下に内容をまとめたため、よろしければこちらを参照いただければと思います。 Deno v1.44 deno_stdのリリース deno_stdがリリースされています。 @std/uuid@0.224.3 @std/uuid/v1 generateのbufとoffset引数が非推奨化されています。 また、V1OptionsがGenerateOptionsにリネームされています。 @std/data-structures@0.225.0 BinarySearchNodeがprivate APIに変更されています Hono v4.4.0 Hono v4.4.0がリリースされています。 HonoがJSRに公開されています。 @hono/hono

June 2, 2024