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

2023/08/28〜2023/09/03の最新情報

Deno v1.36.4 Deno v1.36.4がリリースされました。 Deno KV Deno KVでデータベースへのリモート接続がサポートされました。これにより、ローカルからDeno Deploy上のDeno KVデータベースへ接続ができるようになったようです。 Deno.openKvにhttp:/https:形式のURLを与えると、従来までのSQLiteベースのバックエンドは使用されず、代わりにHTTP経由でデータベースへリモート接続されます。 このリモート接続機能はDeno Deployに限らず、KV Connectというプロトコルさえ実装されていれば、任意のデータベースへ接続が可能なようです。 また、この機能を利用するには、以下の設定が必要なようです: --allow-envとallow-netオプション DENO_KV_ACCESS_TOKEN環境変数 (Deno Deployで発行した認証用アクセストークン) KV Connectプロトコルについて: 以下のページなどにドキュメントが存在します。 KV Connect Metadata Exchangeエンドポイントのレスポンスのスキーマ Data Pathエンドポイントのメッセージのフォーマット deno lsp suggest.completeFunctionCallsオプションが実装: このオプションにtrueを設定すると、関数の引数と括弧()が入力補完されます。 vscode-denoでは"deno.suggest.completeFunctionCalls": trueオプションで有効化できるようです。 { // ... "deno.suggest.completeFunctionCalls": true } テストエクスプローラーに関するバグ修正: TestContext.stepを使っていると、vscodeのテストエクスプローラー経由でテストを実行した際に、LSPがパニックしてしまう問題が修正されました。 テストエクスプローラーからテストを実行する際に、対象テストファイルからはimportしていないファイルも実行されてしまう問題が修正されました。 deno_std v0.201.0 deno_std v0.201.0がリリースされました。 std/dotenv - パーミッションに関する改善 std/dotenvでパーミッションをより厳格に設定できるように実装が改善されました。 変数展開やexportオプションを使用しない場合、--allow-envオプションの指定が不要になります。 また、変数展開やexportオプションを使用する場合のパーミッションの取り扱いも改善されています。具体的には、以下のような.envファイルを読み込む場合、--allow-env=BAZの指定のみで動作します。(今までは--allow-envによって全ての環境変数の読み込みを許可する必要がありました。) FOO=bar HOGE=piyo${BAZ} これらの変更に合わせて、restrictEnvAccessToオプションが非推奨化されています。 std/urlが追加 新規モジュールとしてstd/urlが追加されました。 URLに関する様々なユーティリティが提供されています。 import { dirname } from "https://deno....

September 3, 2023

2023/08/21〜2023/08/27の最新情報

Deno v1.36.2 Deno v1.36.2がリリースされました。 Deno KV キーに有効期限を設定できるようになりました。 Deno.Kv#setなどのexpireInオプションを指定することで、ミリ秒単位で対象のキーの生存期間を指定できます。 const db = await Deno.openKv(); await db.set(["key"], "value", { expireIn: 30 * 1000 }); // 最低でも30秒後に削除されます。 FFI FFI関連のAPIをより型安全に扱えるように型定義が改善されています。 Deno.PointerObjectの型定義が公開されています。 Deno.PointerValueがGenerics型に変更されています。 など その他の変更点(バグ修正など) Denoで以下のエラーが発生する問題が修正されています。(古いバージョンのdeno_cacheで作成したキャッシュを最新のDenoで読もうとした際に発生していたようです) error: missing field `now` at line x column y Deno.listenTlsに不正な証明書または秘密鍵が指定されると、プロセスがパニックする問題が修正されました。 deno lsp: auto importの実行時にdeno.jsonのfmtの設定が効くように挙動が改善されています。 deno test: JUnitレポーターでfilename/line/colが出力されるように改善されました。 deno.json: vendor: trueが指定された際に、vendorディレクトリからの直接のimportが無効化されました。(二重に依存関係がダウンロードされてしまったりする問題などを防止するため) node:os: WindowsでuserInfo()が利用出来ない問題が修正されています。 navigator.userAgentがWorker内で利用できない問題が修正されました。 Deno v1.36.3 Deno v1.36.3がリリースされました。 v1.36.2でdeno lintを実行した際に、async関数に対してno-await-in-sync-fnルールのエラーが起こることのある問題が修正されています。 また、URL.canParseの型定義も追加されています。 Deno本体での.envのサポートについて Deno本体に--envというオプションを追加するPRが作成されています。 feat: –env-file #20300...

August 27, 2023

2023/08/14〜2023/08/20の最新情報

fresh v1.4 fresh v1.4がリリースされました。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 fresh v1.4 Deno KVでのキーの有効期限の設定について Deno.Kv#setなどのAPIでexpireInというオプションをサポートするPRが作成されています。 feat(ext/kv): key expiration #20091 このオプションを指定することで、対象のキーに対して有効期限を設定することができます。 const db = await Deno.openKv(); await db.set( ["key"], "value", { // 有効期限をミリ秒単位で指定します。 // 以下の場合、最低でも1秒後にこのキーが自動で削除されます。 expireIn: 1000 }, ); このPRはすでにマージされているため、次のDeno v1.36.2またはv1.37あたりでリリースされる可能性がありそうです。

August 20, 2023

2023/06/19〜2023/06/25の最新情報

Fresh Devtools Fresh本体にFresh Devtoolsという開発者ツールを実装することが検討されているようです。 Fresh Devtools #1321 経緯としては、Freshのバックエンドで動作する各種ハンドラなどはPreact Devtoolsではカバーしきれないという課題などの解消が狙われているようです。 また、Nuxt DevToolsのように、Freshアプリケーションの一部として開発者ツールをレンダリングできるようにすることなども考慮されているようです。 例えば、このFresh Devtoolsでroutesタブやpluginsタブ、Preact Devtools向けのタブなどを提供することで、生産性やデバッグなどのサポートをすることが構想されています。 denoland/kv_api Deno KVのデータをREST API経由で管理できるようにしてくれるモジュールが公開されています。 denoland/kv_api 現状はFreshのみがサポートされていますが、今後、Oakのサポートが追加されることも検討されているようです。 deno_std/msgpack deno_stdにMessagePackのサポートを追加するPRが作成されています。 feat: msgpack encoding #3460 まだマージはされていませんが、近いタイミングでリリースされる可能性もあるかもしれません。 Global database comparison Deno KVやDynamoDBなどのDeno Deployからの利用に適していると考えられる各種データベースについて、詳しく比較を行っているWebページが公開されています。 https://global-db-comparison.deno.dev/

June 25, 2023

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

fresh v1.2 fresh v1.2がリリースされました。 変更内容について以下のページにまとめたため、よろしければ参照いただければと思います。 fresh v1.2 Deno v1.34.3 Deno v1.34.3がリリースされました。 Deno KVにキューが実装 Deno.KvにenqueueとlistenQueueメソッドが追加されています。 const kv = await Deno.openKv(":memory:"); // メッセージを追加します。 const res = await kv.enqueue({ id: 1, payload: "foo" }); assert(res.ok); let message; // キューを購読します const listenPromise = kv.listenQueue((_message) => { message = _message; }); kv.close(); await listenPromise; // closeするとresolveされます console.info(message); // Output: { id: 1, payload: "foo" } Deno.Kv.enqueueには以下のオプションを指定できます。 オプション 説明 keysIfUndelivered メッセージの処理に失敗した際にKVに設定したいエントリを指定できます delay 配送までの遅延時間を指定できます(最大で1週間まで指定できて、デフォルトは0です) listenQueueに渡したコールバックが失敗した際は、自動的にリトライされます。(リトライ回数は最大で5回のようです)...

June 18, 2023

2023/05/29〜2023/06/04の最新情報

Deno v1.34.1 Deno v1.34.1がリリースされました。 deno compile DENO_DIRが読み取り専用であった際に、deno compileで作ったバイナリがうまく動かない問題が修正されました。 npmパッケージ内に含まれるファイルを読む際に、deno compileに--allow-readを指定しているにも関わらず、バイナリの実行時に再度--allow-readが求められる問題が修正されました。 Node-API napi_get_cb_infoでdata引数が適切に取り扱われるように改善されました。 Deno.createHttpClient オプションとしてhttp2: falseとhttp1: trueの両方が指定された場合に、ALPNでh2が指定されないように修正されました。 denoland/deno_kv_oauth Deno公式で、Deno KVをベースにOAuthのアクセストークンやセッションなどの管理を行ってくれるモジュールが公開されています。 https://github.com/denoland/deno_kv_oauth ロードマップについては、以下で公開されています。 https://github.com/denoland/deno_kv_oauth/issues/1 window変数の削除について Deno 2.0でwindow変数の削除が検討されているようです。 remove window variable #13367 背景としては、既存のライブラリにはwindow変数の有無に応じて現在の環境(ブラウザ or Node.js)を判断しているものが多く存在し、Denoでそういったライブラリを利用する際に、意図せずしてブラウザであると判定されてしまうことを防ぎたい、という狙いがあるようです。 次のマイナーリリースであるDeno 1.35では、window変数が参照された際に警告を表示する変更を入れることが検討されているようです。 feat(runtime): log deprecated message on first usage of window global #19319 esbuild_deno_loader v0.8.0 esbuild_deno_loader v0.8.0がリリースされました。 npm:URLやnode_modulesのサポートが行われています。 "native"ローダーでは、通常のDenoにおけるnpm:などと同様に、依存するnpmパッケージはDenoのグローバルキャッシュ(DENO_DIR)から読み込みやダウンロードなどが行われるようです。 ただし、Deno Deployなどでも動作する"portable"ローダーでは、--node-modules-dirなどによって事前にnode_modulesディレクトリが作成されていないと動作しないなどの制限があるようです。 freshでのnpm:サポート またマージはされていませんが、esbuild_deno_loader v0.8.0を活用してfreshにnpm:のサポートを入れる対応が進められているようです。 feat: limited npm: specifier support #1245

June 4, 2023

2023/05/15〜2023/05/21の最新情報

Deno v1.33.4 Deno v1.33.4がリリースされました。 Node.js互換性の改善 組み込みモジュールの改善 node:crypto: getDiffieHellman/createDiffieHellmanが実装されました。 node:url: formatにURLオブジェクトを渡した際に、適切にフォーマットが行われなかった問題が修正されました。 node:child_process: spawnのstdioオプションにStreamを渡せるようになりました。 これによりnpm-run-all が動くようになったようです。 Node-API napi_add_finalizerが実装されました。 BigInt関連のAPIの互換性が改善されています。 npm optionalDependenciesのサポートが改善されています。 Deno KV Deno.Kv.close()の戻り値の型定義がPromise<void>からvoidへ変更されました。(実装は修正されていませんが、TypeScriptの型定義に誤りがあったようです) Deno.serve()のバグ修正 リクエストがキャンセルされると、Denoがパニックすることがある問題が修正されました。 Web API BroadcastChannelの型定義がlib.deno.unstable.d.tsへ移動されました。 unstable APIであるにも関わらず、--unstableなしでも型定義を参照できてしまう問題があったようです。 WebSocketで短い時間内で多くのメッセージを送信すると、いくつかのメッセージが失われることがある問題が修正されました。 fetch()でIPアドレスを指定してHTTPSリクエストを送信する(例: https://1.1.1.1/)とエラーが発生する問題が解消されました。 deno_std v0.188.0 deno_std v0.188.0がリリースされました。 std/flags collectとdefaultを併用した際に、オプションにネストされた配列が設定される問題が修正されました。 import { parse } from "https://deno.land/std@0.188.0/flags/mod.ts"; const options = parse([], { collect: ["values"], default: { values: ["foo", "bar"], }, }); console....

May 21, 2023