Denoの今後の計画について

Deno公式からBig Changes Ahead for Denoという、Denoの今後の計画などに関する記事が公開されました。

今のところ、以下の点などに注力されていく予定のようです。

  • Node.jsとの互換性の向上
  • パフォーマンスの向上
  • エンタープライズユーザへのサポートの強化
  • 開発体験の向上

これらに関連すると思われる直近での変更について簡単にまとめてみます。

npm:URLのサポート

現在、npm:URLによるnpmパッケージのimportに関する開発が行われています。

feat(unstable): initial support for npm specifiers (#15484)

例えば、以下のようにして、npmパッケージをimportすることができるようです。

import express from "npm:express@5";
import { expect } from "npm:chai@4.2";

この機能には、大まかに以下のような特徴があります。

  • デフォルトでnpmパッケージはnpmの公式レジストリからダウンロードされ、DENO_DIRにキャッシュされます。
  • Node.js互換モード(--compat)とは異なり、npm:URLで読み込まれたモジュール内のみにNode.jsのグローバルAPI(process/global/Bufferなど)が注入されます。
  • Node.js互換モード(--compat)とは異なり、現時点では--unstableなしで使用できる想定のようです。
  • 型チェック, LSPのサポート, エントリポイントでのnpm:URLの指定(例: deno run npm:mkdirp path/to/dir)などの機能はまだ入っておらず、今後追加されていく予定のようです。

この機能はおそらく、次のv1.25でリリースされるのではないかと思われます。

新しいHTTPサーバ (Flash)

HTTPサーバの高速化を目的に、Deno本体でFlashという新しいHTTPサーバが開発されています。

既存のDeno.serveHttp()とは異なるDeno.serve()という新しいAPIが追加されており、これによってFlashサーバを起動することができます。

Deno.serve({
  fetch: async (req) => {
    return new Response(await req.text());
  },
  signal: abortController.signal,
});

内部的には、V8 Fast API Callshttp/httparseなどを活用することで高速化が図られているようで、以下のページからベンチマーク結果を閲覧できます。

この機能は次のv1.25でリリースされる予定のようです。

deno initコマンド

Deno本体にdeno initコマンドを実装するPRがマージされています。

feat: add “deno init” subcommand (#15469)

$ deno init path/to/project_dir

現時点では、エントリポイント(main.ts)とテストファイル(main_test.ts)の生成のみがサポートされているようですが、将来的にはdeno.json(c)やImport mapsファイルなどのサポートも検討されているようです。

この機能も次のv1.25でリリースされる可能性がありそうです。

Oak v11.0.0

Oak v11.0.0がリリースされました。

先述したFlashサーバの実験的なサポートが追加されており、以下に使用例が公開されています。


https://github.com/oakserver/oak/commit/2abd2e28c06f3e1ce5596142a11844525df95f97

deno_tui v1

DenoのTUIライブラリであるdeno_tuiのv1がリリースされています。


https://github.com/Im-Beast/deno_tui/releases/tag/1.0.0