Deno v1.23がリリースされました。

この記事では主な変更点などについて解説します。

deno rundeno cacheなどのコマンドでデフォルトの型チェックが無効化されました

下記コマンドで、デフォルトで型チェックが行われなくなります。

  • deno run
  • deno cache
  • deno eval
  • deno repl

今後、型チェックを行いたい場合は、deno checkコマンドを使うか--checkオプションを指定する必要があります。

$ deno check mod.ts

その他のdeno testなどのコマンドでは、引き続きローカルモジュールの型チェックがデフォルトで実行されます。

deno runが失敗する場合の対処方法

Denoは、型チェックを行わない場合、swcを使用してトランスパイルを行います。

その関係で、コードの実行時に、まれに問題が発生することがあるようです。

問題に遭遇した場合は、--checkオプションを指定するとtscが使用されるため、問題を回避できる可能性があります。

$ deno run --check mod.ts

Deno.sleepSync()の削除

Atomics.waitで代替可能であったり、イベントループを完全にブロックしてしまうなどの問題を抱えていたため、Deno.sleepSync()が削除されました。

Intl.v8BreakIteratorの削除

非標準APIであるため、Intl.v8BreakIteratorが削除されました。

代わりにIntl.Segmenterの使用が推奨されます。

deno taskコマンドの改善

--cwdオプションのサポート

--cwdオプションにより、タスク実行時のカレントディレクトリを変更できるようになりました (デフォルトでは、deno.json(c)の配置場所がカレントディレクトリに設定されます)

$ deno task --cwd ./src build

リダイレクションのサポート

タスクの定義でリダイレクションがサポートされました。

{
  "tasks": {
    "test": "echo foo > test.txt"
  }
}

また、/dev/nullにリダイレクトすると、出力が捨てられます (Windowsでも動きます)

コマンドの追加

下記コマンドがサポートされました。

  • cat
  • xargs

WindowsなどのOS上でも、これらのコマンドに依存したタスクを定義することができます。

TypeScript v4.7

Denoの内部で使用されるTypeScriptのバージョンがv4.7へアップデートされました。

合わせて、Denoの内部で"moduleDetection": "force"オプションが有効化されています。


https://devblogs.microsoft.com/typescript/announcing-typescript-4-7/

deno fmtコマンドの改善

上記、TypeScript v4.7に関連して、deno fmtコマンドで、下記拡張子のファイルがサポートされています。

  • cjs
  • cts
  • mjs
  • mts

deno infoコマンドで--configフラグがサポート

以下のように、deno infoコマンドに設定ファイルの配置場所を指定できます。

$ deno info --config tsconfig.json

deno replコマンドの改善

REPLでのコードの入力中に、Ctrl+sで新しい行を挿入できるようになりました。

Worker内でのDeno.exitの振る舞いが変更

Deno.exit()Worker内ではself.close()と同様の振る舞いをするよう挙動が変更されました。

self.onmessage = () => {
  Deno.exit(); // => Workerが閉じます
};

ブラウザにおいてはWorkerからメインウィンドウを閉じる手段がなく、DenoにおいてもWorker内からはプロセスを閉じられないようにすべき、というのがこの変更の背景のようです。

FFI(Deno.dlopen)でBigIntがサポート

64ビットの数値を返す関数をFFI経由で呼んだ際に、戻り値がNumberではなくBigIntとして返却されるように修正されました。

また、FFI経由で関数を呼ぶ際にBigIntを渡せるようになりました。

Deno.Child.killの引数が任意に

Deno.spawnChild()で返却されるDeno.Childオブジェクトのkillメソッドで、引数を省略できるようになりました。

引数を省略した際は、子プロセスにSIGTERMが送られます。

(Windows) Deno.addSignalListenerSIGINTSIGBREAKシグナルがサポート

Windows向けにDeno.addSignalListenerSIGINTSIGBREAKのサポートが追加されました。

Deno.addSignalListener("SIGINT", () => {
  console.log("Received SIGINT");
});

CompressionStreamDecompressionStreamdeflate-rawフォーマットがサポート

CompressionStreamDecompressionStream"deflate-raw"フォーマット(Deflateアルゴリズム)がサポートされました。

new CompressionStream("deflate-raw");

https://wicg.github.io/compression/#supported-formats

その他の変更点

  • SubleCrypto.exportKeyでECDH/ECDSAキーを"raw"フォーマットでエクスポートできるようになりました。
  • Deno.inspectによるフォーマット時に、カスタムのinspect関数(Deno.customInspect)にInspectOptionsが渡されるようになりました。
  • Deno.getGid()が実装されました (Deno v1.22.2)
  • fetchの引数にURLを渡す形式が非推奨ではなくなりました (Deno v1.22.3)
    const res = await fetch(new URL("https://example.com"));
    
  • --watchオプションで、dynamic importされるファイルが監視されない問題が修正されました (Deno v1.22.3)

参考