2023/02/20〜2023/02/26の最新情報

Deno v1.31 Deno v1.31がリリースされています。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Deno v1.31 Deno v1.31.1 Deno v1.31.1がリリースされています。 package.jsonサポートに関する改善 以下のいずれかの手段によって、package.jsonの自動探索を無効化できるようになりました。 DENO_NO_PACKAGE_JSON環境変数に1を設定する --no-configまたは--no-npmを指定する また、package.jsonが見つかった際のnpmパッケージのダウンロードに関する挙動が改善されています。package.jsonで依存関係として指定されたいずれかのパッケージが利用されるタイミングまでnpmパッケージのダウンロードが遅延されます。 これにより、npmパッケージに依存しないスクリプトを実行する場合は、package.jsonがあってもnpmパッケージがダウンロードされなくなります。 その他には、package.jsonの以下のスキームから始まるspecifierが無視されるように修正されています。 workspace: file: git: http: https: Deno.serve()でリモートアドレスの取得がサポート Deno.serve()に渡したhandlerの第2引数にオプションが渡されるようになりました。remoteAddrプロパティ(Deno.NetAddr)からリモートアドレスが取得できます。 Deno.serve({ handler: (req, { remoteAddr }) => { return Response.json(remoteAddr); }, }); その他のバグ修正 リモートモジュールからdata:URLをimportできなくなっていた問題が修正されています。 静的に解析ができないdynamic importが複数同時に実行された際に、まれにDenoがパニックする問題が修正されています。 Import Mapsでローカルモジュールへのマッピングが定義されていた場合、リモートモジュールからそのローカルモジュールをimportできない問題が修正されています。 https://github.com/denoland/deno/releases/tag/v1.31.1 deno_std v0.178.0 deno_std v0.178.0がリリースされました。 std/nodeの削除 Deno v1.31でDeno本体にstd/nodeが組み込まれました。 その影響により、std/nodeが削除されています。 もし、今後もstd/nodeを利用したい場合は、バージョンを明示した上でimportをするとよさそうです。 import { EventEmitter } from "https://deno....

February 26, 2023

2023/02/13〜2023/02/19の最新情報

先週のDenoの変更点 先週はDenoのリリースが行われていないため、直近のコミット内容をいくつか紹介いたします。 これらの変更が含まれると思われるDeno v1.31については、今週にリリースされる予定のようです。 deno_std/nodeのDeno本体への組み込み 今まで、deno_std/nodeとDeno本体は別々に開発されていた都合もあり、Denoからnpmパッケージを利用する際は、https://deno.land/std/nodeのダウンロードが背後で行われていました。 以下のコミットなどにおいて、V8のスナップショットの仕組みを利用して、deno_std/nodeをDeno本体へ組み込む変更が行われています。 refactor: allow to provide polyfills for Node modules from the snapshot (denoland/deno#17706) feat(ext/node): embed std/node into the snapshot (denoland/deno#17724) feat: wire up ext/node to the Node compatibility layer (denoland/deno#17785) これにより、https://deno.land/std/nodeからのモジュールのダウンロードが不要になるため、起動の高速化などが期待されます。 また、deno_std/nodeがDeno本体へ組み込まれたことにより、Node.js互換レイヤーの実装でDenoの内部APIの活用が行いやすくなり、パフォーマンスの向上や今まで実装が難しかったモジュールの対応などが進みやすくなりそうです。具体的には、以下のPRでnode:v8の実装が追加されています。 feat(ext/node): implement node:v8 (denoland/deno#17806) 今後、Node.js互換レイヤーの実装をJavaScriptからRustに置き換えていくことも検討されているようで、以下のissueで今後の計画が列挙されています。 Rewrite some of JavaScript API in “ext/node” to Rust (denoland/deno#17809) また、これらの変更を受けて、deno_std/nodeについては削除が検討されているようです。(今後は、Deno本体のリポジトリで開発が進められるようです) Remove std/node, it was merged into Deno itself (denoland/deno_std#3206) 今後、もしdeno_std/nodeを利用したいケースが出てきた際は、削除前のバージョンを明示してimportをする必要が出てくるかもしれません。...

February 19, 2023

2023/02/06〜2023/02/12の最新情報

Deno v1.30.3 Deno v1.30.3がリリースされました。 esm.shやunpkg.comなどからパッケージを読み込むと、deno lspが停止してしまう問題が修正されています。 また、console.log()などでclassを出力する際のフォーマットも改善されています。 class User {} console.info(User); // v1.30.3: `[Class: User]` // v1.30.2: `[Function: User]` https://github.com/denoland/deno/releases/tag/v1.30.3 deno_std v0.177.0 deno_std v0.177.0がリリースされました。 std/encoding/csv - BOMのサポート stringify()にbomオプションを指定できるようになりました。 trueを指定すると、出力されるCSVの先頭にBOMが付与されます。 また、trimLeadingSpaceオプションが未設定の場合でもparse()がBOMを認識するように改善されています。 std/node 以下のバグが修正されています。 node:child_process: execFile()にutil.promisify()がうまく適用されない問題が修正されています。 node:process: 標準入力にファイルがリダイレクトされている場合に、ファイルの末尾に達してもprocess.stdinからnullが返却されない問題が修正されています。 std/semver semver.increment()のmetadata引数に空文字列が渡された際に、ビルドメタデータが未設定にならない問題が修正されています。 import * as semver from "https://deno.land/std@0.177.0/semver/mod.ts"; const v = semver.increment( "1.2.3+1", // version "major", // release undefined, // options undefined, // identifier "", // metadata ); assert(v === "2....

February 12, 2023

2023/01/30〜2023/02/05の最新情報

Deno v1.30.1 Deno v1.30.1がリリースされました。 Node.js互換性の改善 Node-APIの互換性が改善されています。 napi_get_globalでDenoのglobalThisではなくglobalオブジェクトが返されるように修正されています。 napi_create_functionでlengthパラメータが誤ってチェックされていた問題が修正されています。 これらの変更により、Denoでref-napiが動くようになったようです。 その他には、deno replでnode:URLを使った際に、以下のエラーメッセージが表示されてしまう問題が解消されています。 Could not set npm package requirements. Error getting response at https://registry.npmjs.org/@types/node: An npm specifier not found in cache: "@types/node", --cached-only is specified. deno lspの改善 Import Maps関連のバグ修正が実施されています。 Import Mapsを更新した際に、LSPの再起動やコードの編集をせずとも更新内容が反映されるように挙動が改善されました Import Mapsが存在すると、fs形式のimportをnode:fsの形式へ変換するquickfixが機能しなくなる問題が修正されています その他の修正 performance.markのdetailオプションにArrayBufferやTypedArrayを指定するとエラーが発生する問題が修正されています https://github.com/denoland/deno/releases/tag/v1.30.1 Deno v1.30.2 Deno v1.30.2がリリースされています。 v1.30.1でCPU使用率の増加が見られたため、それを修正するために、急遽リリースされる運びになったようです。 deno version 1.30.1 large cpu increase #17629 https://github.com/denoland/deno/releases/tag/v1.30.2 deno_std v0.176.0 deno_std v0....

February 5, 2023

2023/01/23〜2023/01/29の最新情報

Deno v1.30.0 Deno v1.30がリリースされました。 以下に変更内容をまとめたため、よろしければ参照ください。 Deno v1.30 deno_std v0.175.0 deno_std v0.175.0がリリースされました。 非推奨APIの整理などが実施されています。 std/io/buffer.ts: (破壊的変更) 非推奨APIの削除 以下のAPIが削除されています。 同名のAPIは引き続き別ファイルで提供されているため、もしこれらを利用されている場合は、以下の移行先ファイルへimportを書き換える必要がありそうです。 対象API 移行先 BufferFullError std/io/buf_reader.ts BufReader std/io/buf_reader.ts PartialReadError std/io/buf_reader.ts ReadLineResult std/io/buf_reader.ts BufWriter std/io/buf_writer.ts BufWriterSync std/io/buf_writer.ts readDelim std/io/read_delim.ts readStringDelim std/io/read_string_delim.ts readLines std/io/read_lines.ts std/io/files.tsモジュールの削除 (破壊的変更) std/io/files.tsが削除されています。 このファイルで提供されていたAPIはstd/io/read_range.tsから引き続き利用できるため、今後はそちらへ移行する必要がありそうです。 std/io/readers.tsモジュールの削除 (破壊的変更) std/io/readers....

January 29, 2023

2023/01/16〜2023/01/22の最新情報

Denoのロードマップ (2023年 Q1) Denoの2023年 Q1のロードマップが公開されました。 以下のページに内容をまとめたため、よろしければ参照いただければと思います。 Denoのロードマップ (2023年 Q1) https://github.com/denoland/deno/issues/17475 Deno v1.29.4 Deno v1.29.4がリリースされました。 Node-APIに関する改善 Node-APIの互換性の向上が実施されています。 napi_get_arraybuffer_info/napi_get_buffer_info/napi_get_typedarray_infoで lengthなどの各引数がNULLであった際のケースが考慮されるように挙動が改善されています。 napi_create_errorやnapi_is_error, napi_throw_errorなどのエラー関連APIの互換性が向上されています。 Flash(Deno.serve)の改善 Request.cloneを呼ぶと、エラーが発生する問題が修正されています。 リクエストメソッドがPOST/PUT/PATCHのいずれかで かつ Deno.serveに渡したハンドラでリクエストボディがconsumeされていない場合、プロセスがパニックする問題が修正されています。 レスポンスボディとして設定したReadableStreamからUint8Array以外の値がenqueueされた際に、Deno.serveに渡したonErrorハンドラが呼ばれず、Unhandled rejectionが発生してしまう問題が修正されています。 Deno APIに関するバグ修正 Deno.copyFileSyncを実行した際に、コピー先のファイルへパーミッションが受け継がれない問題が修正されています。 WindowsでDeno.systemMemoryInfo()を呼んだ際にswapTotalやswapFreeとして返却される値の信頼性が向上されています。 https://github.com/denoland/deno/releases/tag/v1.29.4 deno_std v0.173.0 deno_std v0.173.0がリリースされました。 std/node 前回のリリースで追加されたnode:clusterがリバートされています。 Deno本体でnpm互換が有効化されている場合に、node:clusterを使っていない場合であっても、NODE_CLUSTER_SCHED_POLICYなどの環境変数に対するパーミッションが要求されてしまうためのようです。 現在、Deno本体でDeno.permissions.querySync()の実装が進められており、これが正式にサポートされたら、改めてnode:clusterを追加することが検討されているようです。 std/fs/expand_glob expandGlob(Sync)のglobstarオプションのデフォルト値がfalseからtrueへ変更されました。 std/streams/text_line_stream TextLineStreamで最後の行の後に空文字列が余分にenqueueされてしまう問題が修正されています。 https://github.com/denoland/deno_std/releases/tag/0.173.0 eslint_binary eslint_binaryという、DenoのNode.js互換性やV8 Snapshot、ESBuildなどを活用して、ESLintをシングルバイナリ化するプロジェクトが公開されています。 bartlomieju/eslint_binary このプロジェクトはあくまでPoCのため、今後どうなるかはまだ不明ですが、READMEにロードマップが公開されており、ESLintのCLIをRustで書き直すことなども検討されているようです。 esm.shの2023年のロードマップ esm.shの今年のロードマップが公開されています。 Roadmap of 2023 プレイグラウンドにコードの共有機能を実装することや、安定性の向上などを図ることが検討されているようです。...

January 22, 2023

2023/01/09〜2023/01/15の最新情報

Deno v1.29.3 Deno v1.29.3がリリースされました。 FFI 構造体の値渡しがサポートされています。 const Point = ["i32", "i32"]; const dylib = Deno.dlopen(libpath, { make_point: { parameters: ["i32", "i32"], result: { struct: Point }, }, print_point: { parameters: [{ struct: Point }], result: "void", }, }); const point = dylib.symbols.make_point(1, 2); assert(point instanceof Uint8Array); dylib.symbols.print_point(point); https://github.com/denoland/deno/pull/15060 Node-API 以下のNode-APIがサポートされました。 napi_ref_threadsafe_function napi_unref_threadsafe_function napi_add_env_cleanup_hook napi_remove_env_cleanup_hook また、Node-API経由で定義したclassの静的プロパティが適切にハンドリングされるように修正されています。 CLI --reloadと--watchを併用した際に、ファイル変更のたびに--reloadによるモジュールの再ダウンロードが行われてしまう問題が修正されています deno installによって作成されるshimにデフォルトで--no-configが指定されるように修正されています その他 ReadableStreamのasyncIteratorの挙動に関する互換性が向上されています BroadcastChannel....

January 15, 2023

2023/01/02〜2023/01/08の最新情報

Deno v1.29.2 Deno v1.29.2がリリースされました。 Deno.osUptime() システムが起動してからの経過時間を取得するために、Deno.osUptime()というAPIが追加されました。 利用するには、--unstableと--allow-sysの指定が必要です。 Deno.Conn.ref()/unref() Deno.Connへunref()とref()メソッドが追加されました。 これらのAPIの利用には--unstableの指定が必要です。 unref()メソッドを呼ぶと、Deno.unrefTimerなどと同様に、読み込み途中のコネクションが存在したとしてもプロセスの終了がブロックされなくなります。(ただし、効果があるのは読み込みに対してのみで、書き込みについてはunrefを呼んだ場合であってもブロックされます) ref()メソッドを呼ぶと、unref()されたコネクションをデフォルトの状態に戻すことができます。(通常通り、読み込み途中のコネクションがプロセスの終了をブロックします) CLIに関するバグ修正 --node-modules-dirが指定された際にrequire()でパッケージが適切に解決できないケースがある問題が修正されています deno.json(c)でTypeScriptのcompilerOptions.noErrorTruncationオプションを設定できない問題が修正されています dynamic importが使用されていると、"unhandledrejection"のリスナが呼ばれないケースがあった問題が修正されています deno instlallもしくはdeno uninstallを実行する際に、ロックファイルの自動適用が行われてしまう問題が修正されています Deno APIに関する修正 Deno.memoryUsage()から返却されるrssプロパティに正しい値が設定されない問題が修正されています Deno.permissions.revokeまたはDeno.permissions.requestでname: "ffi"が指定された際に、pathオプションにURLオブジェクトを指定できるようになりました。 fetch()関連の修正 下記のケースでプロセスがパニックしてしまう問題が修正されています: 引数に不正な形式のURLが与えられた場合 bodyオプションに渡したReadableStreamでエラーが発生した場合 deno lsp関連の修正 下記のケースでTest code lensが表示されない問題が修正されています Deno.test()でテスト名がテンプレートリテラルを使用して定義されている場合 下記のように、関数を使用してテストケースが定義されている場合 const test = () => ({ name: "some test", fn: () => {} }); Deno.test(test()); "Add all missing imports"アクションで正しいimport文が生成されないことがある問題が修正されています プライベートフィールド(#someField)の補完が適切に動作するように修正されています https://github.com/denoland/deno/releases/tag/v1.29.2...

January 8, 2023

2022/12/19〜2022/12/25の最新情報

今週はDenoでリリースが行われていないため、直近の話題や変更などについて紹介いたします。 Flash(Deno.serve)の書き換えについて 現在、Flash(Deno.serve)の書き換えが検討されているようです。 Flashで報告されている様々な問題の解決などが目的のようです。 以下のissueで解決予定の問題が列挙されています。 Flash HTTP server rewrite - umbrella issue (denoland/deno#17146) Deno.coreの削除について 現在、Denoの内部APIであるDeno.coreの削除が検討されているようです。 refactor: remove Deno.core (denoland/deno#16881) ひとまずはDeno.coreはDeno[Deno.internal].coreへ移動される予定のようで、deno_stdではすでに対応が実施されています。 refactor: handle Deno[Deno.internal].core (denoland/deno_std#3029) ただし、将来的にはDeno[Deno.internal].core自体も削除が予定されているようなので、もしDeno.coreを使用されている場合は、今のうちに対応をしておくとよいかもしれません。 deno_lintへのguard-for-inルールの追加 deno_lintでguard-for-inルールが実装されているようです。 feat: Add guard-for-in rule (denoland/deno_lint#1105) 次のDenoのリリースあたりでdeno lintコマンドから利用できるようになる可能性がありそうです。

December 25, 2022

2022/12/12〜2022/12/18の最新情報

Deno v1.29.0 Deno v1.29がリリースされました。 以下に変更内容をまとめたため、よろしければ参照ください。 Deno v1.29 deno_std v0.168.0 deno_std v0.168.0がリリースされました。 https://github.com/denoland/deno_std/releases/tag/0.168.0 std/archiveのファイル構成の変更 新しいファイルとしてstd/archive/untar.tsが追加されています。 これに伴い、std/archive/tar.tsからの下記の読み込みが非推奨化されています。 TarHeader Untar TarEntry 今後、これらのAPIを利用する際は、std/archive/untar.tsから読み込むことが推奨されます。 std/ioのファイル構成の変更 std/ioパッケージの下記ファイルが細分化されています。 std/io/readers.ts std/io/writers.ts std/io/util.ts 具体的にはstd/fsなどのように、各APIがそれぞれ単独のファイルで提供されるように構造が変わっています。 例えば、std/io/readers.tsに配置されていたStringReaderは、今後はstd/io/string_reader.tsから読み込むことが推奨されます。 より詳しくは公式のブログ記事を参照いただければと思います。 https://deno.com/blog/v1.29#changes-to-the-standard-modules std/dotenv - config()がload()へリネーム std/dotenvで提供されているAPIがリネームされています。 リネーム前 リネーム後 config load configSync loadSync ConfigOptions LoadOptions 古い名前のAPIも削除されずに残されてはいますが、現在は非推奨化されているため、もし使用されている場合は新しい名前への移行が推奨されます。 std/nodeの改善 std/node/httpのServerResponseクラスでTransfer-Encoding: chunkedが意図通りに動作しない問題が修正されています。 また、Buffer.toStringによるUTF-8のデコードが大幅に高速化されています。 Elsaの開発について Denoに影響を受けたJavaScript/TypeScriptランタイムであるElsaで、内部実装の書き換えが検討されているようです。...

December 18, 2022