Denoばた会議 Monthly レポート

Table of contents

Denoばた会議 Monthly 第8回

2022年4月24日開催。
connpassリンク

今月のアップデートを追う

Denoのアップデートを追っていくLT。
Discord上の会話はザックリと箇条書き。

@uki00aさんのスライド

Deno v1.21

deno check

指定されたモジュールの型チェックを行うコマンドが追加されました。
これにより、deno runコマンドのデフォルト型チェックは将来的に無効化される予定です。

新しいサブプロセスAPI

Deno名前空間にspawn, spawnChild, 及びspawnSyncの3つのAPIが追加されました。

deno lspの改善

deno.jcon(c)のTaskに対応し、Task: Run Taskでタスクを実行できるようになりました。
また、ワークスペース内の特定ディレクトリでのみLSPを有効化できるようにenablePathsオプションが追加され、VS CodeのTesting APIのサポートによりTesting: Focus on Test Explorer Viewコマンドを実行すると、テストケースの一覧を表示できるようになりました。

deno testの改善

TestContextオブジェクトにテストケースに関するメタデータ(nameorigin、及びparentプロパティ)が追加されました

Deno.test("math", async (t) => {
  assert(t.name === "math");
  assert(t.origin === Deno.mainModule);
  await t.step("sum", (t) => {
    assert(t.parent.name === "math");
    assert(t.name === "sum");
    assert(6 === sum(1, 2, 3));
  });
});

deno testでのテストレポートの改善

console.log()で出力された内容が見やすくなりました。

running 1 test from ./sample_test.js
foo ...
------- output -------
{ message: "foo" }
baz
----- output end -----

deno fmtdeno lintの大幅な高速化

インクリメンタルキャッシュがサポートされ、実行結果がキャッシュされることで大幅な高速化が見込まれます。

deno benchの改善

nオプションとwarmupオプションが削除され、Deno本体が信頼のある結果を得られるまで繰り返しベンチマークを実行するようになりました。

また、ベンチマークのグルーピングもできるようになっています。

Deno.bench({ name: "add", group: "math", baseline: true, fn: () => add(1, 2) });
Deno.bench({ name: "sum", group: "math", fn: () => sum(1, 2, 3, 4, 5) });
benchmark      time (avg)             (min … max)       p75       p99      p995
------------------------------------------------- -----------------------------
add        169.17 ns/iter    (157.29 ns … 249 ns) 169.19 ns 221.56 ns 246.76 ns
sum        192.72 ns/iter (187.26 ns … 255.52 ns) 193.52 ns  228.4 ns 230.39 ns
summary
  add
   1.14x times faster than sum

reportError()のサポート

Uncaught exceptionを明示的に発生させることができます。

deno replの改善

--eval-fileオプションが追加され、REPLの起動前に読み込みたいファイルを指定できるようになりました。 また、console.clear()と同等の挙動を持つclear()関数がサポートされています。

Deno.Listenerrefunrefメソッドが追加 (unstable)

unref()が呼ばれたListenerはプロセスの終了をブロックしなくなります(タイマにDeno.unrefTimerを呼んだときと同様の挙動をします)

deno_std/node/netでのServer.ref()Server.unref()の実装で利用されています。

DENO_NO_PROMPT環境変数のサポート

この環境変数を設定すると、Deno v1.19で有効化されたプロンプトの挙動を無効化できるようになりました(--no-promptを指定したときと同様の挙動です)

deno_std

主にテスト関係の更新です。
外部依存関係をシミュレートできるtesting/mockdescribeitといったBDD(振る舞い駆動開発)ができるtesting/bdd、日時機能をシミュレートできるtesting/time、スナップショット検証ができるtesting/snapshotが追加されました。

Supabase Functions

SupabaseでSupabase FunctionsというFaaSが利用できるようになりました。
Supabase FunctionsはDeno Deployをベースにしており、TypeScriptなどを利用してコードを記述できます。

Netlify Edge Functions (public beta)

NetlifyのEdgeネットワーク上でJavaScriptやTypeScript関数を実行することができます。
現在、RemixやAstro, Nuxt3など様々なフレームワークでNetlify Edge Functionsのサポートが提供されています。

Aleph.js v1 alpha

Deno Deployがサポートされ、React以外のフレームワーク(Vue.js)もサポートされました。
Remixのようなデータ読み込みAPIが実装され、Tailwind CSSのようなUnoCSSの組み込みサポートも行われています。
また、ts/jsx/tsxのオンデマンドでの変換ができます。

Ultra v0.8.0

React v18がサポートされ、src/api/**.{ts,js}というAPIルートのサポートされました。
他に、deno.json(c)との統合やサードパーティモジュールのベンダリング、Oakとの互換性が挙げられます。

stripe-nodeパッケージでのDenoサポートについて

stripe-nodeパッケージがDenoでも動作するようになったようです。

質問・今〇〇やってるよコーナー