「Deno 2」が間もなく登場。Denoにとって初めてのメジャーバージョンアップに

2024年8月27日

Node.jsの登場は、それまで比較的面倒だったノンブロッキングな非同期のネットワークプログラミングを容易にするAPIと、それをJavaScriptという非常に広く使われているプログラミング言語で利用可能にしたことで、サーバサイドにおけるJavaScriptランタイムという分野を新たに切り開くだけでなく、当時課題となっていたC10K問題の解決など、サーバアプリケーションの開発に大きな影響を与えました。

参考:Node.jsのコンセプトとは? ライアン・ダール氏による東京Node学園祭 基調講演(前編)

その上で、Node.jsはAWS Lambdaに代表されるサーバレスコンピューティング環境の基盤として採用され、新たな分散コンピューティング環境の革新にも寄与してきたと言えます。

ライアン・ダール氏の反省:NodeからDenoへ、

しかしNode.jsの開発者であるライアン・ダール氏は2012年にNode.jsの開発を実質的に離れ、その後に「Node.jsに関する10の反省点」を明らかにし、反省点を元にした新たなJavaScriptランタイムである「Deno」の開発を開始します。

参考:Denoの作者ライアン・ダール氏らが「Deno Company」を立ち上げ。Denoの開発推進と商用サービスの実現へ

DenoはあえてNode.jsとの互換性を捨て、Node.jsよりも優れたサーバサイドのJavaScript/TypeScriptランタイムを実現するという方針で開発されてきましたが、2022年に大幅な方針変更を発表し、Node.js互換機能とNode Package Manager(NPM)に対応するとしました。

参考:Denoが大幅な方針変更を発表。3カ月以内にnpmパッケージへの対応を実現、最速のJavaScriptランタイムを目指しHTTPサーバを刷新

「Deno 2」が間もなく登場、Deno初のメジャーバージョンアップ

そのDenoにとって初めてのメジャーバージョンアップとなる「Deno 2」が間もなく登場する見通しです。

Deno 1.xの最後のリリースとなる「Deno 1.46」が8月22日に公開されました

そして、そこから数日以内に「Deno 2」のリリース候補版が公開される見通しであることが発表されています。

Deno 2について作者のライアン・ダール氏は、昨年(2023年)4月にベルリンで行われた「Node Congres」の「Forced Optimization」という講演で説明し、また最近では今月(2024年8月)のStackOverflow Podcastのエピソード「Ryan Dahl explains why Deno had to evolve with version 2.0」でもその方向性を語っています。

特に後者はDeno 2のリリースが近いこともあって、より詳しく内容が語られています。同氏の発言から、Deno 2がどのような方向性を持つバージョンアップなのかを見ていきましょう。

モジュールシステムの拡大

ライアン・ダール氏はまず、そもそもDenoの大きなコンセプトの1つが、モジュールシステムにURLを採用したことだと説明しました。

We started Deno written in Rust. I think one of the major changes is that it uses HTTP specifiers, or let's say URLs, for a module system. You did not import from NPM. You can host files anywhere on the web, kind of a decentralized module registry, and the idea was to vastly simplify what was going on in the Node ecosystem by just running JavaScript. And we've kind of taken this to the limit in some sense. We've built all sorts of tooling around this. Deno has been worked on for years now under this idea. It's a nice idea because it's really simple. Everything gets very simple when all you have is URLs for modules, and it works really great for small scripts.

私たちはRustでDenoの開発を始めました。Node.jsからの大きな変更点の1つは、モジュールシステムにHTTP指定子、つまりURLを使用するようにしたことです。NPMからインポートすることはしません。Web上のどこにでもファイルをホストできるので、一種の分散型モジュールレジストリなのです。Nodeのエコシステムで起きていることを、JavaScriptを実行するだけで大​​幅に簡素化できてしまうというアイデアです。私たちは、ある意味でこれを極限まで追求しました。これを中心にあらゆる種類のツールを構築しました。Denoはこのアイデアのもとで何年も開発されてきたのです。とてもシンプルで良いアイデアでした。

しかしこのアイデアは小さなスクリプトでは上手く機能したとしても、大規模なプロジェクトでは不十分だったことが分かりました。そのためDeno 2ではモジュールシステムの拡大を進めるとしています。

But what we found is that as you kind of scale up your projects, and this is going to be unsurprising to many people, it becomes difficult to manage a bunch of URLs kind of scattered around your code base, and so the impetus behind Deno 2 is kind of scaling up the module system.

しかし、多くの人にとって驚くことではないかもしれませんが、プロジェクトを拡大していくと、コードベースに散在する多数のURLを管理するのが難しくなることが分かりました。そのため、Deno 2ではモジュールシステムの拡大を進めています。

モジュールシステムの拡大には、すでに実装されているNPM対応に加え、モノレポのサポートなども含まれます。

So Deno 2 will have workspace support that is monorepo support, the ability to have multiple packages inside of it, and also, although we've kind of walked back from this, HTTP specifiers as kind of the central module system. We are still fairly unhappy with the NPM ecosystem. So you can still still import NPM modules and the compatibility is pretty great, but we've also introduced JSR, which is a very simple way to publish some JavaScript or TypeScript code and share it with people without a build setup and without too much rigmarole.

Deno 2ではモノレポをサポートするワークスペース、複数のパッケージを内部に保持する機能、などをサポートし、そして少し後退はしましたがHTTP指定子を一種の中央モジュールシステムとして使用します。私たちはまだNPMエコシステムに満足していません。そのため、NPMモジュールをインポートすることはできますし互換性もかなり優れたものにしましたが、JSRも導入しました。これはビルドの設定などの面倒な手間をかけずに、JavaScriptまたはTypeScriptのコードを簡単に公開して他のユーザーと共有できます。

ここで説明されている機能、ワークスペースによるモノレポのサポートJSRなどはどれも、すでにDeno 1.xで実装が進んでいます。

参考:Deno、モダンなJavaScript/TypeScriptに最適化したパッケージレジストリ「JSR」パブリックベータ公開。Node.js、Bun、Cloudflareなどにも対応

つまりDeno 2はメジャーバージョンアップではありますが、Deno 1.xとの互換性を保ちつつ、漸進的なバージョンアップになると見られます。このことはライアン・ダール氏も次のように説明しています。

And I should say that in Deno 2, all your Deno programs will continue to work. It's not like this is kind of a radical change. This is an additive change.

Deno 2では、すべてのDenoプログラムは引き続き動作することをここで明言します。これは、劇的な変更ではなく、追加的な変更なのです。

またDeno 2では長期サポート(LTS:Long Term Support)版も予定されていると説明されており、Denoの開発を主導するDeno Landにとって、今後はビジネス面での展開も今以上に積極的に行っていくことが検討されているようです。

あわせて読みたい

JavaScript Web技術 プログラミング言語 Deno TypeScript




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本