ハクソク

世界を動かす技術を、日本語で。

OpenWorkers: RustによるセルフホスティングのCloudflare Workers

概要

OpenWorkersは、V8を利用したJavaScript実行環境を自前で構築できるオープンソースランタイム。
Cloudflare Workers互換の構文とAPIをサポートし、エッジコンピューティングを自社インフラで実現。
Docker ComposePostgreSQLのみでシンプルなセルフホスティングが可能。
ベンダーロックイン回避コスト予測性に重点。
今後は実行記録・リプレイによるデバッグ機能も計画。

OpenWorkersとは

  • OpenWorkers:V8 Isolateを活用したJavaScript実行ランタイム
  • エッジコンピューティング:自社インフラでCloudflare Workers同等の体験
  • オープンソース:Rust製、自由に改変・拡張可能
  • Cloudflare Workers互換:既存のWorkersコードをそのまま利用可能

主な機能

  • バインディング

    • KVストレージ:get, put, delete, list
    • PostgreSQL連携:データベース操作
    • S3/R2互換ストレージ:オブジェクト保存
    • サービスバインディング:外部サービス連携
    • 環境変数・シークレット:安全な情報管理
  • Web APIサポート

    • fetch, Request, Response:HTTP通信
    • ReadableStream:ストリーム処理
    • crypto.subtle:暗号化API
    • TextEncoder/Decoder, Blob:バイナリ・テキスト処理
    • setTimeout, AbortController:非同期制御

アーキテクチャ概要

  • nginx:リバースプロキシ役割
  • ダッシュボード:管理用UI
  • APIサーバー:リクエストの受付・処理
  • ログサーバー:アクセス・実行ログ管理
  • Runner(複数台):V8 IsolateでJSコード実行
  • PostgreSQL:永続データ保存
  • NATS:メッセージキュー
  • Postgate:PostgreSQL連携ゲートウェイ
  • Scheduler:cronスケジューリング処理

サンドボックス・制限

  • V8 Isolate:各WorkerごとにCPU(100ms)・メモリ(128MB)制限
  • セキュリティ:サンドボックスによる安全な実行環境
  • cron:5または6フィールドのcron構文対応

セルフホスティングの特徴

  • シンプルな導入:Docker Composeファイル+1つのPostgreSQLのみで構築可能
  • データ主権:全データが自社インフラ内で完結
  • 予測可能なコスト:リクエストごとの従量課金なし
  • ロックイン回避:ベンダー依存なし

開発の経緯と思想

  • 7年超の進化:初期はvm2、次にdeno-core、現在はrusty_v8ベース
  • 目的:Cloudflare Workers相当の開発体験を自社サーバーで実現
  • Claudeの協力:rusty_v8への全面書き換えを実現
  • 今後の展望
    • 実行記録・リプレイによる決定論的デバッグ
    • さらなる互換性向上と機能追加

利用メリット

  • 自社データの保護:外部にデータが流出しない
  • コスト管理:予測しやすい運用費用
  • Cloudflare Workers互換:移行・併用が容易
  • 柔軟な拡張性:OSSならではの自由度

OpenWorkersは、エッジコンピューティングのパワーを自社インフラに持ち込みたい開発者・企業にとって、Cloudflare Workersと同等の体験をセルフホストで実現する理想的な選択肢。

Hackerたちの意見

これをずっと作業してきたんだけど、最初はvm2から始めて、次にdeno-coreを2年間使って、最近はClaudeの助けを借りてrusty_v8で書き直したんだ。OpenWorkersを使えば、自分のインフラで信頼できないJSをV8のアイソレートで実行できるよ。Cloudflare Workersと同じ開発体験で、ベンダーロックインもなし。今できることは、fetch、KV、Postgresバインディング、S3/R2、cronスケジューリング、crypto.subtle。自己ホスティングは、単一のdocker-composeファイルとPostgresだけでできるよ。アーキテクチャについてのフィードバックや、次に欲しい機能について教えてほしいな。
現在うまくいってないこと(例えば、今取り組んでいるけどまだ動かないことのロードマップ)も書いておくと、誰かには役立つかもしれないね。とにかく、すごくクールだね!
サンドボックスソリューションの問題は、コードがサンドボックスから逃げられないという非常に強固な保証を提供しなければならないことなんだ。これを実現するのは本当に難しい。サンドボックスを評価する時は、あらゆる種類の攻撃に対してしっかりテストされている証拠を見たいし、それを理解するための詳細なドキュメントも必要だ。このレベルのドキュメントは珍しいよ!自分が納得できる例を挙げられるかはわからない。次に見るのは、そのソリューションが大きなセキュリティチームを持つ企業で実際に運用されている証拠だね。システムが壊れた時に実際のお金がかかる状況で。
Kubernetesのデプロイメントのクイックスタートを追加してもらえますか?シンプルなdeployment.yamlだけで十分です。
Denoを放棄する理由はあるの? 編集:もしCloudflare Workersとの互換性を持たせるのが目的なら、WorkersはDenoで動かせるよ。https://docs.deno.com/examples/cloudflare_workers_tutorial/
ベンダーロックインの依存を減らすものは全部アップボートするよ。クラウドサービスが大規模な脱出を見て、基本サービスに対して実際のコストを反映した合理的な価格を設定せざるを得なくなればいいな。クラウドサービスは、DIYと比べて目を見張るようなコストを無視すれば、本当に便利で素晴らしいんだ。
RAMの価格が上昇していることが、もっと多くの人をローカルからクラウドサービスに移行させるんじゃないかと心配してる。大企業がリソースを買い占めていると、数年後には自己ホスティングが難しくなるかもしれない。
Cloudflare Workersのランタイムはすでにオープンソースであることを指摘する価値があるかもね: https://github.com/cloudflare/workerd
> だから、基本的なサービス、例えばNATに対して無料以上の料金を取るんじゃなくて、実際のコストを反映した合理的な価格設定が必要なんだよね。NATのコストってどういうこと? > クラウドサービスは実際、すごく便利だし良いんだけど、DIYと比べると目が飛び出るようなコストがかかるよね。クラウドが高いのは間違いないけど、多くの国ではちゃんとしたビジネスをするにはDIYの方が高くつくこともある。サービスを運営するって、単にインストールコマンドを実行するだけじゃないからね。サービスを維持・監視するチームを持つのは、すでに高額なんだよ。
すごくクールなプロジェクトだね!素晴らしい仕事だ!無知な質問を許してほしいけど、`workerd`(https://github.com/cloudflare/workerd)が「オープンソース」(ランタイム自体については、デプロイモデルはあまりそうではないけど)であることを考えると、OpenWorkersの主な違いは完全な環境を提供していることなのかな?それぞれのランタイム自体の顕著な違いはある?スケーラビリティやエンタープライズ機能のために管理されたオファリングを提供する意図はあるのか、それとも主にDIY向けの自己ホスティングを可能にすることに焦点を当てているのかな?
ありがとう!主な違いは:1. 完全なスタック:workerdはランタイムだけ。OpenWorkersはフルプラットフォームを含んでる – ダッシュボード、API、スケジューラー、ログ、自己ホスティング可能なバインディング(KV、S3/R2、Postgres)。2. ランタイム:workerdはCloudflareのC++コードベースを使ってて、OpenWorkersはRust + rusty_v8。シンプルで、ハッキングもしやすい。3. マネージドオファリング:はい、すでにdash.openworkers.comにあるよ – 無料プランも利用可能。でも自己ホスティングは一級市民だよ。
V8がWASMに比べてサンドボックス化で優れている理由って何だろう?
V8では、JavaScriptとWASMの両方を実行できるよ。
WASMの副作用の問題ってもう解決されたの?例えば、ネットワーク呼び出しがちょっと複雑すぎる気がするんだけど。
CloudflareのWorkersのポイントって、関数ごとに支払うことじゃないの?自己ホスティングする場合、クラウドでレンタルしても、事前にハードウェアを用意しなきゃいけないよね。
多くの企業がデータセンターで自己ホスティングのサーバーを運営していても、その上でソフトウェアを動かす必要があるんだよね。すべての企業が自分たちでできることをするために人を雇う必要はないし、有料サービスを模倣するオプションがあるのは良いことだと思うし、導入しやすくなるよ。
作者へ:ASCIIアートのアーキテクチャ図がすごく崩れてるんだけど、少なくとも僕のPixelフォンのFirefoxでは。こういうテキストベースの図は技術者には魅力的だけど、結局実用性が低いことがわかったよ。画像を使うのがいいと思うし、テキストベースのバージョンは「ソースコード」として保持して、公開するのは「コンパイル」したもの、つまり間違いなく常に見れるものにするのがいいんじゃないかな(ASCIIアートで見落としがちなのはここだよね)。
iPhone 11のSafariでは完璧に表示されたよ。
教えてくれてありがとう!修正したよ – モバイル用に簡略化したASCIIバージョンを追加した。
> 自分のインフラにエッジコンピューティングの力をもたらすんだね。セルフホスティングのアイデアは好きだけど、エッジコンピューティングの概念にはかなり反してる気がする。エッジはCloudflareみたいな大手ベンダーがいるからこそ成り立つんだよね。自分のインフラで300以上のポイントオブプレゼンスを持つのはまず無理だと思う。小さくてもっと「倫理的」なベンダーの異種混合のフリートで再現することもできるけど、かなりの労力とリスクが伴うよ。
エッジモデルの恩恵を受けるのに300のポップが必要なの?それとも、主要な地域に10のポップがあれば十分?
これを見るのはいいね!Cloudflareはクールだけど、ロックインされると(KVやD1など)切り替えが難しくなるんだよね。オープンソースの代替を提供するのはいつでも良いけど、それを維持するのはコミュニティ次第だし。超セキュアなマルチテナンシーがなくても、自分の環境や小さなVPSで同じコードをストレージを変えずに実行できるのは、開発体験を大きく向上させるよ。
いいね!CF Workersは前から好きだったけど、ベンダーロックインが嫌で本格的なものは出してなかったんだ。これがあれば、いつでも逃げ道があるって分かるから完璧だね。
DockerコンテナにNodeやDeno、Bunを入れるだけじゃダメなの?
DockerのNodeは完全な隔離がないし、「サンドボックス」からの脱出も可能なんだ。V8は比較的かなり強化されてるよ。