虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

Deno 1.35 へのアップデートと変更事項まとめ

皆さんこんにちは。おっくんです。

去る 2023 年 7 月 5 日に Deno 1.35 がリリースされました。 今回も、リリースノートを参考に 変更事項の気になるところを紹介します。

Deno 1.35

Deno 1.35 での変更事項をDeno 1.35 リリースノートを元に確認します。

Deno.serve() が安定化

unstable なAPIとしてこの数ヶ月の間で仕様変更など入っていた Deno.serve() が安定化しました。

Deno.serve() を使ったWebサーバーを次の1行のコードで記述できると紹介されています、

Deno.serve((req) => new Response("hello world"));

また、Node.js でhello-world を返すサーバーを構築した時と比べ、2倍のスループットとテールレイテンシとメモリ効率が向上したそうです。

詳細は、ドキュメントマニュアルをご確認ください。

npm と Node.js 互換性の向上

Node.js 組み込みモジュールのうち、http https zlib に対しての互換性が大幅に改善されたそうです。 変更が入った互換性モジュールは以下の通りです。

  • fs.FileHandle
  • http.ClientRequest.upgrade
  • http.IncomingMessageForClient.complete
  • http2
  • https.createServer
  • process.reallyExit
  • v8.setFlagsFromString
  • zlib.brotliCompress
  • zlib.brotliCompressSync
  • zlib.brotliDecompress
  • zlib.brotliDecompressSync
  • zlib.createBrotliCompress
  • zlib.createBrotliDecompress

これらのAPIの互換性が改善されたことで、次のnpm モジュールが、Deno で動作するようになったそうです。

これらが動くなら Deno を使ってみることを検討するという方もいるように思います。

この中で npm:axios の使用例を記載します。

[サーバー側]

$ deno

> Deno.serve((req) => new Response("hello world"));
Listening on http://localhost:8000/
{
  finished: Promise { <pending> },
  then: [Function: then],
  ref: [Function: ref],
  unref: [Function: unref]
}

[クライアント側]

$ deno
> import axios from 'npm:axios';

> (await axios.get('http://localhost:8000/')).data
"hello world"

シンプルな例ではありますが axios が動くことが確認できました。

Deno API の変更

API の追加

これらのAPIが追加されました

  • Deno.AtomicOperation
  • Deno.errors.FilesystemLoop
  • Deno.errors.IsADirectory
  • Deno.errors.NetworkUnreachable
  • Deno.errors.NotADirectory
  • Deno.InspectOptions.breakLength
  • Deno.InspectOptions.escapeSequences
  • Deno.KV.enqueue

これらの中で、Deno.KV.enqueue ですが、 Deno.KV 導入されたキュー機能で使用されています。
簡単な使用例としては次の通りです。

const db = await Deno.openKv();
db.listenQueue((msg: unknown) => {
  console.log(msg);
});

let count = 0;
setInterval(async () => {
  await db.enqueue(`const = ${count}`);
  count++;
}, 1000);

動かすと次の様になります。

$ deno -V 
deno 1.35.0

$ deno run --unstable queue.ts
const = 0
const = 1
const = 2
const = 3
const = 4
const = 5
...

enqueue した データが、listenQueue で受けていることがわかります。

API の安定化

これらの実行には --unstable が不要になります。

  • Deno.ConnectTlsOptions.alpnProtocols
  • Deno.ListenTlsOptions.alpnProtocols
  • Deno.serve
  • Deno.StartTlsOptions.alpnProtocols

その他

  • 言語サーバーの改善
    • インポートマップと npm: 指定子のオートコンプリート
  • STD ライブラリの変更
    • semver の書き換え
    • http/entities の追加
    • http/user_agent の追加
  • Deno 1.35 には、V8 11.6、TypeScript 5.1.6 が同梱されます。

まとめ

Deno 1.35 で対応する npm パッケージが増えたのが大きな変化になると思います。 使用例として掲載した axios など、これが動くなら試してみようかな?と思えるものが増えているように思います。
今まで試してみて動かなかったので、あきらめていたものを今一度試してみるのもいいのではないでしょうか?

すでに Deno 1.38まで がリリースされています。またこちらも追いかけていきます。

採用情報

虎の穴では一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
カジュアル面談やエンジニア向けイベントも随時開催中です。ぜひチェックしてみてください♪
yumenosora.co.jp