皆さんこんにちは。おっくんです。
去る 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