
DenoチームがCloudflareに合流
Node.jsとDenoを生み出したRyan Dahl氏とDenoのチームがCloudflareに加わり、WorkersとDurable Objectsを基盤とするサーバー実行環境の開発に取り組みます。CloudflareはDenoランタイムの開発を1年後に終える方針で、チームは独立したランタイムの開発から共通プラットフォームへ軸足を移します。
DenoはNode.jsと同じく、サーバー上でJavaScriptを動かすランタイムです。CloudflareはDenoの開発元を買収し、Dahl氏と同僚12人をWorkersの拡張に迎えました。Dahl氏は、サーバー構築の基盤をLinux仮想マシンに置く従来の方式から、Workersの実行モデルへ移る考えを示しています。
Denoチームは、ランタイムだけでなく、アプリケーションの実行、保存、通信を一体で扱う仕組みを目指してきました。Deno Deployの運用を通じて基盤側の複雑さに取り組み始め、その後、Workersのプログラミングモデルを基に分散アプリを構築するcelldを開発しました。Cloudflareでは、celldとworkerdをWorkersおよびDurable Objectsのチームの成果と統合する計画です。
Denoの開発と関連サービスの予定
Cloudflareは今後1年間、Denoランタイムを月次リリースで更新し、バグ修正とセキュリティ更新を提供します。その後、同社によるランタイム開発は終了しますが、Denoはオープンソースとして残り、他の開発者による継続を受け入れる方針です。
Deno Deployは6カ月後に終了する予定です。有料顧客にはCloudflare Workersへの移行支援を提供します。一方、JavaScriptやTypeScript向けのパッケージレジストリJSRは運営を続け、基盤をCloudflareへ移します。
DenoチームはRustからV8を利用するためのrusty_v8も引き続き支援し、workerdへの統合を進めます。Cloudflareは2022年にWorkersランタイムのオープンソース版workerdを公開していましたが、当初は開発者によるテストを主な用途としていました。今回の計画では、単体での開発・テストにとどまっていたworkerdに、分散状態を扱う機能を組み合わせます。
Workersの実行方式とDurable Objects
WorkersはGoogleのJavaScriptエンジンV8の「isolate」でコードを実行します。isolateは同じプロセス内にあっても、コードが外側のメモリーへアクセスできない実行単位です。Cloudflareは1つのプロセスで複数のisolateを動かし、デバッガー利用時などには別プロセスで実行します。
Cloudflareの設計では、Workerのコードからローカルファイルシステムやネットワークへ直接アクセスできません。外部との通信は決められたAPIを通し、実行環境の外にあるプロセスが仲介します。この構成では、個別のサーバープロセスをアプリごとに用意する代わりに、共有プロセス内の実行単位とAPIの制限を使って分離します。
Durable Objectsは、状態を持つ分散アプリを作るための仕組みです。各オブジェクトは一つのスレッドで動作し、固有のIDと専用ストレージを持ちます。SQLite対応のストレージでは、オブジェクト固有のデータをトランザクションで扱え、SQLやキー・バリュー形式の操作を利用できます。ストレージはそのオブジェクト専用で、別のオブジェクトから直接アクセスできません。
セルフホスト対応を目指す統合
Dahl氏が開発したcelldは、Durable ObjectsのプログラミングモデルをCloudflare以外でも動かすことを目指すオープンソース実装です。celldの構想では、Workersがリクエストを処理し、Durable ObjectsやKV、キュー、D1などの状態を「セル」と呼ぶ単位で保持します。セルごとにSQLiteデータベースを持たせ、共有バケットに状態を保存する設計です。
celldは、常駐セル1つあたりのメモリー使用量を0.47MBとする測定値を掲載しています。また、8GBのノードで2,500セルを動かす構成を示し、測定条件としてApple Mシリーズ端末上のループバック実行などを挙げています。これらはcelldの測定値で、Cloudflareが今後統合するランタイムの性能値ではありません。
統合後の目標は、workerdを単体で動かせるJavaScript/WebAssemblyランタイムとし、WorkersやDurable Objectsとの連携を深めることです。Denoチームは、Cloudflareのネットワーク上だけでなく、利用者自身のインフラでも同じプログラミングモデルを使える環境を目指すとしています。











