Denoばた会議 Monthly 第16回

Deno v1.30

node:URLのサポート

Node.jsの組み込みパッケージをimportできます。

import { EventEmitter } from "node:events";

const emitter = new EventEmitter();
emitter.on("foo", console.log);
emitter.emit("foo", "bar");

deno.json(c)でのImport Mapsの定義がサポート

// deno.jsonc
{
  "imports": {
    "dax": "https://deno.land/x/dax@0.24.0/mod.ts"
  }
}

deno.json(c)の内容を元に、bare specifierを解釈してくれます。

import { $ } from "dax";

await $`echo foobar`;

deno fmtでセミコロンの有無を制御できるように

deno.jsonfmt.options.semiColonsオプションでdeno fmtのセミコロンの有無を変更できます。

{
  "fmt": {
    "options": {
      "semiColons": false
    }
  }
}

Deno.permissionsに同期バージョンのAPIが追加

Deno.permissions名前空間にquerySync()/requestSync()/revokeSync()が追加されました。

const status = Deno.permissions.querySync({ name: "env", variable: "DENO_DIR" });
if (status.state === "granted") {
  const denoDir = Deno.env.get("DENO_DIR");
  console.info(denoDir);
}

Deno v1.29

Deno.spawn/Deno.spawnSync/Deno.spawnChildの削除

今後はDeno.Commandの使用が推奨されます。

const command = new Deno.Command("deno", {
  args: ["info", "--json"],
});
const status = await command.output();
if (status.success) {
  console.info(new TextDecoder().decode(status.stdout));
}

deno.json(c)でのロックファイルの挙動の制御

ロックファイルの無効化:

{
  "lock": false
}

ロックファイルの名前のカスタマイズ:

{
  "lock": "./lock.json"
}

deno checkコマンドで--allオプションがサポート

以下のコマンドで、リモートモジュールも含む全ファイルの型チェックが有効化されます。

$ deno check --all mod.ts

deno check --remoteでも同様の振る舞いを実現できますが、今後は上記の--allを指定した形式が推奨されます。

Denoのロードマップ (2023年 Q1)

deno:URLのサポート

import $ from "deno:dax@24.0";

await $`echo foobar`;

上記のコードでは/x/dax@0.24.0/mod.tsimportされます。

package.jsonのサポート

{
  "type": "module",
  "scripts": {
    "main": "deno run -A main.ts"
  },
  "dependencies": {
    "chalk": "^5.0",
    "deno-redis": "deno:redis@~0.29.0/mod.ts"
  }
}

package.jsonのサポート

Denoはpackage.jsondependenciesを元にbare specifierを解釈してくれます。

import { connect } from "deno-redis";
import chalk from "chalk";

const redis = await connect({
  hostname: "127.0.0.1",
  port: 6379,
});
const value = await redis.get("foo");
console.log(chalk.blue.bold(value));

package.jsonのサポート

package.jsonscriptsdeno taskで実行できます。

$ deno task main

その他の計画について

  • node:URLのサポート (v1.30.0でサポートされました)
  • deno.json(c)でのImport mapsの定義 (v1.30.0でサポートされました)
  • deno bundleコマンドの非推奨化

Big news in Deno Land

npmパッケージのサポートを導入した背景や、Denoの将来などに関する話が行われています。

  • ShadowRealmなどを活用したパッケージごとのパーミッション管理のサポートについて
  • --allow-writeを指定した際は、ファイルシステム全体ではなく、カレントディレクトリ配下への書き込みのみを許可すべきでは?
  • Deno Deployにおける状態管理やCockroachDBやSpannerなどについて