2023/12/11〜2023/12/17の最新情報

Deno v1.39 Deno v1.39がリリースされました。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Deno v1.39 deno_std v0.209.0 deno_std v0.209.0がリリースされました。 非推奨モジュール・APIの削除 以下の非推奨化されていたモジュールやAPIが削除されています。 std/fs/eol.ts: EOLがenumから文字列("\n" | "\r\n")に変更されています。 std/async/deferred.tsが削除されています。(Deno v1.38からPromise.withResolversがサポートされたため) std/bytes/concat.ts: スプレッド形式のシグネチャ(concat(...buf: (Uint8Array | Uint8Array[])[]): Uint8Array)が削除されました。 std/collections: binary_heap.tsなどのデータ構造に関わるファイルが削除されています。 deno_std v0.207.0でstd/data_structuresが追加されていて、今回削除されたデータ構造はそちらから利用できます。 std/datetime/to_imf.tsが削除されました。(Date#toUTCString()の使用が推奨されます。) std/http/server_sent_event.tsが削除されました。(std/http/server_sent_event_stream.tsの使用が推奨されます。) 既存モジュール・APIの非推奨化 std/types.d.tsが非推奨化されました。 今後はWeb Streams APIの使用が推奨されます。 また、std/io/types.d.tsが追加されており、こちらはdeno_std v1までは維持されるようなので、もしstd/types.d.tsを利用したいケースではこちらの利用が推奨されます。 std/log: LogLevelsがenumから通常のオブジェクトへ変更されています。(これに伴い、一部フィールドが非推奨化されています。) これに合わせてLogLevel型が追加されており、v0.211.0でログレベルをnumber型として扱っていた箇所がLogLevelに変更される予定のようです。 std/front_matter: Formatが非推奨化されています。 std/webgpuが追加 Deno v1.39でのWebGPU APIの再導入に伴い、deno_stdにstd/webgpuモジュールが追加されています。 WebGPU APIに関連するユーティリティが提供されているようです。 std/netが追加 新規モジュールとしてstd/netが追加されています。 現在はgetAvailablePort()というシステムの空きポートを返してくれる機能のみが提供されています。 std/iniが追加 新規モジュールとしてstd/iniが追加されています。 INIファイルの解析やJavaScriptオブジェクトからの生成がサポートされています。...

December 17, 2023

Deno v1.39

Deno v1.39がリリースされました。 この記事では主な変更点などについて解説します。 WebGPU APIの再導入 Deno v1.32で削除されたWebGPU APIが再導入されました。 利用するにはdeno.jsonでunstable: ["webgpu"]を指定するか--unstable-webgpuオプションの指定が必要です。 { "unstable": ["webgpu"] } 以下のリポジトリではWebGPU APIに関する使用例が公開されています。 https://github.com/denoland/webgpu-examples また、この追加に合わせて、deno_stdにもWebGPU API向けのユーティリティが追加されています。(std/webgpu) deno coverage サマリー/HTMLレポーターの追加 deno coverageコマンドにサマリーレポーターとHTMLレポーターが追加されました。 サマリーレポーターは新しくdeno coverageコマンドのデフォルトで使用されるレポーターとして設定されていて、以下のような形式でレポートが出力されます。 $ deno coverage ./coverage ----------------------------------------------------------- File | Branch % | Line % | ----------------------------------------------------------- demo/components/Button.tsx | 100.0 | 0.0 | demo/fresh.gen.ts | 100.0 | 100.0 | ... 省略 ... internal/test_utils/mod.ts | 100.0 | 100.0 | server.ts | 83....

December 17, 2023

2023/12/04〜2023/12/10の最新情報

Deno v1.38.5 Deno v1.38.5がリリースされました。 Deno.Kvにwatch()メソッドが実装されています。引数として監視したいキーの一覧を指定すると、戻り値として返却されたReadableStream<Deno.KvEntryMaybe<T>[]>からそれらのキーに関する変更が通知されます。 const kv = await Deno.openKv(":memory:"); const watcher = kv.watch( [ ["users", 1], ["users", 2] ] ); (async () => { for await (const entries of watcher) { // 変更があった際は通知されます。 console.info(entries); } })(); await kv.set(["users", 1], "foo"); await kv.set(["users", 2], "bar"); await kv.set(["users", 3], "baz"); --unstable-sloppy-importsの実装について まだリリースはされていませんが、Deno本体に--unstable-sloppy-importsというオプションを導入するPRがマージされています。 feat(unstable): ability to resolve specifiers with no extension, specifiers for a directory, and TS files from JS extensions #21464...

December 10, 2023

2023/11/06〜2023/11/12の最新情報

Deno v1.38.1 Deno v1.38.1がリリースされました。 Node.js互換性の改善 require() .jsが見つからなければ.jsonも探すように挙動が改善されました。 BYONMが有効化された際に、scopedパッケージ(@foo/bar)が適切に解決されるように修正されました。 node:crypto createPrivateKey()が実装されました。 node:child_process spawnSync()でstdioオプションが適切に取り扱われるように改善されました。 これにより、execaパッケージが動くようになったようです。 node:util toUSVString()が実装されました。 deno doc --lintの出力内容の改善 deno doc --lintを実行した際の出力内容が変更されました。 今までは、lintに成功した際はAPIドキュメントが表示されました。 このリリースでは、lintに成功した際はAPIドキュメントを表示せず、チェックされたファイル数を表示するように変更されています。 $ deno doc --lint bytes/copy.ts Checked 1 file Deno.AtomicOperation#checkで指定できるキー数の増加 Deno.AtomicOperation#checkが最大で合計100個のキーまでチェックできるように改善されました。(今までは10個が最大値でした) Promise.withResolvers()の型定義の改善 Promise.withResolvers()が返すresolve関数の引数がオプショナルから必須に変更されています。 deno_std v0.206.0 deno_std v0.206.0がリリースされました。 std/async/deferred.tsが非推奨化 Deno v1.38でPromise.withResolvers()が利用できるようになったため、deferred()が非推奨化されました。 std/encoding/binary.tsが削除 非推奨化されていたstd/encoding/binary.tsモジュールが削除されています。 std/path/glob.tsに関するAPIの移動 std/path/glob.tsで提供されていた以下のAPIが移動されています。 API 移動先 isGlob std/path/is_glob.ts globToRegExp std/path/normalize_glob.ts joinGlobs std/path/join_globs.ts std/http/server_sent_event_stream....

November 12, 2023

2023/10/30〜2023/11/05の最新情報

Deno v1.38 Deno v1.38がリリースされました。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Deno v1.38 deno_std v0.205.0 deno_std v0.205.0がリリースされました。 std/httpモジュールの整理 std/http/server.tsが非推奨化されました。今後はDeno.serve()やその周辺APIへの移行が推奨されます。 また、以下の各ファイルがリネームされています。 http/http_status.ts → std/http/status.ts std/http/cookie_map.ts → std/http/unstable_cookie_map.ts std/http/http_errors.ts → std/http/unstable_errors.ts std/http/method.ts → std/http/unstable_method.ts std/http/server_sent_event.ts → std/http/unstable_server_sent_event.ts std/wasiの非推奨化 使用率が高くなかったため、std/wasiが非推奨化されました。 Deno v1.38の公式ブログではwasmer-jsへの移行が推奨されています。 非推奨化されたAPIの削除 std/dotenv: restrictEnvAccessToオプションが削除されました。 deno_std v0.201.0でのstd/dotenvの改善により必要性が低下したため std/bytes/bytes_list.tsが削除されました。 std/csv/parse.ts: 以下のAPIが削除されました。 ERR_BARE_QUOTE ERR_FIELD_COUNT ERR_INVALID_DELIM ERR_QUOTE ParseError ReadOptions std/fs/walk.ts: canonicalizeオプションが追加 walk()にcanonicalizeオプションが追加されました。 このオプションはfollowSymlinksオプションがtrueのときのみ効果を持ちます。 このオプションにfalseが設定された場合、シンボリックリンク解決後のパスが正規化されなくなります (デフォルトはtrueのため、互換性には影響ありません) std/fs/expand_glob.ts: パーミッションの取り扱いの改善 expandGlob()にrootオプションまたは絶対パスが指定された際は、ファイルシステム全体への--allow-read権限を要求しないように挙動が改善されました。 denokv v0.1.0 denokv v0....

November 5, 2023

Deno v1.38

Deno v1.38がリリースされました。 この記事では主な変更点などについて解説します。 deno doc deno doc --lint deno docコマンドで--lintオプションがサポートされました。 $ deno doc --lint mod.ts Missing JS documentation comment. at file:///home/uki00a/ghq/github.com/uki00a/some-project/mod.ts:12:3 このオプションを指定すると、DenoはAPIドキュメントを出力する前に、各APIを検査します。そして以下のようなAPIが検出された場合、APIドキュメントを出力せずにエラーを表示します。 exportされているAPIにJSDocコメントが書かれていない場合 (Missing JS documentation comment.) exportされているAPIの戻り値の型定義が省略されている場合 (Missing return type.) exportされている型のプロパティがexportされていない型を参照している場合 (Type 'foo' references type 'Bar' which is not exported from a root module.) このエラーが発生した場合、そのexportされていない型に@internalを指定することでエラーを抑止できます deno doc --html deno docでAPIドキュメントのHTML形式での出力がサポートされました。 --htmlを指定すると、docsディレクトリにHTMLが出力されます。 $ deno doc --html --name=fresh-testing-library mod.ts Written 261 files to "./docs/" docs/index.htmlを開くことで作成されたAPIドキュメントを閲覧できます。...

November 5, 2023

2023/10/23〜2023/10/29の最新情報

denoland/denokv denoland/denokvというリポジトリが公開されています。 今後、Deno KVのSQLiteバックエンドやgRPCのスキーマの定義などはこのリポジトリで開発される想定のようです。 現在、Deno本体ではdenoland/denokvへの移行が行われているようです。 chore: update ext/kv to use denokv_* crates #20986 BYONMのサポートについて Deno本体でnpmなどで作成されたnode_modulesディレクトリ(BYONM)をサポートするPRがマージされています。Deno v1.38でリリースされるかもしれません。 feat(unstable): ability to npm install then deno run main.ts #20967 ⚠️この機能は実験的機能のため、今後、使い方などに変更が入る可能性があります。 例えば、以下のようにnpmでkoaパッケージがインストールされていたとします。 $ npm i koa npmによってインストールされたkoaパッケージをnpm:なしで読み込むJavaScriptファイルを用意します。 // index.js import Koa from "koa"; const app = new Koa(); app.use(async (ctx) => { ctx.body = "Hello Deno!"; }); app.listen(3000); この状態で--unstable-byonmオプションを指定すると、npmによって作成されたnode_modulesディレクトリからkoaパッケージが読みこまれます。 $ deno run --unstable-byonm --allow-net --allow-read --allow-env index....

October 29, 2023

2023/09/25〜2023/10/01の最新情報

Deno v1.37.1 Deno v1.37.1がリリースされました。 deno lsp 現在のファイルの全依存モジュールをキャッシュするQuickFixアクションが実装されています。(Cache all dependencies of this module.) また、deno lspでリモートのImport mapsのサポートも追加されています。 deno test Deno.testやDeno.TestContext.stepなどによるテストケースの登録がDeno v1.37から2倍近くまで高速化されています。 deno jupyter: Deno.jupyter.broadcastが追加 (unstable) Denoからdisplay_dataやupdate_display_dataメッセージを送信するためのメソッドのようです。 Deno.jupyter.broadcast Deno KV Deno.Kv#enqueueのdelayオプションに設定できる最大値が30日まで増加されました。 Node.js互換性 node:crypto: randomFillSync()にArrayBufferなどを渡すと、TypeErrorが発生する問題が修正されています。 package.json: exportsフィールドがnullだった場合、プロセスがパニックする問題が修正されています。 deno_std v0.203.0 deno_std v0.203.0がリリースされました。 std/ioが非推奨化 std/ioはDeno.ReaderとDeno.Writerベースの機能が提供されていたため、非推奨化されました。 std/encoding: encode/decodeが非推奨化 std/encodingの各モジュールで提供されていたencodeとdecodeが非推奨化されています。今後は、以下の関数への移行が推奨されます。 std/encoding/ascii85.ts: encodeAscii85/decodeAscii85 std/encoding/base32.ts: encodeBase32/decodeBase32 std/encoding/base58.ts: encodeBase58/decodeBase58 std/encoding/base64.ts: encodeBase64/decodeBase64 std/encoding/base64url.ts: encodeBase64Url/decodeBase64Url std/encoding/hex.ts: encodeHex/decodeHex std/front_matter 他のモジュールとの一貫性の向上のため、以下の各ファイルで提供されていたdefault exportが非推奨化されました。 std/front_matter/any.ts std/front_matter/json.ts std/front_matter/toml.ts std/front_matter/yaml.ts std/collections - 一部関数の引数がArrayからReadonlyArrayへ変更 以下の各関数の引数がArrayではなくReadonlyArrayを受け取るように修正されています。(std/collectionsの他の関数との一貫性の向上が目的)...

October 1, 2023

2023/09/11〜2023/09/17の最新情報

Deno v1.37でリリースされそうな機能について (part 2) 前週に引き続き、直近で開発されているDeno v1.37でリリースされそうな機能について紹介いたします。 Jupyter Kernelの実装 (deno jupyter) Deno本体にJupyter Kernelを実装するPRがマージされています。 feat: Add “deno jupyter” subcommand #20337 このPRではdeno jupyterという新しいコマンドが実装されており、これを利用することで、Deno本体に組み込まれたJupyter Kernelのインストールや起動などを行うことができるようです。 このコマンドでは、以下の3つのオプションが提供されています。 オプション 説明 --install Deno本体に組み込まれたKernelをJupyterにインストールします。 --kernel Deno本体に組み込まれたKernelを起動します。以下の--connとセットで指定する必要があります。 --conn コネクションファイルのパス これらのうち、ユーザーが直接利用するのは--installオプションです。 # KernelをJupyterにインストールします $ deno jupyter --unstable --install --kernelと--connについては、JupyterがKernelを起動する際に使用されるもののため、ユーザーが直接利用することは想定されていません。 また、--installも--kernelも指定しないでdeno jupyterを実行すると、Deno Kernelがインストールされているかどうかを確認できるようです。 $ deno jupyter --unstable 今のところ、deno jupyterの利用には--unstableの指定が必要なようです。 using/await usingのサポート (TypeScriptのみ) Deno本体のTypeScriptをv5.2へアップデートする対応に続いて、usingとawait usingをサポートする対応がマージされています。 feat: explicit resource management in TypeScript #20506...

September 17, 2023

2023/09/04〜2023/09/10の最新情報

Deno v1.37でリリースされそうな機能について 今週はDenoのリリースが行われていないため、おそらく次にリリースされるであろうDeno v1.37に入りそうな機能などについて紹介します。 Lockfile v3 deno.lockの新しいフォーマット(v3)が実装されています。 feat: lockfile v3 #20424 npm.specifiersがpackages.specifiersへ、npm.packagesがpackages.npmへ移動されています。 これはdeno:URLのサポートを想定した変更のようです。 TypeScript v5.2 Deno本体に搭載されたTypeScriptをv5.2にアップデートするPRがマージされています。 feat: TypeScript 5.2 #20425 ただし、usingやDecorator Metadataなどについてはv8側でサポートされるまでは使用できない状況のようです。 Import Attributes DenoにImport Attributesを実装するPRがマージされています。 feat: support import attributes #20342 // static import import data from "./data.json" with { type: "json" }; // dynamic import const data2 = await import("./data2.json", { with: { type: "json" } }); Deno Deployでnpmパッケージがサポート Deno Deployでnpmパッケージがサポートされました。Denoと同様に、npm:URL経由でnpmパッケージを読み込むことができます。 以下の公式ブログ記事では、ExpressやFastify, OpenAI APIなどの使用例が紹介されています。...

September 10, 2023