8月4日、Denoは新バージョン1.36を発表した。
Deno 1.36では、セキュリティの柔軟性が向上し、テストとベンチマークのオプションが拡張されたほか、Node.jsの互換性が向上し、さまざまな品質向上が行われた。
より柔軟なセキュリティオプション
Denoの設計目標のひとつは、柔軟で堅牢なランタイムセキュリティの提供だ。Deno 1.36では、--deny-*
フラグによるさらなるセキュリティオプションが追加された。これは既存の--allow-*
フラグと合わせて、ネットワーク通信、ファイルシステムアクセス、およびその他の機密性の高いAPIに対して、許可リストと拒否リストを設定できるようにする。
以下は、--deny-net
フラグを使用した例だ。特定のIPアドレスやドメインを除外しつつ、プログラムに任意のURLへのアクセスを許可したい場合に使用する。
$ deno run --allow-net --deny-net=api.evil.com mod.ts
また、ファイルシステムに対しても同様に設定が可能だ。
$ deno run --allow-read --deny-read=/etc --allow-write --deny-write=/etc mod.ts
従来の--allow-*
フラグと同様に、新たな--deny-*
フラグもセキュリティを強化するために重要な機能となっている。
拡張されたテストAPI
Deno 1.36では、テストとベンチマークのAPIも改善されている。テスト結果のフォーマットに関しては、新しいカスタムフォーマッターが導入された。例えば、JUnitフォーマットを利用してテスト結果を出力することができる。
$ deno test --reporter=junit
deno test --junit-path=test_report.xml
また、短くて分かりやすいテストレポートを好む開発者のために、dot
フォーマッターも追加された。
さらに、Node.jsのテストAPIを利用したい場合には、node:test
ポリフィルを使用することができる。これにより、Node.jsからDenoに移行する際にもスムーズなテスト実行が可能となる。
import assert from "node:assert";
import test from "node:test";
test("synchronous passing test", (t) => {
assert.strictEqual(1, 1);
});
test("asynchronous passing test", async (t) => {
assert.strictEqual(1, 1);
});
Deno 1.36では、これらのテストAPIをより使いやすく、開発者のテスト体験を向上させることを目指している。
その他の改善点
Deno 1.36には、Node.jsとの互換性向上や品質向上にも注力している。npmパッケージのバイナリ設定がない場合でも実行できるようになり、Node.jsのネイティブアドオンをロードするためのprocess.dlopen
APIが利用可能になっている。
さらに、エラーメッセージの改善やWebSocket APIでのHTTP(S) URLの利用が可能になるなど、より使いやすい開発環境を提供するための改善が盛り込まれている。
この他にも、LSPの改善や他の多くの新機能と修正が含まれており、Deno 1.36はより強力で使いやすいバージョンとしてリリースされている。