2021/06/13〜2022/06/19の最新情報

Deno v1.23 Deno v1.23がリリースされました。 以下の記事に変更点をまとめたため、詳しくはこちらを参照いただければと思います。 Deno v1.23 deno_std v0.144.0 deno_std v0.144.0がリリースされました。 encoding/front_matter 新規モジュールとしてencoding/front_matterが追加されました。 import { extract } from "https://deno.land/std@0.144.0/encoding/front_matter.ts"; const { attrs, body } = extract<{ title: string, date: Date }>(`--- title: foobar date: 2022-06-12 --- Hello`); console.assert(attrs.title === "foobar"); console.assert(attrs.date instanceof Date); console.assert(body === "Hello"); collections collections/mod.tsをimportすると警告が表示されるようになりました。 必要に応じて、collections/deep_mergeやcollections/group_byなどの各ファイルを個別にimportすることが推奨されます。 node process.stdoutとprocess.stderrに下記メソッドが実装されています。 cursorTo moveCursor clearLine clearScreenDown https://github.com/denoland/deno_std/releases/tag/0.144.0 Freshのアップデート (CLIの削除) FreshからCLIが削除されています。 feat: remove fresh cli, do manifest generation in process (#223)...

June 19, 2022

Deno v1.23

Deno v1.23がリリースされました。 この記事では主な変更点などについて解説します。 deno runやdeno cacheなどのコマンドでデフォルトの型チェックが無効化されました 下記コマンドで、デフォルトで型チェックが行われなくなります。 deno run deno cache deno eval deno repl 今後、型チェックを行いたい場合は、deno checkコマンドを使うか--checkオプションを指定する必要があります。 $ deno check mod.ts その他のdeno testなどのコマンドでは、引き続きローカルモジュールの型チェックがデフォルトで実行されます。 deno runが失敗する場合の対処方法 Denoは、型チェックを行わない場合、swcを使用してトランスパイルを行います。 その関係で、コードの実行時に、まれに問題が発生することがあるようです。 https://github.com/denoland/deno/issues/14900 問題に遭遇した場合は、--checkオプションを指定するとtscが使用されるため、問題を回避できる可能性があります。 $ deno run --check mod.ts Deno.sleepSync()の削除 Atomics.waitで代替可能であったり、イベントループを完全にブロックしてしまうなどの問題を抱えていたため、Deno.sleepSync()が削除されました。 Intl.v8BreakIteratorの削除 非標準APIであるため、Intl.v8BreakIteratorが削除されました。 代わりにIntl.Segmenterの使用が推奨されます。 deno taskコマンドの改善 --cwdオプションのサポート --cwdオプションにより、タスク実行時のカレントディレクトリを変更できるようになりました (デフォルトでは、deno.json(c)の配置場所がカレントディレクトリに設定されます) $ deno task --cwd ./src build リダイレクションのサポート タスクの定義でリダイレクションがサポートされました。 { "tasks": { "test": "echo foo > test.txt" } } また、/dev/nullにリダイレクトすると、出力が捨てられます (Windowsでも動きます)...

June 19, 2022

2021/06/06〜2022/06/12の最新情報

Deno v1.22.3 Deno v1.22.3がリリースされました。 主な変更点: fetch APIの引数にURLオブジェクト渡す形式が非推奨ではなくなりました。(TypeScript公式の型定義でもサポートされたため) // Deno v1.22.3までは、下記の形式は非推奨でした const res = await fetch(new URL("https://example.com")); Import Mapファイルなどの.jsonや.jsonc形式のファイルが変更されたときに、deno lspが自動で変更を検知してくれるようになりました。 --watchオプションで、dynamic importされるファイルが監視されない問題が修正されました。 エラー以外の値がthrowされた際にコンソールへ出力される内容が改善されました。 https://github.com/denoland/deno/releases/tag/v1.22.3 deno_std v0.143.0 deno_std v0.143.0がリリースされました。 http/http_statusでの破壊的変更について STATUS_TEXTがMap<Status, string>からReadonly<Record<Status, String>>へ変更されています。(破壊的変更) その他にも、いくつかのヘルパー関数やタイプが追加されています。 import { isErrorStatus, STATUS_TEXT } from "https://deno.land/std@0.143.0/http/http_status.ts"; STATUS_TEXT[404]; // => "Not Found" isErrorStatus(404); // => true isErrorStatus(200); // => false flagsモジュールでnegatableオプションがサポート ここで指定されたフラグのみが、--no-プレフィックスの付与による否定がサポートされます。 import { parse } from "https://deno.land/std@0.143.0/flags/mod.ts"; parse(["deno", "fmt", "--no-config"], { string: ["config"], negatable: ["config"], }); // => { _: [ "deno", "fmt" ], config: false } parse(["deno", "fmt", "--no-config"], { string: ["config"], }); // => { _: [ "deno", "fmt" ], "no-config": true } dotenvモジュールでインラインコメントがサポート #に続けてコメントを記述できます。...

June 12, 2022

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