2021/05/30〜2022/06/05の最新情報

Deno v1.22.2 Deno v1.22.2がリリースされました。 主な変更点: Deno.getGid()が実装されました。(unstable) POSIX系プラットフォームではプロセスのグループIDが、Windowsではnullが返されます。 利用するには--allow-envの指定が必要です。 Error.captureStackTrace()の型定義が追加されました。 Crypto.getRandomValues()の型定義が改善されました。(BigInt64ArrayやBigUint64Arrayが受け取れず、Float32ArrayやFloat64Arrayが引数として受け取れてしまう問題が解消されています) https://github.com/denoland/deno/releases/tag/v1.22.2 deno_std v0.142.0 deno_std v0.142.0がリリースされました。 FNVのサポート (crypto) cryptoモジュールでFNVが実装されました。 import { crypto } from "https://deno.land/std@0.142.0/crypto/mod.ts"; // ... const digest = await crypto.subtle.digest("FNV32", input); media_typesモジュールの追加 deno_stdにmedia_typesモジュールが追加されました。 import { contentType } from "https://deno.land/std@0.142.0/media_types/mod.ts"; contentType(".js"); // => "application/javascript; charset=UTF-8" contentType("application/json"); // => "application/json; charset=UTF-8" このモジュールは、以前にもdeno_stdに存在するモジュールの一部でしたが、一度削除されています。 その後、メンテナンスはoakserver/media_typesのリポジトリに引き継がれていました。 このリリースで改めてmedia_typesモジュールが復帰したため、oakserver/media_typesのリポジトリはアーカイブされています。 TextLineStreamにallowCRオプションが追加 (streams/delimiter) このオプションにtrueを指定したときのみCRが取り扱われるように変更されています。 前回のリリースで、デフォルトでCRが取り扱われるように修正されましたが、デフォルトの挙動を変えてしまうのはまずいということで、このオプションが追加されました。 https://github.com/denoland/deno_std/releases/tag/0.142.0 oak_commonsパッケージの機能のdeno_stdへの移行 現在、oak_commonsパッケージで提供されていた機能の一部をdeno_stdへ移植するPRが作成されています。 例)...

June 5, 2022

2021/05/23〜2022/05/29の最新情報

Deno Deploy Beta 4 Deno Deploy Beta 4が発表されました。 このリリースに合わせて、有料のProプランが公開されています。 詳しくは、以下の記事で価格設定などについて解説されています。 deno deploy beta 4発表!価格設定をcloudflare workersと比較する その他にも、ダッシュボードがリニューアルされています。 リクエストごとの平均CPU時間の可視化やログのUIの改善などが実施されています。 https://deno.com/blog/deploy-beta4 Deno v1.22.1 Deno v1.22.1がリリースされました。 このリリースはバグ修正を中心に行われています。 主な変更点: Deno.ChildStatus.signalの型がstringからDeno.Signalに変更されました。 deno test --coverageで、interfaceのみを含むファイルなどで計測結果がNaN%と表示される問題が修正されました。 WebSocket.closeを呼ぶと"close"イベントが2回発火される問題が修正されました。 globalThis.dispatchEventが改ざんされている(deleteによる削除など)と、Deno.exit()でエラーが発生する問題が修正されました。 Deno.permissions.query()などのパーミッション関連のAPIに不正な形式の引数を与えた際のエラーメッセージが改善されました。 https://github.com/denoland/deno/releases/tag/v1.22.1 deno_std v0.141.0 deno_std v0.141.0がリリースされました。 いくつかの破壊的変更が実施されています。 testing/asserts assertStrictEqualsなどの改善 assertStrictEquals / assertAlmostEquals / assertNotStrictEqualsの内部の比較処理で、===の代わりにObject.is()を使用するように修正されています。(Node.jsのassertパッケージなどと同様の挙動に変わりました。) assertEqualsなどの型定義の改善 (破壊的変更) assertEqualsやassertNotEqualsなどの型定義が修正されています。 例えば、下記のように異なる型の値同士を比較すると、型エラーが発生します。 assertEquals(123, "foo"); 次のようにすると、型エラーを回避できます。 assertEquals<unknown>(123, "foo"); assertRejectsやassertThrowsの戻り値の変更 assertRejectsやassertThrowsで補足された例外が戻り値として返却されるように修正されました。 const error = assertThrows(() => { throw new Error("foo"); }); assert(error instanceof Error); assertEquals(error....

May 29, 2022

2021/05/16〜2022/05/22の最新情報

Deno v1.22 Deno v1.22がリリースされました。 変更点については以下の記事にまとめたため、詳しくはこちらを参照いただければと思います。 Deno v1.22 deno_std v0.140.0 deno_std v0.140.0がリリースされました。 http serve関数などにonListenオプションが追加されています。 このオプションに関数を設定しておくと、サーバ起動時にそれが呼ばれます。 import { serve } from "https://deno.land/std@0.140.0/http/server.ts"; serve(() => Response.json({ message: "hello" }), { onListen({ port }) { console.log(`Listening on port ${port}`); }, }); collections/deep_merge deepMerge関数で、循環参照のあるオブジェクトなどで無限ループが発生する問題が修正されています。 testing/asserts assertRejects()に渡した関数が同期的に例外を投げた場合に成功と扱われてしまう問題が修正されました。 await assertRejects(() => { throw new Error("foo"); }); // => rejectされたPromiseが返されていないため、エラー https://github.com/denoland/deno_std/releases/tag/0.140.0 SQLバイディング Deno本体でSQLバインディングを公開するPRが作成されています。 experiment(runtime): expose SQLite bindings (#14627) まだ実際にリリースされるかどうかは不明ですが、今のところ、下記のようにしてクエリを発行できる想定のようです。...

May 22, 2022

Deno v1.22

Deno v1.22がリリースされました。 この記事では、主な変更点についてまとめていきます。 リモートモジュールの型チェックがデフォルトで無効化 deno runやdeno testなどの各コマンドでリモートモジュールの型チェックがデフォルトで無効化されました。 今後はローカルのTypeScriptファイルのみが型チェックされます。 もしリモートモジュールの型チェックも必要な際は--check=allオプションまたはdeno check --remoteを使用します。 また、次のv1.23のリリースでは、deno runやdeno cacheではデフォルトで一切型チェックが行われなくなる予定です。 (deno checkコマンドや--checkオプションなどで明示的に型チェックする必要があります) 例えば、CIでdeno cacheコマンドを実行して型チェックを行っている場合などは、今のうちにdeno checkコマンドに移行しておくとよいと思います。 # mod.tsの型チェックを行う $ deno check mod.ts # deno run実行時に型チェックも行う $ deno run --check main.ts 設定ファイルの読み込みの無効化 Denoはエントリポイントが存在するディレクトリまたはその上位のいずれかのディレクトリにdeno.json(c)というファイルが存在する場合、それを自動で読み込みます。 このリリースでは、新しく--no-configオプションがサポートされました。 このオプションを指定すると、deno.json(c)の自動探索を無効化できます。 $ deno run --no-config main.ts (破壊的変更) Worker内でデフォルトでDeno APIが有効化 今までは、Worker内でDeno.readFileなどのAPIを使用したい場合は、denoオプションによって明示的に有効化する必要がありました。 new Worker(new URL('./worker.js', import.meta.url).href, { deno: { namespace: true }, // Deno APIの使用を有効化 type: "module" }); 今後は上記のようにオプションを指定しなくても、Worker内で常にDenoのAPIを参照できます。 new Worker(new URL('./worker.js', import.meta.url).href, { type: "module" }); また、この変更の影響により、WorkerOptions....

May 22, 2022

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