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/08/07〜2023/08/13の最新情報

Deno v1.36.1 Deno v1.36.1がリリースされました。 deno_modulesディレクトリがvendorへリネーム Deno v1.36で実装されたdeno_modulesディレクトリがdeno vendorコマンドに合わせてvendorへリネームされました。 これに合わせて、deno.jsonのプロパティ名もdenoModulesDirからvendorへリネームされています。 { "imports": { "redis": "https://deno.land/x/redis@v0.29.0/mod.ts", "dax": "https://deno.land/x/dax@0.24.0/mod.ts" }, "vendor": true } このようにdeno.jsonでvendor: trueを設定することで、Denoが依存パッケージをvendorディレクトリにダウンロードするよう挙動が変更されます。 また、Deno v1.36からの大きな変更として、vendorオプションが有効化された際は、依存しているnpmパッケージもnode_modulesに自動でダウンロードされるよう挙動が変更されています。(--node-modules-dirオプションが自動で適用されるようなイメージです) この挙動を無効化したい場合、CLIオプションで--node-modules-dir=falseを指定するか、またはdeno.jsonでnodeModulesDir: falseを指定する必要があります。 deno test グローバルのsetTimeoutが置き換えられた場合、TestContext.stepが動作しなくなる問題が修正されています。(std/testing/time.tsのFakeTimeと併用できない課題があったようです) deno_std v0.198.0 deno_std v0.198.0がリリースされました。 std/path - ファイルの分割 std/path/basename.tsやstd/path/dirname.tsなど、std/pathで提供されている各APIごとにファイルが細かく分割されました。 std@0.198.0/path std@0.197.0/path deno_cache v0.5.0 deno_cacheパッケージの内部実装が、Deno本体で使用されていたグローバルキャッシュ(DENO_DIR)に関するコードをベースに再実装されたようです。 これに合わせて、deno_cache_dirという名前でクレートも公開されています。 また、Deno本体でもこのdeno_cache_dirクレートが導入されています。(#20092) これにより、今後、deno_cacheパッケージの開発がより活発になる可能性もありそうです。 https://github.com/denoland/deno_cache/releases/tag/0.5.0 Freshの2023年8〜9月のイテレーション計画 Freshの2023年8〜9月にかけてのイテレーション計画が公開されています。(2023年の7〜8月のイテレーション計画についてはこちら) August - September 2023 iteration plan #1618 現時点では、以下の実装などが進められることが検討されているようです。 SPAライクなクライアントサイドナビゲーション View transitionsのサポート

August 13, 2023

2023/07/31〜2023/08/06の最新情報

Deno v1.36 Deno v1.36がリリースされました。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Deno v1.36 deno_std v0.197.0 deno_std v0.197.0がリリースされました。 std/testing/snapshot.ts assertSnapshotに関して、以下の破壊的変更が実施されています。 Deno v1.33.2以降、長い文字列が改行されてスナップショットが作られていた問題への対応が入れられました。 タブ文字(\t)がエスケープされた状態でスナップショットが作られる問題が修正されました。 std/fs/walk.ts - includeSymlinksオプションが追加 includeSymlinks: true かつ followSymlinks: falseが指定された場合、walkはシンボリックリンクを未解決の状態で返却します。 このオプションのデフォルト値はtrueであるため、もしシンボリックリンクを含めたくない場合は、明示的にfalseを設定する必要があります。 for await (const entry of walk("./dir", { includeSymlinks: false })) { // ... } std/toml/parse.ts 以下のようなペアを持つTOMLを解析する際に、TypeErrorが発生する問題が解消されました。 floats = [0.1, 1.5] empty_obj = {} import { parse } from "https://deno.land/std@0.197.0/toml/parse.ts" const parsed = parse(`[section] floats = [0.1, 1.5] empty_obj = {}`); console....

August 6, 2023

Deno v1.36

Deno v1.36がリリースされました。 この記事では主な変更点などについて解説します。 --deny-*オプション --deny-*という新しいオプションが導入されました。このオプションにより、Denoに対して特定の操作のみを明示的に拒否させることができます。 例えば、以下の場合、Denoにwrite権限のみを拒否させています。 $ deno run --allow-all --deny-write main.js このように--allow-*オプションと--deny-*オプションは併用することが可能で、その場合、--deny-*オプションの方が優先されます。 また、--deny-*には--allow-*と同様に、リスト形式で対象を指定することもできます。 $ deno run --allow-read --deny-read=README.md main.js 上記の場合、./README.mdへの読み込みのみが拒否され、それ以外のファイルの読み込みは許可されます。 { const content = await Deno.readTextFile("Makefile"); // => OK console.info(content); } { const content = await Deno.readTextFile("README.md"); // => PermissionDenied console.info(content); } deno_modulesディレクトリの導入 ⚠️この機能はまだunstableという扱いのため、今後、機能などに変更が入る可能性があります。 また、現在、deno_modulesをvendorにリネームするPRも作成されており、今後ディレクトリやオプションなどの名前が変わる可能性も高そうです。 feat(unstable): rename deno_modules to vendor #20065 deno.jsonにdenoModulesDirという新しいオプションが導入されました。 このオプションにtrueを設定すると、リモートモジュールがdeno_modulesというディレクトリにダウンロードされるように挙動が変更されます。 { "denoModulesDir": true } この状態でスクリプトを実行すると、依存しているリモートモジュールがdeno_modulesに保存されます。 import { blue } from "https://deno....

August 6, 2023

2023/07/24〜2023/07/30の最新情報

Deno v1.35.3 Deno v1.35.3がリリースされました。 deno lint deno lintコマンドで--rulesと--rules-tagsの併用がサポートされました。 指定されたタグを持つルールの一覧を表示できます。 # `fresh`タグを持つルールを一覧表示する $ deno lint --rules --rules-tags=fresh deno lsp deno lspが以下のケースでもdeno.jsonを検出するように改善されました。 deno.jsonを新しく作成したとき deno.jsonでシンタックスエラーが発生したとき deno info deno infoコマンドでImport Mapsで定義されたspecifierがサポートされました。 $ deno info --import-map=import_map.json preact deno_std v0.196.0 deno_std v0.196.0がリリースされました。 std/http/server.tsでserveとserveTlsが非推奨化されました。 (破壊的変更) Deno v1.35でDeno.serve()が安定化されているため、今後はそちらの使用が推奨されます。 remote_modulesのサポートについて Deno本体でremote_modulesというディレクトリをサポートすることが検討されているようです。 feat: optional remote_modules directory (without lsp support) #19977 今のところ、以下のような振る舞いが想定されているようです。 deno.jsonでremoteModulesDir: trueを設定すると、remote_modulesというディレクトリにサードパーティモジュールが保存されるようになります。(実質的にremote_modulesディレクトリが$DENO_DIR/depsとして扱われます) remote_modulesディレクトリには、deno vendorコマンドによって作成されるvendorディレクトリと同様に、リーダブルなフォーマットで依存モジュールが保存されます。 deno vendorやremote_modulesを使わない場合、Denoはリモートからダウンロードしたサードパーティモジュールをファイル名をハッシュ化した状態で$DENO_DIR/depsにキャッシュします。(そのため、サードパーティモジュールに関するデバッグが難しくなります。) 背景 このremote_modulesディレクトリの導入の目的として、deno vendorコマンドに関する以下の課題の解消などが背景としてあるようです。 deno vendorコマンドで作成されたvendorディレクトリをグローバルキャッシュ(DENO_DIR)として利用したい。 deno vendorコマンドは独自に生成したImport Mapsの使用を前提としているため、ユーザが自身で作成したImport Mapsと併用することが難しいこと。(Import Mapsはプロセスごとに一つしか指定できないため) 依存パッケージのバージョンを変更するたびにdeno vendorを実行する手間を軽減すること。 これらの課題を解消するために、remote_modulesという新しいディレクトリを導入することが検討されているようです。...

July 30, 2023

2023/07/17〜2023/07/23の最新情報

Fresh v1.3 Fresh v1.3がリリースされました。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Fresh v1.3 Deno v1.35.2 Deno v1.35.2がリリースされました。 Node.js互換性の改善 npm:経由で読み込まれたパッケージと通常のDenoコードで異なるglobalThisの実体が参照されるように変更されました。(#19307) npmパッケージ内からDenoで書かれた.tsファイルをimport()で読もうとすると、エラーが発生する問題が修正されました。 node:process: dlopenが実装されています。(flags引数は未サポート) node:stream/promises: finished/pipelineがexportされていなかった問題が修正されています。 TypeScript --unstableをつけずにunstable APIを使おうとした際のエラーメッセージが改善されています。 v1.35.2: error: TS2551 [ERROR]: Property 'openKv' does not exist on type 'typeof Deno'. Did you mean 'open'? 'Deno.openKv' is an unstable API. Did you forget to run with the '--unstable' flag, or did you mean 'open'? If not, try changing the 'lib' compiler option to include 'deno....

July 23, 2023