Deno v2.5 向けの機能の追加について

Deno v2.5 向けに直近でマージされた内容について紹介します (⚠️まだ正式にはリリースされていないため、今後、APIの使い方に変更が発生する可能性があります)

Deno.bundle()APIが追加

deno bundleコマンドの機能をプログラムから動的に利用するために、Deno.bundle()というAPIが追加されています。

Deno.bundle()を利用するためには--unstable-bundleによって明示的に有効化が必要です:

const result = await Deno.bundle({
  entrypoints: ["./mod.ts"],
  platform: "deno",
});
console.assert(result.success);

const [outputFile] = result.outputFiles;
const bundledCode = outputFile.text();
console.assert(typeof bundledCode === "string");

outputPathoutputDirオプションを指定することで、バンドル結果がファイルシステムへ書き込まれます (--allow-writeの指定は不要なようです):

const result = await Deno.bundle({
  entrypoints: ["./mod.ts"],
  platform: "browser",
  minify: true,
  sourcemap: "external",
  outputDir: "dist",
});
console.assert(result.success);

まだマージはされていませんが、現在、プラグイン (pluginsオプション) のサポートに関する実装も進められているようです:

deno.jsonでのパーミッションセットの定義

deno.jsonでパーミッションセットの定義をサポートする機能がマージされています (#30330):

{
  "permissions": {
    "default": {
      "net": true
    },
    "server": {
      "net": true,
      "read": ["data.txt"]
    }
  }
}

定義したパーミッションセットは--permission-setで適用することが可能です:

# (1) `permissions.default`を適用します
$ deno --permission-set main.js

# (2) `--permission-set`は`-P`の短縮形式です
$ deno -P main.js

# (3) `permissions.server`を適用します
$ deno --permission-set=server main.js

また、deno bench/deno compile/deno testの各コマンド向け専用のパーミッションセットを定義することも可能で、deno.jsonの対応するセクション配下のpermissionsで定義できるようです (以前deno.jsonpermissions.{compile,bench,test}を特別扱いする想定で実装されていました):

{
  "test": {
    "permissions": {
      "read": ["data.txt"]
    }
  }
}
# `test.permissions`を適用します
$ deno test --permission-set main.js

Deno.testへのbefore*/after*フックのサポート

先週に紹介したDeno.testへのbefore*/after*フックをサポートするPRがマージされています (#30504)

例えば、Deno.test.beforeEach()Deno.test.afterEach()を使うことで、該当のテストモジュール内における各テストケースの実行前後に特定の処理を実行することができます:

Deno.test.beforeEach(() => setup());
Deno.test.afterEach(() => teardown());
Deno.test("doSomethingAsync", async () => {
  await doSomethingAsync();
  // ...
});

Deno.ChildProcess.{stdout,stderr}へのResponseライクな問い合わせメソッドの追加

先週に紹介したDeno.ChildProcessResponseオブジェクトライクな問い合わせメソッドを追加するPRがマージされています (#30552):

const command = new Deno.Command(Deno.execPath(), {
  args: ["json_reference"],
  stdout: "piped",
}).spawn();
const json = await command.stdout.json();

deno_stdのリリース

deno_stdのリリースが実施されています (release-2025.09.04)

@std/net@1.0.6

@std/net@1.0.6がリリースされています。

@std/net/unstable-ip - 新規APIの追加

matchSubnets()/matchIPv4Subnet()/matchIPv6Subnet()が追加されています (#6786)

特定のアドレスがCIDR表記で指定されたサブネットにマッチするかどうかを検証できます。

@std/streams@1.0.12

@std/streams@1.0.12がリリースされています。

@std/streams/unstable-abort-streamの非推奨化

AbortStreamが非推奨化されています (#6799)

ReadableStream#pipeThroughsignalオプションによって代用可能であることが理由のようです。

@std/toml@1.0.10

@std/toml@1.0.10がリリースされています。

@std/toml/parseのバグ修正

parse()でネストされたテーブルの配列が適切に解析されるよう修正されています (#6794)

Fresh 2.0 Graduates to Beta, Adds Vite Support

Fresh 2.0 Graduates to Beta, Adds Vite Supportという記事がDenoの公式ブログで公開されています。

この記事ではFresh v2の betaバージョンとViteプラグイン (@fresh/plugin-vite)が正式にアナウンスされています。