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

fresh v1.2

fresh v1.2がリリースされました。 この記事では主な変更点などについて解説します。 このリリースに合わせて、PreactのメンテナーであるMarvin Hagemeister氏がDeno社に入社されたことが発表されています。これからMarvin Hagemeister氏を中心に、フルタイムでFreshの開発が進められていくことが計画されているようです。 アップデートについて freshはアップデート用のスクリプト(update.ts)を提供しています。 以下のコマンドを実行すると、v1.2へアップデートすることができます。 $ deno run -A -r https://fresh.deno.dev/update . また、このバージョン以降からinit.ts (freshのプロジェクト初期化用のスクリプト)で作成したプロジェクトでは、deno task updateでもfreshをアップデートすることができます。 Islandコンポーネントに関する改善 props.childrenのサポート Islandコンポーネントでprops.childrenがサポートされました。 import type { PageProps } from "$fresh/server.ts"; import Collapse from "../islands/Collapse.tsx"; function Content() { return <div>foobar</div>; } export default function Index(props: PageProps) { return ( <Collapse> <Content /> </Collapse> ); } またIslandコンポーネントをネストすることもできます。 export default function Index(props: PageProps) { return ( <Collapse> <Collapse> <Content /> </Collapse> </Collapse> ); } 制限として、children以外のpropsにコンポーネントを渡すことはまだサポートされていません。...

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/22〜2023/05/28の最新情報

Deno v1.34 Deno v1.34がリリースされました。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Deno v1.34 deno_std v0.189.0 deno_std v0.189.0がリリースされました。 std/async/retry.ts retry()の内部でジッターが適用されるようになりました。 std/collections/group_by.ts groupBy()でIterable<T>型の値がサポートされました。 import { groupBy } from "https://deno.land/std@0.189.0/collections/group_by.ts"; groupBy( new Set([1, 2, 3, 4, 5]), (x) => x % 2 === 0 ? "even" : "odd", ); // Output: { odd: [ 1, 3, 5 ], even: [ 2, 4 ] } また、selector関数が引数として現在処理中の要素のindexを受け取るように変更されています。 v0.189.0 v0.188.0 Deno DeployでNode.js組み込みモジュールがサポート Deno DeployでNode.js組み込みモジュールがサポートされたようです。...

May 28, 2023

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

Deno v1.33.3 Deno v1.33.3がリリースされました。 deno compileでnpmパッケージがサポート deno compileでnpm:やnode:URLに依存したアプリケーションの実行可能ファイルの生成がサポートされました。 利用する際は、現時点では--unstableの指定が必要です。 import chalk from "npm:chalk@5.2.0"; console.log(chalk.green.bold("Hello")); $ deno compile --unstable --output=example main.js $ ./example また、deno compileによるコンパイル対象として、直接npmパッケージを指定することもできるようです。 $ deno compile --unstable --output=cowsay npm:cowsay@1.5.0 $ ./cowsay hello Deno.serve() レスポンスの自動的な圧縮が実装されました。 現時点ではgzipのみがサポートされています。(Content-Encoding: gzip) それ以外には、--watchオプションと併用した際の安定性の改善が実施されています。 Deno.Command Deno.ChildProcess#killが、システムの全実行可能ファイルに対する--allow-run権限を要求する問題が修正されました。 v1.33.2までは、例えば--allow-run=redis-cliのように特定のバイナリのみを許可している場合、Deno.ChildProcess#killで権限エラーが発生する問題があったため、このリリースで修正されています。 deno lsp documentPreloadLimitオプションが追加されました。 これにより、deno lspがプリロードするドキュメント数をカスタマイズできます。 vscode_denoでは、v3.18.0でdocumentPreloadLimitオプションのサポートが入っているようです。 その他 Deno.seekSyncとDeno.seekの型定義が統一されていなかった問題が修正されました。(#19060) node:module: Module.runMain()が実装されました。(ts-nodeで使用されているようです) リダイレクトするリモートモジュールへの依存があった場合、deno vendorの実行時にパニックする問題が修正されました。 Deno.UnsafeCallbackが使用されていると、deno testがハングすることのある問題が修正されました。 deno_std v0.187.0 deno_std v0.187.0がリリースされました。 std/regexpが追加 新しいモジュールとしてstd/regexpが追加されました。 現状では、正規表現のメタ文字をエスケープするための機能が提供されています。 import { escape } from "https://deno....

May 14, 2023

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

Deno v1.32.4 Deno v1.32.4がリリースされました。 Deno v1.32.2以降、Freshが動かなくなっていた問題が解消されています。(#18572) Node.js互換性 node:cryptoで以下のAPIが実装されています: X509Certificate generateKey hkdf 特定のnpmパッケージのバージョンを更新しようとすると、以下のエラーが起きる問題が解消されています。 Could not find npm package '<package>’ matching <version>. Try retrieving the latest npm package information by running with --reload deno cache --reload npm:<package>を実行すると、依存している全npmパッケージが再インストールされる問題が解消されています。 KV Deno.Kvの各メソッドで、キーに配列以外の値を渡せないように挙動が変更されました。 例えば、今まではkv.get("key")のような呼び方ができましたが、今後はkv.get(["key"])のように呼ぶ必要あります。 Cache API プログラムの実行をまたいで同一のリクエストに対して複数回Cache.putを呼んだ際に、値がうまく上書きされなくなる問題が修正されています (#18649) deno_std v0.183.0 deno_std v0.183.0がリリースされました。 std/encoding/varint/の削除 非推奨化されていたstd/encoding/varint/が削除されました。 deno_std v0.179.0でstd/encoding/varint.tsにTypeScriptベースのAPIが追加されているため、今後はこれらの使用が推奨されます。 std/csv 破壊的変更 CsvStreamがCsvParseStreamへリネームされています。(CsvStreamはまだ削除はされていないものの、非推奨化されています) この変更はJsonParseStream/JsonStringifyStreamを提供するstd/jsonとの一貫性の向上を目的としています。 parse()などのAPIの型定義が改善されています。 具体的には、以下のように型推論が効くように変更されています。 import { parse } from "https://deno.land/std@0.183.0/csv/parse.ts"; const records: Array<Record<"id" | "name", string>> = parse("1,a\n2,b", { columns: ["id", "name"], }); std/http/etag....

April 16, 2023

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

Flashの削除について まだリリースはされていませんが、Deno v1.25で実装されたFlashというHTTPサーバを削除する対応が実施されているようです。 refactor: remove “ext/flash” #18578 これに伴い、Flashを起動するためのAPIであったDeno.serve()についても、一時的にDeno.serveHttp()ベースの実装へ書き換えられています。 refactor: “Deno.serve()” API uses “Deno.serveHttp()” internally #18568 Deno.serve()については、現在、上記とは別に改めてhyperベースの実装への書き換えが試みられているようです。 Extremely experimental HTTP rewrite #18619 Oakでもすでに対応が行われており、次のリリースあたりでFlashのサポートが削除される可能性が高そうです。 feat: remove experimental support for Deno flash server docs: remove experimental flash content from README fresh v1.1.5 fresh v1.1.5がリリースされました。 twindv1プラグインで、SSRとCSR時に生成されたスタイルが一部重複してしまうことがある問題について改善されています。 Deno SaaSKit Deno公式からFreshやSupabase, Stripeなどを活用したSaaSプロジェクトのテンプレートが公開されました。 Announcing Deno SaaSKit: an open-source SaaS template built with Fresh ソースコードやロードマップなどが以下のリポジトリで公開されています。 https://github.com/denoland/saaskit SaaSKit v1....

April 9, 2023

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

Deno v1.31.2 Deno v1.31.2がリリースされました。 Node.js互換性の改善 循環依存のあるpeerDependenciesの解決が改善 例えば、以下のようなシナリオにおいて、初回実行時はうまくいくものの、ロックファイルが適用されるとうまく動かないケースがあったようで、この問題が修正されています。 a -> b -> c -> d -> c -> b (peer) その他の改善 npm:URLを使っていると、依存関係が変わっていなくても、毎回Lockfileがtouchされてしまう問題が修正されています。 複数のDenoプロセスが同時にnode_modulesを更新できないように制御が入りました。 package.jsonの依存関係の解析に失敗しても、npmパッケージが実際にimportされるタイミングまではエラーが起きないように修正されています。 これにより、package.jsonは存在するものの、スクリプト内でnpmパッケージを利用していないようなケースでエラーが発生しなくなります。 node:cryptoのcreateHashが高速化されています。 util.types.isSharedArrayBufferが動作しない問題が修正されています。 .d.tsファイルの型チェックに関する修正 以下のようなケースで、deno checkなどでうまく型チェックが行われていなかった問題が修正されています。 エントリポイントに指定した.d.tsファイル エントリポイントに含まれるX-TypeScript-Types/<reference types="..." />経由で読み込まれる.d.tsファイル .d.tsファイル内のファイルタイプが指定されていないコードブロック (deno test --docの実行時のみ) Deno.UnsafePointer.ofの改善 Deno.UnsafePointer.ofでバッファのメモリを取得する際に、もしユーザーがバッファの参照をどこかに保持していなかった場合、孤立したポインタができてしまう可能性がありました。 この問題を解消するため、Deno.UnsafePointer.ofの内部でWeakMapを使ってポインタとバッファのマッピングが管理されるようになりました。 その他 WindowsでDeno.stdin.setRaw(false)によって適切にrawモードが無効化されるように修正されています localStorageへのアイテムのINSERT時に、事前に入力内容のサイズがチェックされるように挙動が修正されています https://github.com/denoland/deno/releases/tag/v1.31.2 deno_std v0.179.0 deno_std v0.179.0がリリースされました。 std/encoding/varint.tsの追加, std/encoding/varint/mod.tsの非推奨化 TypeScriptをベースに実装されたstd/encoding/varint.tsが追加されました。 (実装はhttps://deno.land/x/varintがベースのようです) これに合わせて、WASMベースのstd/encoding/varint/mod.tsが非推奨化されています。 std/fsの改善 std/fs/expand_glob: expandGlob()にfollowSymlinksオプションが追加されました (trueを指定すると、シンボリックリンクが解決されます) std/fs/ensure_dir: ensureDir()を同じディレクトリに対して並列で呼んだときに、Deno.errors.AlreadyExistsがthrowされる問題が修正されています。 std/fs/ensure_symlink: ensureSymlink()でtargetに対する相対的なリンクを作ろうとすると、意図せぬパスを指すリンクが作成されてしまう問題が修正されています (#2312) std/http/cookie - =の取り扱いが改善 Cookieの値に=が含まれていると、getSetCookiesが意図せぬ値を返す問題が修正されています。...

March 12, 2023