Ryan Dahl、Bert Belder、Bartek Iwańczuk が、Web ブラウザー外で TypeScript と JavaScript を実行するための新しいランタイムの最初の製品リリースである Deno 1.0 を公開しました。
ダール氏は、イベント駆動型HTTPサーバーに特化したNode.jsの創始者です。DenoはNode.jsのフォークではなく、新しいランタイムです。「Node.jsのユーザー数が多いため、システムの進化は困難で、時間がかかる」とチームは今週説明しました。
2018年6月、ダール氏はNode.jsにおける設計ミスについて発言しました。2012年に自分がプロジェクトから離れた当時、Node.jsは良好な状態に見えたが、それは「全くの間違い」だったと彼は述べました。さらに、「自分が犯したバグや設計ミスは、今となっては修正不可能だ」と付け加えました。
彼が後悔していることの一つは、2009年にNode.jsに追加され、2010年に削除されたJavaScript Promisesを使っていなかったことだ。「愚かにも削除してしまった」と彼は言い、その結果、多くのNode.jsの非同期APIが「ひどく古くなってしまっている」と付け加えた。もう一つの後悔は、セキュリティとNode.jsのサンドボックスの欠如だ。GYP(Generate Your Projects)を使ったビルドシステムは「ユーザーにとってひどい体験だ」と彼は述べた。
Node.jsはGYPをラップしているため、不要な複雑さが生じています。NPM(Node Package Manager)をNode.jsに組み込むことも問題でした。Node.jsのモジュールは間違いで、大きくなりすぎて複雑になりすぎたと彼は言います。「これは私の責任であり、残念ながら今さら元に戻すことはできません」と彼は言いました。
こうした不満から生まれたのが、Deno(アルファベットを並べてみると、おなじみの単語が思い浮かびます)と呼ばれる新たな取り組みです。これは「現代のサーバーサイドJavaScriptランタイムとして理想的なもの」を基盤としています。DenoはV8(ChromiumとNode.jsで使用されているJavaScriptエンジン)をベースに構築されていますが、Nodeとは異なり、セキュリティのためにV8サンドボックスを活用しています。明示的に有効化しない限り、ファイル、ネットワーク、環境へのアクセスはできません。
3 行のコードで構築できる Deno Web サーバー (ただし、大量のインポートが必要)
DenoはRustも利用しています。Deno_coreは、JavaScriptランタイムをRustに埋め込むために誰でも使用できるRustクレートであり、Denoはdeno_core上に構築されています。別のクレートであるrusty_v8は、V8 C++ APIへのRustバインディングを提供します。これは「安全なインターフェースを目指している」ものの、まだ100%安全ではありません。リリース記事では、「V8のように複雑なVMを安全に操作できることは非常に素晴らしいことであり、これによりDeno自体に多くの難解なバグを発見することができました」と説明されています。
スケジューリングは、Rustの非同期ランタイムであるTokioによって処理されます。もう一つの重要なコンポーネントは、Denoの主要言語であるTypeScriptです。TypeScriptファイルは直接実行でき、JavaScriptにコンパイルする必要はありません。この記事のデモを少し変更し、3行のコードでDenoウェブサーバーを実行することで、その実例を示しました。
デノ建築
DenoはNodeパッケージとは互換性がありませんが、「初期段階の互換性レイヤー」が存在し、多くのNodeアプリケーションが最終的にはそのまま実行できるようになると開発者は予想しています。パフォーマンスは現時点ではNodeよりも優れている点と劣る点があります。Nodeプログラムは1秒あたりのリクエスト数は多くなりますが、「最大レイテンシが不安定」だと開発チームは述べています。一方、例えばHello World Denoサーバーの最大レイテンシは1.3ミリ秒(一部のハードウェアは未指定)です。Nodeとは異なり、Denoの非同期ソケットは最下層でも「基本的にPromiseに結びついている」と開発チームは述べています。
1.0というラベルが付いていますが、まだ初期段階であり、DenoのAPIの一部は不安定とマークされています。さらに、ドキュメントによると、Denoの標準モジュールはまだ安定していません。また、チームによると、内部で使用されているTypeScriptコンパイラは非常に遅いとのことです。TypeScriptコンパイラをRustに移植する予定ですが、これは大規模なプロジェクトです。実現すれば、すべてのTypeScript開発者にとって役立つでしょう。Denoチームは支援を呼びかけています。
まだ初期段階ですが、Denoへの関心は高まっています。「DenoはNode.jsの多くの問題を解決します」と、コンサルタントのAmine Ait Aazizi氏はTwitterで述べています。「TypeScriptが組み込まれ、標準ライブラリがより充実し、パッケージマネージャーも不要で、デフォルトで安全です。」
Node はどこにも行きませんが、これはうまくいくはずです。®