2021/04/25〜2022/05/01の最新情報

Deno v1.21.1 Deno v1.21.1がリリースされました。 ネイティブHTTPサーバ(Deno.serveHttp)の変更点 Deno v1.20でレスポンスボディの自動的な圧縮がサポートされました。 このリリースでは、レスポンスボディにReadableStreamが指定された際の圧縮がサポートされています。 その他にもいくつかのパフォーマンス改善が実施されています。 deno taskで引数に--を指定した際の挙動が変更 例えば、deno.jsonで次のようなタスクが定義されていたとします。 { "tasks": { "test": "deno test --allow-read" } } 例えば、下記のように--を指定してタスクを実行したとします。 $ deno task test -- some-test.js この場合、v1.21.0時点では次のようにコマンドが実行されていました。 $ deno test --allow-read "some-test.js" 今回リリースされたv1.21.1では、次のように変更されています。 $ deno test --allow-read "--" "some-test.js" Deno.inspectの変更点 strAbbreviateSizeオプションが追加されました。 文字列がこのオプションで指定された長さを超えると省略して表示されます。 デフォルト値は100です。 compact: falseが指定された際であっても、空のIterableオブジェクトはコンパクト化して表示するように修正されています。 deno benchの変更点 deno benchで2つ以上のファイルを実行した際に、前のファイルのベンチマーク結果が次のファイルに影響を与えてしまう問題が修正されました。 この問題は、例えば、1つ目のベンチマークファイルでグルーピング(groupオプション)を利用しているが、2つ目のベンチマークファイルではグルーピングを利用していないようなケースで発生していたようです。 その他にも、Exit sanitizerによるオーバーヘッドの削減が実施されています。 deno testの変更点 Deno v1.21でテストケースの実行時にログに出力された内容がキャプチャされるように改善されました。 このリリースでは、Deno.spawn()などでstdoutやstderrオプションに"inherit"を指定した際に、サブプロセスの出力内容もキャプチャされるように改善されています。 他にも、Workerの出力内容もキャプチャするように改善されています。 その他の変更点 Deno....

May 1, 2022

2021/04/18〜2022/04/24の最新情報

Deno v1.21 Deno v1.21がリリースされました。 個別に記事を書いたので、詳しくはそちらを参照いただければと思います。 Deno v1.21 deno_std v0.136.0 deno_std v0.136.0がリリースされました。 testing/snapshot スナップショットテストを行うためのモジュールが追加されました。 このモジュールではassertSnapshotという関数が公開されており、__snapshots__ディレクトリに保存されたスナップショットと第2引数で指定された値を比較し、マッチしなかった場合、エラーが発生します。 スナップショットを読み込む必要があるため、利用には--allow-readパーミッションが必要になります。 import { assertSnapshot } from "https://deno.land/std@0.136.0/testing/snapshot.ts" Deno.test("doSomething", async (t) => { const result = doSomething(); await assertSnapshot(t, result); }); スナップショットを更新したいときは、テストを実行する際に--updateを指定する必要があります。 この場合、スナップショットを書き込むために、追加で--allow-writeが必要になります。 # スナップショットは__snapshots__に書き込まれます $ deno test --allow-read --allow-write tests/some_test.js -- --update testing/bdd itに渡すテスト関数がTestContextを受け取るように修正されています。 import { describe, it } from "https://deno.land/std@0.136.0/testing/bdd.ts" describe("sum", () => { it("should return sum of numbers", (t) => { assertEquals(sum(1, 2, 3), 6, t....

April 24, 2022

2021/04/11〜2022/04/17の最新情報

Deno v1.20.6 Deno v1.20.6がリリースされました。 deno fmtコマンドの内部実装で使用されているdprint関連のプラグインがアップデートされています。 その影響により、deno fmtコマンドのパフォーマンス向上やバグの修正が行われています。 (オブジェクトリテラルと3項演算子を併用した際に、フォーマット結果に一貫性がなくなる問題が修正されているようです) https://github.com/denoland/deno/releases/tag/v1.20.6 deno_std v0.135.0 deno_std v0.135.0がリリースされました。 このリリースでは破壊的変更が実施されています。 io/readers: MultiReaderのシグネチャの変更 (破壊的変更) MultiReaderのコンストラクタの引数が可変長引数ではなくDeno.Readerの配列を受け取るように変更されています。 変更前: const readers: Array<Deno.Reader> = [...]; new MultiReader(...readers); 変更後: const readers: Array<Deno.Reader> = [...]; new MultiReader(readers); MultiReaderはstd/archive/tar.tsモジュールの内部で使われており、大量のファイルを持つtarファイルを作ろうとすると、maximum call stack exceededエラーが発生してしまう問題があったようです。 mime/multipartの非推奨化 (破壊的変更) mime/multipartモジュールが非推奨化されました。 今後はFormDataの使用が推奨されます。 testing/benchの非推奨化 (破壊的変更) testing/benchモジュールが非推奨化されました。 今後はDeno.benchの使用が推奨されます。 testing/bddの追加 testing/bddモジュールが追加されました。 JestやMochaライクなAPIを使用してテストコードを記述することができます。 import { assertEquals } from "https://deno.land/std@0.135.0/testing/asserts.ts"; import { describe, it } from "https://deno.land/std@0.135.0/testing/bdd.ts"; describe("sum", () => { it("should return sum of numbers", () => { assertEquals(sum(1, 2, 5), 8) }); it("should return 0 when no arguments are given", () => { assertEquals(sum(), 0); }); }); 定義したテストコードはdeno testコマンドで実行することが出来ます。...

April 17, 2022

2021/04/04〜2022/04/10の最新情報

Deno v1.20.5 Deno v1.20.5がリリースされました。 deno lspの新機能 deno lspでTesting APIがサポートされています (https://code.visualstudio.com/api/extension-guides/testing) vscodeでTesting: Focus on Test Explorer Viewコマンドを実行すると、テストファイルに含まれるテストケースの一覧を表示できます。 Deno.Listenerにrefとunrefメソッドが追加 (unstable) unref()が呼ばれたListenerはプロセスの終了をブロックしなくなります (タイマにDeno.unrefTimerを呼んだときと同様の挙動をします) 後述するdeno_std/node/netでのServer.ref()の実装で利用されています。 バグ修正 SubtleCrypto.exportKey()でextractable: falseに設定されたキーをエクスポートできてしまう問題が修正されました (https://github.com/denoland/deno/issues/14215) --compatを指定してdeno installを実行した際に、--compatフラグが維持されない問題が修正されました。 https://github.com/denoland/deno/releases/tag/v1.20.5 deno_std v0.134.0 deno_std v0.134.0がリリースされました。 encoding/csvやnodeモジュールへの機能の追加が行われています。 encoding/csv CSVStreamが追加されました。 import { CSVStream } from "https://deno.land/std@0.134.0/encoding/csv/stream.ts"; const file = await Deno.open("path/to/data.csv"); const stream = file.readable .pipeThrough(new TextDecoderStream()) .pipeThrough(new CSVStream()); for await (const record of stream) { console.log(record); } node child_process: ChildProcess....

April 10, 2022

2021/03/28〜2022/04/03の最新情報

Supabase Functions SupabaseでSupabase FunctionsというFaaSが利用できるようになりました。 Supabase FunctionsはDeno Deployをベースにしており、TypeScriptなどを利用してコードを記述できるようです。 Supabase Functions on Deno Deploy Edge Functions are now available in Supabase Deno v1.20.4 Deno v1.20.4がリリースされました。 変更点: 外部モジュールのimport時にリダイレクトが発生すると、deno compileで生成したバイナリがうまく動作しなくなる問題が修正されました。 Deno v1.20.3で非推奨化されたfetch()のシグネチャが修正されました。 変更前: function fetch( input: URL, init?: RequestInit, ): Promise<Response>; 変更後: function fetch( input: URL | Request | string, init?: RequestInit, ): Promise<Response>; deno lspでdeno.jsoncなどの拡張子が.jsoncのファイルがウォッチされない問題が修正されました。 deno taskコマンドでのPATHEXT環境変数の取り扱いが改善されました。 https://github....

April 3, 2022

2021/03/21〜2022/03/27の最新情報

Deno v1.20.2 permissionsオプションへの破壊的変更について Deno v1.20で行われる予定であったpermissionsオプションへの破壊的変更が正式に反映されました。 詳細については下記を参照ください。 Deno v1.20 deno taskコマンドの改善 deno taskコマンドの内部で使われているdeno_task_shellがアップデートされています。 これにより、cp -Rや|&のサポートなどが行われています。 deno_task_shell v0.2.0 deno lspでenablePathsオプションがサポート deno lspでenablePathsオプションがサポートされました。 ワークスペース内の特定のフォルダでのみdeno lspを有効化したいが、それ以外のフォルダでは組み込みのJavaScript/TypeScriptランゲージサーバを使いたいようなときに設定することが想定されているようです。 https://github.com/denoland/vscode_deno/releases/tag/3.11.0 その他の変更 --unstableなしでdeno benchを実行した際のエラーメッセージが改善 deno upgradeコマンドでDENO_CERT環境変数による証明書の指定がサポート HTTPサーバのパフォーマンスチューニング など https://github.com/denoland/deno/releases/tag/v1.20.2 Deno v1.20.3 Deno v1.20.2に続けて、v1.20.3もリリースされています。 セキュリティに関する修正が含まれるので早めのアップデートが推奨されています。 変更点: Denoはfetchの第一引数としてURLの指定をサポートしていますが、この形式での呼び出しが非推奨化されました。 (v2で削除される予定のようです) FFI関連の各API(Deno.UnsafeFnPointer#callなど)でちゃんと--unstableオプションが与えられているかチェックされるよう変更されました。 Deno.RunOptionsのcmdプロパティがreadonlyに変更されました。 https://github.com/denoland/deno/releases/tag/v1.20.3 deno_std v0.131.0 deno_std v0.131.0がリリースされました。 collections BinaryHeapが追加されました。 import { BinaryHeap } from "https://deno.land/std@0.132.0/collections/binary_heap.ts"; const heap = new BinaryHeap<number>(); heap....

March 27, 2022

2021/03/14〜2022/03/20の最新情報

Deno v1.20 Deno v1.20がリリースされました。 詳しくは下記の記事を参照ください: Deno v1.20 deno_std v0.130.0 deno_std v0.130.0がリリースされました。 std/testing/assertsモジュールでassertInstanceOfが実装されました。 import { assertInstanceOf } from "https://deno.land/std@0.130.0/testing/asserts.ts"; assertInstanceOf(new Date(), Date); // OK assertInstanceOf(/abc/, RegExp); // OK assertInstanceOf("baz", Number); // NG その他にもstd/nodeでのfs.writevSyncの実装などが行われています。 https://github.com/denoland/deno_std/commit/dbccc64488bbcc2bc540b833488b9bb97c11e1cb IndexedDBサポートについて Deno本体にIndexedDBを追加するPRが作成されています。 feat(ext/webstorage): IndexedDB (#14035) 内部的にはlocalStorageなどと同様にSQLiteを使用して実装されているようです。 近い将来にリリースされる可能性があるかもしれません。 https://github.com/denoland/deno/pull/14035 deno-sqlite v3.3.0 deno-sqlite v3.3.0がリリースされました。 DBクラスにexecuteメソッドが追加されています。 これを使うと、複数のSQLステートメントをまとめて実行することができます。 import { DB } from "https://deno.land/x/sqlite@v3.3.0/mod.ts"; const db = new DB(":memory:"); db.execute(` CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT ); INSERT INTO users (name) VALUES ('foo'), ('bar'); `); for (const [id, name] of db....

March 20, 2022

2021/03/07〜2022/03/13の最新情報

Deno v1.19.3 Deno v1.19.3がリリースされました。 deno test --docでtypescriptやjavascriptタイプのコードブロックをチェックできるようになりました。 ```ts let str: string = 0; ``` だけでなく ```typescript let str: string = 0; ``` のようにコードブロックを記述した際もテストが行われるようになります。 また、パフォーマンスチューニングも実施されており、atobとbtoaのパフォーマンスが最大で20倍まで高速化されています。 その他には古いバージョンのglibcを搭載するプラットフォームのサポートが行われています。 https://github.com/denoland/deno/releases/tag/v1.19.3 deno_std v0.129.0 deno_std v0.129.0がリリースされました。 streams deno_stdのWeb streams APIへの移行の一環として、streams/bufferモジュールが追加されました。 現時点では、以下のクラスが提供されています: Buffer (std/io/bufferのBufferクラスのstreams APIバージョン) LimitedTransformStream (std/io/readersのLimitedReaderのstreams APIバージョン) LimitedBytesTransformStream (std/io/readersのLimitedReaderのstreams APIバージョン) また、streams/delimiterモジュールにTextDelimiterStreamが追加されています。 testing/asserts assertStrictEquals()のシグネチャがAssertion Functionsを使用した形式に変更されています。 具体的には下記コードが動くようになります: const a = { name: "foo" }; const b = a as unknown; assertStrictEquals(b, a); b....

March 13, 2022

2021/02/28〜2022/03/06の最新情報

Deno v1.19.2 Deno v1.19.2がリリースされました。 リモートスクリプトでのdeno.json(c)の自動読み込みが無効化 Deno v1.18でdeno.json(c)の自動読み込みがサポートされました。 このリリースでは、リモートスクリプト実行時のdeno.json(c)の自動探索が無効化されています。 リモートスクリプトを実行する際に、ローカルのdeno.json(c)が読まれてしまうことによる不整合を防止することが目的のようです。 Proposal: disable auto-discovery of config file for deno run deno testの実行時はデフォルトで--no-promptが有効化 Deno v1.19で--promptがデフォルトで有効化されました。 しかし、deno testの実行時は--promptオプションの必要性が薄いため、このリリースで無効化されています。 その他の変更点 deno replでnullが適切に表示されない問題が修正されました。 非TTY環境でconsoleを使用した際の色付けが無効化されない問題が修正されました。 https://github.com/denoland/deno/releases/tag/v1.19.2 deno_std v0.128.0 deno_std v0.128.0がリリースされました。 新機能 streamsモジュールにTextLineStreamが追加されています。 import { TextLineStream } from "https://deno.land/std@0.128.0/streams/delimiter.ts"; const file = await Deno.open("./path/to/file.txt"); const readable = file.readable .pipeThrough(new TextDecoderStream()) .pipeThrough(new TextLineStream()); for await (const line of readable) { console....

March 6, 2022

2021/02/21〜2022/02/27の最新情報

Deno v1.19.1 Deno v1.19.1がリリースされました。 新機能としてDeno.dlopenでstatic変数の参照がサポートされています。 Deno.ForeignStatic その他にも、deno compileで--import-mapオプションがうまく動かなくなっていた問題が修正されています。 https://github.com/denoland/deno/releases/tag/v1.19.1 deno_std v0.127.0 deno_std v0.127.0がリリースされました。 dotenvの追加 deno-dotenvモジュールがdeno_stdにマージされました。 マイグレーション手順も公開されているので、もしdeno-dotenvを利用されていた場合は参考にするとよさそうです。 async/abortableの追加 Promiseをキャンセルできるようにするためのユーティリティが追加されています。 import { abortable } from "https://deno.land/std@0.127.0/async/abortable.ts"; import { delay } from "https://deno.land/std@0.127.0/async/delay.ts"; const controller = new AbortController(); const promise = delay(5000); setTimeout(() => controller.abort(), 2000); await abortable(promise, controller.signal); // => AbortError node fs: fs.realpath.nativeが追加されました。 tls: tls.createServerの基本的なサポートが追加されました。 その他 http/file_server: serveDir関数が追加されました。 testing/aserts: assertAlmostEqualsが追加されました。 https://github.com/denoland/deno_std/releases/tag/0.127.0 deno.json(c)でのImport Mapサポートについて deno....

February 27, 2022