Denoばた会議 Monthly 第4回

Deno v1.17

--no-check=remoteのサポート

$ deno run --no-check=remote mod.ts

deno.land/stddeno.land/xなどのサードパーティモジュールの型チェックのみをスキップできます。

Import Assertionsのサポート

import modules from "./modules.json" assert { type: "json" };

Object.keys(modules);

現在はJSON modulesのみがサポートされています。

Deno.testのシグネチャの向上

// オプションを第2引数、テスト関数を第3引数で指定
Deno.test("foo", { permissions: { read: false } }, () => {
  Deno.cwd();
});

// オプションを第1引数、テスト関数を第2引数で指定
Deno.test({
  name: "bar",
  ignore: Deno.build.os === "windows",
}, async () => {
  //
});

Deno.refTimerDeno.unrefTimerが実装

const timerID = setTimeout(() => {
  console.log("Hello");
}, 3000);

Deno.unrefTimer(timerID);

その他の変更点

  • TypeScriptがv4.5にアップグレード
  • --locationオプションの省略時にglobalThis.locationundefinedに設定されるように修正
  • REPLでNode.js互換モードがサポート
  • Deno.connectTlsDeno.startTlsにALPNサポートが追加
  • --watchで外部ファイルの監視がサポート
  • AbortSignal#throwIfAbortedが実装
  • deno lspの新しいレジストリ補完プロトコルの実装

deno_std v0.118.0

破壊的変更

  • http/server_legacy.tsが削除
  • wsモジュールが削除
  • collectionsモジュールからfindLastfindLastIndexが削除
  • signalsモジュールからonSignalが削除
  • testing/assertsモジュールからassertThrowsAsyncが削除

DenoがTC39にジョイン

具体的には、直近では下記の機能などに注力していきたいとのこと。

  • 非JSアセットをモジュールグラフで扱えるようにする。
  • 明示的なリソース管理のより良いサポート
  • (非同期)イテレーションのためのより充実した標準関数

doc.deno.landがリニューアル

DenoのAPIドキュメンテーションサイトであるdoc.deno.landがリニューアルされました。

内部実装がDeno Deploy+Oak+NanoJSX+Twindに移行されています。

Denoの設定ファイルにタスクやパーミッション管理の仕組みを追加する提案

kitson氏により、Denoの設定ファイル(--config)にタスク管理の仕組みを追加することが提案されています。

{
  "tasks": {
    "run": "./mod.ts",
    "build": "--allow-read --allow-write ./build.ts",
    "test": {
      "args": "--unstable"
    }
  },
  "permissions": {
    "allow-read": "./src",
    "allow-write": "./dist"
  }
}
$ deno run --config deno.jsonc build

Denoのこれまでとこれから

JSConf JPでのkt3kさんのDenoに関する発表資料が公開されました。

Denoの概要や作られた背景、今後のロードマップなどについて解説されています。

Oak v10.0.0

app.fetchEventHandler()が削除

addEventListener("fetch", app.fetchEventHandler());

元々、Deno Deployのために用意されていた機能です。

Deno DeployでDeno.listenDeno.serveHttpがサポートされたため、削除されました。

今後はDeno Deployでもapp.listen()が利用できます。

Context.paramsの型推論が強化

パスのパターンを元に、Context.paramsの型が自動で推論されます。

const router = new Router();

router.get("/users/:name", (context) => {
  context.response.body = `Hello ${context.params.name}`;
});

リクエストボディのサイズに制限がかかるようになりました

DDos攻撃への対策のため、リクエストボディのサイズがデフォルトで10Mibまでに制限されました。

制限を無効化したいときは、以下のようにlimitオプションに0またはInfinityを指定する必要があります。

context.request.body({ type: "json", limit: 0 });

graffiti

DenoまたはNode.jsを使用してデスクトップアプリなどを開発するためのプラットフォーム

まだ開発途中の段階のようですが、Electronなどと同様にHTML/CSSなどのWeb技術を用いてデスクトップアプリを開発できるようにすることを目指しているようです。