2021/05/09〜2022/05/15の最新情報

Deno v1.21.3 Deno v1.21.3がリリースされました。 deno task deno task <タスク名>の<タスク名>の直後に--から始まるオプションを指定できない問題が修正されました。 その他の修正 Deno.connectTlsで作成したTLSコネクションを閉じる前に、ハンドシェイクが完了することが保証されるようになりました。 その他にも、Windows上で標準出力や標準エラー出力にマルチバイト文字を書き込んだ際の挙動の改善などが実施されています。 https://github.com/denoland/deno/releases/tag/v1.21.3 deno_std v0.139.0 deno_std v0.139.0がリリースされました。 encoding/jsonc deno_stdにJSONCパーサが実装されました。 import { parse } from "https://deno.land/std@0.139.0/encoding/jsonc.ts"; console.log(parse(`{ // hello "foo": 1 }`)); // => { foo: 1 } node dnsパッケージで以下のAPIが実装されました。 dns.Resolver dns.setServers / dns.getServers dns.resolveAnyやdns.resolve4などの問い合わせAPI また、netパッケージでUnixドメインソケットがサポートされています。 testing/snapshot assertSnapshotにオプションを渡せるようになりました。 例えば、dirオプションによってスナップショットの保存先ディレクトリなどをカスタマイズできます。 await assertSnapshot(t, actual, { dir: "testdata" }); https://github.com/denoland/deno_std/releases/tag/0.139.0 --no-configオプションのサポートについて deno.json(c)の自動的な読み込みを無効化するために、--no-configオプションを追加するPRが作成されています。 feat: add –no-config flag (#14555)...

May 15, 2022

2021/05/02〜2022/05/08の最新情報

Deno v1.21.2 Deno v1.21.2がリリースされました。 変更点: lib.dom.extras.d.tsが追加されました。 lib.dom.d.tsを読み込んでもURLPatternが利用できない(型エラーが発生する)問題を解消するための修正です。 このファイルには、URLPatternに関する型定義が含まれています。 lib.dom.d.tsを読み込むと自動でこのファイルも読み込まれます。 deno test --coverageによる計測対象から.snapファイルが除外されるように修正されました。 (deno_stdでスナップショットテスティングがサポートされたため) HTTPサーバ(Deno.serveHttp)でレスポンスボディにReadableStreamを指定した際に、対象のリソースが自動で閉じられない問題が修正されました。 deno taskでタスクの引数に-を含むオプションを指定した際に、そのオプションが適切に渡されない問題が修正されました。 deno testやdeno benchの引数にfile:形式のURLを指定すると、プロセスがパニックする問題が修正されました。 https://github.com/denoland/deno/releases/tag/v1.21.2 deno_std v0.138.0 deno_std v0.138.0がリリースされました。 testing assertSnapshot()(testing/snapshot)で複数行に渡る文字列の取り扱いが改善されました。 その影響により、deno_stdをv0.138.0にアップデートするとテストが失敗する可能性があります。 その場合は--updateオプションでスナップショットを更新する必要あります。 その他にも、testing/assertsモジュールにassertFalse()が追加されています。 node dns/promisesパッケージのlookup()が実装されました。 moduleパッケージをWorkerから読み込むとプロセスがハングする問題が解消されました。 bytes bytes/equalsパッケージから今までprivateであったequalSimd()とequalsNaive()が公開されました。 https://github.com/denoland/deno_std/releases/tag/0.138.0 Denoの全コマンドで--no-check=remoteをデフォルトの挙動にする 下記のissueでdeno runなどの各コマンドで--no-check=remoteオプションの挙動をデフォルト化することが提案されています。 –no-check=remote on by default for all subcommands (#14498) 現在、例えばdeno runを実行すると、デフォルトではリモートモジュールも含めて全TypeScriptファイルが型チェックされます。 この--no-check=remoteの挙動がデフォルト化された場合、ローカルのTypeScriptファイルのみが型チェックされるように挙動が変わります。 今のところ、この変更はDeno v1.22でのリリースが想定されているようです。 また、Deno v1.23ではdeno runなどの各コマンドでの型チェックがデフォルトで無効化されることが予定されています。(型チェックを行いたいときはdeno checkコマンドを利用します) https://github.com/denoland/deno/issues/14498 deno testコマンドの--docオプションをデフォルトで有効化する deno testコマンドには--docオプションを付与することで、MarkdownファイルやJSDocコメント中のコードブロックに対して型チェックを行う機能があります。...

May 8, 2022

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

Deno v1.21

Deno v1.21がリリースされました。 この記事では新機能や修正点などについて解説します。 deno checkコマンドの導入 新しいコマンドとしてdeno checkコマンドが追加されました。 挙動としては基本的にdeno cacheコマンドと同等で、与えられたモジュールの型チェック及びリモートモジュールのダウンロードを行います。 $ deno check mod.ts deno cacheコマンドとの違い deno cacheコマンドとの大きな違いとして、deno checkコマンドはデフォルトではリモートモジュールの型チェックを行いません。 deno checkコマンドでリモートモジュールの型チェックも行いたい場合は--remoteオプションを指定する必要があります。 deno runコマンドでの型チェックについて deno checkコマンドの追加による影響として、将来的にdeno runコマンドではデフォルトで型チェックが行われなくなる予定です。(Deno v1.21時点でもDENO_FUTURE_CHECK=1環境変数を設定することで、この挙動を有効化できます) 型チェックを行いたいときは、今回追加されたdeno checkコマンドまたはdeno run --checkで明示的に行う必要が出てきます。 新しいサブプロセスAPI (unstable) DenoにはDeno.run()というサブプロセスを生成するためのAPIがありますが、今回、新しく3種類のAPIが追加されました: Deno.spawn() (高レベル) Deno.spawnChild() (低レベル) Deno.spawnSync() (Deno.spawnの同期版) これらのAPIの利用にはDeno.run()と同様に--allow-runパーミッションが必要です。 また、これらのAPIの追加により、Deno.run()は非推奨化される予定のようです。 Deno.spawn() これは高レベルAPIという位置づけです。 指定したコマンドを実行し、そのコマンドの実行結果(status)や標準出力(stdout)及び標準エラー出力(stderr)への出力内容を返却してくれます。 const { stdout, status } = await Deno.spawn("echo", { args: ["foo"], }); console.assert("foo\n" === new TextDecoder().decode(stdout)); console.assert(status.success); コマンドの出力結果のみが必要で、細かな制御はいらない場合に便利かと思います。 Deno.spawnChild() こちらは低レベルAPIという位置づけです。 Deno.Reader/Deno.WriterではなくReadableStream/WritableStreamをベースに実装されています。 const child = Deno....

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