2022/10/03〜2022/10/09の最新情報

Deno v1.26.1 Deno v1.26.1がリリースされました。 Node-APIの実装 DenoでNode-APIが実装されました。 Node-APIで実装されたアドオンのrequire()での読み込みがサポートされます。 Node-APIを有効化するためには、今のところ、--allow-ffiの指定が必要なようです。 (ただし、将来的にオプションが変わる可能性はあるようです) いまのところ、lightningcssやlz4-napiなどが動作することが確認されているようです。(napi-rs/napi-rs#900) Node.js互換に関する改善 Node-APIの実装以外に関する改善として、npm:経由で読まれたパッケージの依存関係の解析結果がキャッシュされるようになりました。 これにより、キャッシュが存在する場合は、Viteの起動が3倍近く高速化されているようです。 キャッシュの仕組みはSQLiteをベースに実装されており、$DENO_DIR/node_analysis_cache_v1にデータベースが作成されます。 その他の改善として、deno cacheでのnpm:のサポートやrequire()でのJSONファイルの読み込みなどがサポートされています。 Web Cache APIのバグ修正 Deno v1.26で追加されたCache APIに関するバグ修正が実施されています。 Cache.put()に渡したResponseオブジェクトがconsumed状態にならない問題が修正 Cache.put()に渡したResponseに紐づくReadableStreamの読み込みでエラーが起きると、リソースリークが発生する問題が修正 Cache.put()で書き込みに失敗したときに、中途半端にキャッシュが保存されないように改善 その他の修正 --unstableを付けないと、Deno.hostname()がundefinedになる問題が修正 (Deno.hostname()はDeno v1.26で安定化されています) リクエストボディの読み込みが最適化 (perf(ext/fetch): consume body using ops (#16038)) 一度、Request#text()などでリクエストボディを消費したにも関わらず、再度Request.bodyを参照するとRequest.bodyUsedがfalseに戻ってしまう問題が修正 Deno.serve()で、ステータスコードが204の際はContent-Lengthが設定されないように修正 SubtleCrypto.deriveBits()でlength引数に与えられた長さが考慮されない問題が修正 https://github.com/denoland/deno/releases/tag/v1.26.1 deno_std v0.159.0 deno_std v0.159.0がリリースされました。 std/textprotoの非推奨化 以下の理由などから、std/textprotoが非推奨化されました。 現在はdeno_stdの内部で使われていないこと deno_stdの方針として、GoスタイルのAPI(Deno.Reader/Deno.Writer)からWeb Streams APIベースへ移行されていること 今後は、このモジュールの使用は避けることが推奨されます。 std/streams/conversion: iterateReaderのバグ修正 iterateReaderに長年存在していたバグが修正されています。 具体的な修正内容については、以下の記事で詳細に内容が解説されています。 Deno のめっちゃ難しいバグを修正した - Qiita また、この修正に関連してiterateReader()の実装が効率化されています。(perf(streams): memory optimizations by avoiding large buffer allocation in a loop (#2748))...

October 9, 2022

2021/06/27〜2022/07/03の最新情報

Deno v1.23.2 Deno v1.23.2がリリースされました。 スレッドセーフコールバックのサポート(FFI) 例えば、メインスレッドで登録したコールバック(Deno.UnsafeCallback)をWorkerスレッドから呼び出したり、その逆にWorkerスレッドで登録したコールバックをメインスレッドから呼び出すことができるようになりました。 また、Deno.UnsafeCallbackにrefとunrefメソッドが実装されており、refを呼ぶことでDenoプロセスの停止を防止することができます。(Deno.refTimerなどと同様の挙動) https://github.com/denoland/deno/pull/14942 その他の変更点 FFIで空のArrayBufferを渡すとプロセスパニックする問題が修正されています。 deno lspのdeno/cacheメソッド(vscode-denoだとDeno: Cache Dependenciesコマンド)で依存関係をキャッシュした際に、TypeScriptのランゲージサービスが自動で再起動されるようになりました。 Deno.bench()やDeno.test()を含むファイルをdeno runで実行すると、エラーが発生する問題が修正されています。 https://github.com/denoland/deno/releases/tag/v1.23.2 deno_std v0.146.0 deno_std v0.146.0がリリースされました。 collections: BSTreeとRBTreeのリネーム collectionsモジュールで提供されているBSTreeがBinarySearchTreeに、RBTreeがRedBlackTreeにリネームされています。 その他の変更点 testing/asserts: assertEqualsで同じ要素を持つSet同士を比較しているにも関わらず、例外が発生するケースがあったため、修正されています。 streams/delimiter: TextLineStreamで大きなチャンクを処理する際にMaximum call stack size exceededエラーが発生することがある問題が修正されました。 node/util: util.inspect()やutil.format()で6つを超える要素数の配列が正しくフォーマットされるように修正されています。 https://github.com/denoland/deno_std/releases/tag/0.146.0 JITコンパイラによるFFIの最適化 Deno本体へのJITコンパイラの導入により、FFIバインディングを最適化するPRが作成されています。 perf(ext/ffi): JIT compiler for FFI (#15006) 内部的には、tinyccが使用されているようです。 https://github.com/denoland/deno/pull/15006 Fresh v1 Fresh v1.0.0がリリースされました。 これに合わせて、Freshのリポジトリがdenoland organization配下に移動されています。 また、Deno公式でFreshの紹介記事が公開されています。 Fresh 1.0 https://github.com/denoland/fresh denoland/meet-me Deno公式で、Calendlyのクローンアプリが公開されています。...

July 3, 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/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/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/02/07〜2022/02/13の最新情報

--promptオプションの挙動をデフォルト化するPRがマージされました Denoで--promptオプションをデフォルトで有効化するPRがマージされました。 feat: prompt by default (#13650) 次のDeno v1.19でリリースされる可能性がありそうです。 また、この変更に合わせて、--no-promptオプションが追加されています。 このオプションを指定することで、今まで通り、 許可されていないAPIを実行しようとすると、即時にエラーが発生します。 ファイルシステムやネットワーク関連APIでのStreams APIのサポートについて Denoのファイルシステム(Deno.File)やネットワーク(Deno.Conn)関連のAPIでStreams APIをサポートすることが検討されています。 Make FS and net APIs work well with WHATWG streams (#13614) まだドラフトの段階ですが、すでにPRも作成されています。 feat(runtime): web streams in fs & net APIs (#13615) 背景: 現在、Denoのファイルシステムやネットワーク関連のAPIはGoのスタイルに従っています(Deno.Reader/Deno.Writer) しかし、これらのAPIはfetch()やStreams APIと互換性がありません (一応、この差異を吸収するためにdeno_std/streamsが提供されていたりします) この問題を解消するため、Deno.FileやDeno.Connなどにreadableプロパティ(ReadableStream<Uint8Array>型)やwritableプロパティ(WritableStream<Uint8Array>型)を追加することが検討されています。 N-APIの実装について DenoでN-APIの実装が開始されています。 Implement NAPI (#13633) まだドラフトの段階でありリリース時期も未定ですが、進捗は上記のPRから確認できるので、気になる方はSubscribeするとよいかもしれません。 Deno.umask()の削除について Deno.umask()を削除するPRが作成されています。 chore: remove Deno.umask (#13639) 背景としては、競合状態によるバグが存在するためのようです。 詳しくは以下のissueを参照ください。 Proposal: Remove (unstable) Deno....

February 13, 2022

2021/01/10〜2022/01/16の最新情報

Deno v1.17.3 Deno v1.17.3がリリースされました。 このリリースでは、バグ修正を中心に実施されています。 変更点: deno installで--allow-allを付与した際に、パーミッションが分解されてスクリプトが作成されないように修正されました。 具体的には、今まではdeno installで--allow-allを指定すると、下記のようなスクリプトが作成されていました。 #!/bin/sh # generated by deno install exec deno run --allow-read --allow-write --allow-net --allow-env --allow-run --allow-ffi --allow-hrtime --quiet --unstable 'http://localhost:3000/bin.ts' "$@" この形式でスクリプトが作成されてしまうと、将来的に新しい--allow-*オプションが導入された際などにスクリプトが意図した通りに動作しなくなってしまうため、この修正が実施されました。 deno bundleやdeno compileの--outputオプションにディレクトリを指定できるようになりました。 ディレクトリを指定した際は、バイナリ名は自動で推論されるようです。 deno coverageコマンドで型チェックが行われなくなりました。 あるモジュールが複数のファイルからimportされていた場合などに、適切にカバレッジが収集されなくなる問題が修正されました。 WorkerでDeno.memoryUsage()が使えない問題が修正されました。 lib.deno_core.d.tsのエラーが修正されました。 https://github.com/denoland/deno/releases/tag/v1.17.3 deno_std v0.121.0 deno_std v0.121.0がリリースされました。 変更点: crypto: MD4がサポートされました。 http/file_server: --quietオプションによりログ出力を無効化できるようになりました。 node: zlibパッケージが実装されました。 node/fs: fs.write()とfs.writeSync()が実装されました。 node/http: ClientRequest#abortが実装されました。また、'response'イベントが発火されるように修正されました。 node/url: url....

January 16, 2022

2021/11/01〜2021/11/07の最新情報

2021年のDeno Advent Calendarが公開 Qiitaで2021年のDeno Advent Calendarが公開されました。 https://qiita.com/advent-calendar/2021/deno deployctlがアーカイブ Deno Deployのコマンドラインツールであるdeployctlがアーカイブされました。 今後は代わりにDeno CLIを使って開発していくようアナウンスされています。 Deno Deploy Beta 3が来たぞ Freshのアップデート PreactベースのWebフレームワークであるFreshがアップデートされ、MiddlewareとCSPのサポートが追加されました。 Middlewareサポート Middlewareを利用する際は、pagesディレクトリ配下に下記のいずれかの名前のファイルを用意し、handler関数をexportする必要があります。 /_middleware.tsx /_middleware.ts /_middleware.jsx /_middleware.js export async function handler(req: Request, handle: () => Promise<Response>) { const start = Date.now(); const resp = await handle(); const end = Date.now(); console.log(`${req.method}${req.url}- ${end - start}ms`); return resp; } CSPサポート CSPサポートを有効化したいときは、対象ページでcspオプションにtrueを設定したconfigオブジェクトをexportします。 import type { PageConfig } from "....

November 7, 2021

2021/10/25〜2021/10/31の最新情報

Deno v1.15.3 Deno v1.15.3がリリースされました。 このリリースはバグ修正がメインです。 変更点: TLS接続関連のAPIで発生することのあるプロセスのハングや大きなデータの書き込みがうまくいかない問題などが修正されました Deno.emitでalready borrowed: BorrowMutErrorが発生する問題が修正されました globalThis経由でFormDataなどのWeb APIを参照しようとすると型エラーが発生する問題が修正されました など https://github.com/denoland/deno/releases/tag/v1.15.3 deno_std v0.113.0 deno_std v0.113.0がリリースされました。 変更点: collections: runningReduceに渡すreducer関数にcurrentIndexが渡されるようになりました testing/asserts: assertIsErrorが追加されました node/module: require()でnode:プレフィックスがサポートされました const EventEmitter = require("node:events"); node/module: Common JSモジュールの中でimport/exportを使用した際の警告メッセージが親切になりました node/url: url.urlToHttpOptionsが実装されました node/os: os.archの返却値がNode.jsに一致するように修正されました node/events: onとemitメソッドを非EventEmitterオブジェクトに束縛して実行できるようになりました http/file_server: ファイル一覧ページでパンくずリストが表示されるようになりました http/file_server: ファイル名に%記号などが含まれている場合、そのファイルに適切にアクセスできない問題が修正されました http/file_server: 200や206以外のレスポンスを返却する際に生じるリソースリークが修正されました http/file_server: エラーログに色がつくようになりました...

October 31, 2021

2021/08/30〜2021/09/05の最新情報

Aleph.js v0.3.0-beta.9 Aleph.jsのv0.3.0-beta.9がリリースされました。 主な変更点として、サーバから返却されるCache-Controlの値がpublic, max-age=0, must-revalidateに変更されています。 また、このリリースに合わせてWindi CSS向けのプラグインが公開されています (https://github.com/ije/aleph-plugin-windicss) https://github.com/alephjs/aleph.js/releases/tag/v0.3.0-beta.9 https://github.com/ije/aleph-plugin-windicss Deno Deploy Beta2 Deno DeployのBeta2がリリースされました。 変更点: Deno.readFileによって、デプロイに紐づくGitHubリポジトリ内のファイルの読み込みがサポートされました Deno.listenとDeno.serveHttpがサポートされました インスタンスがクラッシュした際のデバッグを容易にするため、クラッシュレポートが追加されました https://deno.com/blog/deploy-beta2 Deno Deploy Beta 2が来たぞ deployctl v0.4.0 Deno Deployのコマンドラインツールであるdeployctlのv0.4.0がリリースされました。 このリリースでは、コマンドの実行時に新バージョンを通知する機能が実装されています。 また、現時点では、このバージョンをインストールする際に--unstableが必要になります。 https://github.com/denoland/deployctl/releases/tag/0.4.0 Ultra UltraというDeno+ReactベースのWebフレームワークが公開されました。 まだメジャーリリースはされていませんが、以下のような特徴があるようです。 ReactDOM.renderToReadableStreamベースのSSR Viteなどと同様のオンデマンドでのコード変換 (SWCやesbuildがベース) SWR向けのキャッシュプロパイダを提供 /examplesディレクトリに使用例があるため、もし興味がありましたら見てみるとよいかもしれません。 https://github.com/exhibitionist-digital/ultra

September 5, 2021