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

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

2023/07/10〜2023/07/16の最新情報

Deno v1.35.1 Deno v1.35.1がリリースされました。 Node.js互換性 node_modules/.deno/setup-cache.binという独自のキャッシュファイルが導入されています。 このファイルはnode_modules/.denoに関するディレクトリ構造を記録しており、このファイルを活用してシンボリックリンクの作成を効率化することで、node_modulesのセットアップを高速化することが狙いのようです。 https://github.com/denoland/deno/pull/19787 Deno.listenTls Deno.listenTlsのalpnProtocolsオプションを--unstableを指定せずに利用できるようになりました。(元々、Deno v1.35のリリース時に安定化される予定でしたが、今回のリリースで改めて安定化されました) https://github.com/denoland/deno/pull/19732 Deno.serve Deno.serveでBrotliによる圧縮が適用された際のパフォーマンスを改善するため、以下のパラメータが設定されています。 BROTLI_PARAM_QUALITY: 6 (ngx_brotliのデフォルトと同じ値) BROTLI_PARAM_LGWIN: 22 (brotliのデフォルトのウィンドウサイズ) https://github.com/denoland/deno/pull/19758 deno lsp deno.jsonのexcludeで指定されたファイルがdeno lspで取り扱われなくなるように挙動が改善されています。 https://github.com/denoland/deno/pull/19791 deno vendor deno.jsonのcompilerOptions.jsxImportSourceにImport Mapsで定義されたマッピングが指定された際に、対象のモジュールがベンダリングされない問題が修正されました。 https://github.com/denoland/deno/pull/19724 deno_std v0.194.0 deno_std v0.194.0がリリースされました。 std/msgpackが追加 MessagePackを取り扱うためのモジュールがdeno_stdに追加されています。 import { decode, encode } from "https://deno.land/std@0.194.0/msgpack/mod.ts"; const message = decode(encode({ type: "foo", message: "bar" })); console.info(message); // => `{ type: "foo", message: "bar" }` https://github....

July 16, 2023

2023/07/03〜2023/07/09の最新情報

Deno v1.35 Deno v1.35がリリースされました。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Deno v1.35 deno_std v0.193.0 deno_std v0.193.0がリリースされました。 std/http/user_agent.ts std/httpにユーザーエージェントを取り扱うためのユーティリティが追加されています。 import { UserAgent } from "https://deno.land/std@0.193.0/http/user_agent.ts"; const ua = new UserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"); console.info(ua.browser); // => { name: "Chrome", version: "114.0.0.0", major: "114" } 直近でリリースされたOak v12.6.0にも、このstd/http/user_agent.tsを使用したUser-Agentのサポートが入っています。 std/json/concatenated_json_parse_stream.ts nullnullのように、セパレータなしで連続してnullやtrueなどの値が現れた際に、適切に処理が行われるように修正されました。 import { ConcatenatedJsonParseStream } from "https://deno.land/std@0.193.0/json/concatenated_json_parse_stream.ts"; const result = []; for await ( const x of ReadableStream.from(["nullnull", "1"])....

July 9, 2023

2023/06/26〜2023/07/02の最新情報

deno_lint v0.48.0 deno_lint v0.48.0がリリースされています。 fresh向けにfresh-server-event-handlersという新しいルールが実装されています。 routes/ディレクトリに配置されたコンポーネントでイベントハンドラを設定しているコードがあればエラーが発生します。(このディレクトリのコンポーネントはhydrationされないため、イベントハンドラを設定しても動作しないためです) このルールは、おそらくDeno v1.35以降のバージョンから利用できるようになると思います。 注意点として、このルールにはデフォルトで有効化されるrecommendedタグは付与されていないため、利用したい際は以下のいずれかの方法で有効化する必要がありそうです。 deno.jsonのlint.rules.includeでfresh-server-event-handlersを指定する deno.jsonのlint.rules.tagsにfreshを指定する また、このfresh-server-event-handlersルール以外にも、fresh-handler-exportというルールの実装も進んでいるようで、freshに関するルールのdeno lintへの搭載が少しずつ進められているようです。 denoland/deno_core 今までdenoland/denoリポジトリ内で開発が進められていたdeno_core crateのリポジトリが独立されたようです。(#19658) 今後は以下のリポジトリで開発が進められていくようです。 https://github.com/denoland/deno_core cliffy v1.0.0-rc.1 DenoのCLIフレームワークであるcliffy v1.0.0のRCバージョンが公開されています。 新機能としてCommandクラス(cliffy/command)へのglobalActionメソッドの実装や、cliffyの内部で使われていたテスト用のヘルパーモジュール(cliffy/testing)の追加などが行われているようです。 また、cliffy/flagsのparseFlagsでのオプション名の見直しや、cliffy/promptのInput.promptでデフォルトのインデントの削除など、いくつか破壊的変更が行われているようです。 https://github.com/c4spar/deno-cliffy/releases/tag/v1.0.0-rc.1 fresh-tailwindcss freshからTailwind CSSを利用するためのプラグイン fresh-tailwindcss daisyUIの使用例なども公開されています。

July 2, 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