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/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

fresh v1.3

fresh v1.3がリリースされました。 この記事では主な変更点などについて解説します。 非同期Routeコンポーネント 非同期Routeコンポーネントがサポートされました。 例えばデータベースや外部のAPIなどから非同期に取得したデータをRouteコンポーネントに渡すためには、今までは以下のようにhandlerを定義する必要がありました。 // routes/users/[id].tsx import type { Handlers, PageProps } from "$fresh/server.ts"; export const handler: Handlers<Data> = { async GET(req, ctx) { const user = await findUserByID(ctx.params.id); if (user == null) { return ctx.renderNotFound(); } const resp = await ctx.render(user); return resp; }, }; export default async function User(props: PageProps<User>) { return <UserDetail user={props.data} />; } 非同期Routeコンポーネントを利用することで、handlerを記述せずに非同期でのデータの取得とコンポーネントのレンダリングが行えるようになります。...

July 23, 2023

Deno v1.35

Deno v1.35がリリースされました。 この記事では主な変更点などについて解説します。 Deno API Deno.serveの安定化 Denoに組み込まれたHTTPサーバを起動するためのAPIであるDeno.serveが安定化されました。今後は--unstableを指定しなくても利用できます。 const ac = new AbortController(); setTimeout(() => ac.abort(), 10000); const server = Deno.serve({ signal: ac.signal, }, (req) => new Response("Hello Deno!")); await server.finished; これに合わせて、Deno.connectTlsのalpnProtocolsオプションも安定化されています。 Deno.listenTlsのalpnProtocolsオプションについては、おそらくv1.35.1で正式に安定化されるのではないかと思います。 新しいAPI Deno.errors配下に以下の新しいエラーが追加されています: NotADirectory FilesystemLoop IsADirectory NetworkUnreachable また、Deno.AtomicOperationが公開されています (今までは型定義のみが公開されていて、Deno名前空間では実際には定義されていませんでした) Web API ReadableStream.from ReadableStream.fromが実装されました。AsyncIteratorなどからReadableStreamを作成することができます。 function sleep(ms) { return new Promise((ok) => setTimeout(ok, ms)); } async function* gen() { for (let i = 0; i < 5; i++) { await sleep(i * 1000); yield i; } } const readableStream = ReadableStream....

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

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