Denoばた会議 Monthly 第14回

Deno v1.27

npmパッケージで型チェックがサポート

import { default as stringWidth } from "npm:string-width@5.1.2";

console.info(stringWidth("foo")); // => 3
console.info(stringWidth(123)); // => 型エラー

deno checkなどを実行した際に、対象のnpmパッケージに含まれる型定義ファイルの内容を元に、型チェックが実行されます。

npmパッケージで型チェックがサポート

// @deno-types="npm:@types/express@4.17.14"
import { default as express } from "npm:express@4.18.2";

console.info(express("foo")); // => 型エラー

型定義ファイルが同梱されていないパッケージについては、@deno-typesで型定義を指定できます。

Node-APIのサポート

import { compress, uncompress } from "npm:lz4-napi@2.2.0";

const data = await Deno.readFile("./deno.json");
const compressed = await compress(data);
const uncompressed = await uncompress(compressed);

現時点では、Node-APIをベースに実装されたパッケージを利用するには、--allow-ffiの指定が必要です。

ロックファイル v2

--lock-writeによって出力されるロックファイルのフォーマットが変更されました。

$ deno run --unstable --lock=lock.json --lock-write main.ts

次のDeno v1.28では、deno.jsonが存在する場合、ロックファイルをデフォルトで出力することが検討されているようです。

deno lspでInlay Hintsがサポート

img

vscode_denoを最新バージョンにアップデートし、"editor.inlayHints.enabled""on"などを設定すると有効化されます。

アップグレードチェッカー

$ deno run main.ts
A new release of Deno is available: 1.27.0 → 1.27.1
Run `deno upgrade` to install it.

もし不要であれば、DENO_NO_UPDATE_CHECK1を設定すると無効化できます。

deno taskの改善

安定性に関する警告メッセージが表示されなくなりました。

# v1.26までだと、以下のような警告メッセージが表示されます
$ deno task benchmark
Warning deno task is unstable and may drastically change in the future
...

deno taskの改善

複数のコマンドを並列で実行する際の挙動が変更されています。

{
  "tasks": {
    "test-async": "exit 1 & exit 0"
  }
}
$ deno task test-async

# v1.27.0だと`1`, v1.26.0だと`0`
$ echo $?
1

unstable APIの安定化

下記APIが安定化されました。(--unstableなしで利用できます)

  • Deno.consoleSize
  • Deno.osRelease
  • Deno.stdin.setRaw
  • Deno.futime/Deno.futimeSync
  • Deno.loadavg
  • Deno.utime/Deno.utimeSync

V8がv10.8へアップデート

[1, 2, 3].toReversed() // => [3, 2, 1]
[4, 2, 10, 5].toSorted() // => [10, 2, 4, 5]
[1, 2, 3, 4].toSpliced(1, 2) // => [1, 4]
[1, 2, 3].with(1, 20) // => [1, 20, 3]

Change Array by copyのサポートが入っています。

その他の変更点

  • Deno.listenDeno.listenTlsreusePortオプションがサポート (Linuxのみ)
  • Deno.listenDatagramreuseAddressオプションがサポート
  • navigator.languagenavigator.languagesが実装
  • Deno.killDeno.Process.killsignal引数がオプショナルに変更 (デフォルトでSIGTERMが送信されます)
  • Deno.listenによってUnixドメインソケットを開く前にDenoの内部で行われていたソケットファイルの削除処理が廃止

その他の話題

deno_stdのアップデート

非推奨のモジュールやAPIが削除されています。

Prisma v4.5.0

Denoの初期サポートが入りました。(公式ガイド)

$ deno run -A --unstable npm:prisma@4.5.0 init

現時点では、Prisma Data Proxy経由でのデータベース接続のみがサポートされています。

Nuxt 3でのDenoサポート

Nuxt 3のサーバエンジンであるNitroでDeno presetの実装が進んでいるようです。

これが実装されれば、Nuxt 3で開発されたアプリケーションをDeno Deploy上などで動かせるようになりそうです。