Cloudflare Workersの心臓部をセルフホスト!JavaScript/Wasmサーバーランタイム — workerd

cloudflare/workerdC++7.9k

workerdは、Cloudflare Workersを動かしている実際のコードをベースにしたJavaScript/Wasm(ブラウザ外でも動くプログラム実行環境)のサーバーランタイムです。Cloudflare Workers向けに作ったアプリケーションを自分のサーバーで動かしたり、開発中にローカル環境でテストしたり、HTTPリクエストを途中で加工・転送するプログラム可能なプロキシ(中継サーバー)として使うことができます。workerdはWeb標準のAPI(fetch()など)をベースにしており、「ナノサービス」という独自の設計思想で、マイクロサービスのように分離しつつもローカル関数呼び出し並みの速さで通信できます。バージョン番号が日付になっていて、過去の互換性日付を指定すれば古いAPIの挙動をそのまま再現できるため、アップデートで既存コードが壊れることがありません。Cloudflareのインフラ技術を自分の手元で使いたい開発者や、エッジコンピューティングに興味がある人に最適なツールです。

🔥 なぜ話題?

Cloudflareが自社の本番環境で使っているランタイムそのものをオープンソースで公開しているという点が大きな注目を集めています。エッジコンピューティングやサーバーレスへの関心が高まる中、ベンダーロックインを避けてセルフホストできる選択肢として、またNode.jsやDenoに続く新しいJavaScriptランタイムとしても技術者の間で話題です。

💡 こう使える!

例えば、Cloudflare Workers向けに開発したWebアプリケーションを、クラウドに依存せず自社のサーバーで運用したい場合に、workerdをインストールして設定ファイルを書くだけで、同じコードをそのままセルフホストできます。開発段階では`wrangler dev`コマンドと組み合わせて、ローカルPCで本番さながらの動作確認も行えます。

ユースケース: Cloudflare Workers向けに書いたJavaScriptアプリを自分のサーバーで動かしたり、ローカル開発・テスト環境として使う

  • Cloudflare Workersの本番コードと同じ基盤をオープンソースで利用可能
  • バージョン番号が日付で過去の互換性を完全に維持する仕組み
  • ナノサービス設計でマイクロサービスの柔軟さとローカル呼び出しの速さを両立
GitHubで見る →

The JavaScript / Wasm runtime that powers Cloudflare Workers

技術情報

言語

C++

ライセンス

Apache-2.0

最終更新

2026-03-18

スター数

7,942

フォーク数

586

Issue数

548

技術詳細

アーキテクチャ・仕組み

  • Cloudflare Workersの本番環境と同一のコードベースから構築されたJavaScript/Wasmランタイム
  • 内部的にはV8エンジン(Google ChromeのJavaScriptエンジン)を使用
  • 設定ファイルはCap'n Protoテキスト形式で記述
  • 「ナノサービス」アーキテクチャ:複数のサービスを同一スレッド・プロセス内で実行し、関数呼び出し並みのパフォーマンスで通信
  • 「Capability bindings(ケイパビリティバインディング)」により、グローバル名前空間ではなくケイパビリティベースでリソースを接続。SSRF攻撃(サーバー側リクエスト偽造)を構造的に防止

対応環境・プラットフォーム

  • Linux: x86-64 / arm64(glibc 2.35以上)
  • macOS: x86-64 / arm64(macOS 13.5以上、Xcode Command Line Tools必要)
  • Windows: x86-64
  • CPU要件: x86_64はSSE4.2とCLMUL拡張、arm64はCRC拡張(armv8.1-a以降はデフォルト有効)

ビルド要件

プラットフォーム必要なツール
LinuxBazel, clang 19+, libc++ 19+, LLD 19+, python3, tcl8.6
macOSBazel, Xcode 16.3, Homebrew tcl-tk
WindowsBazel, LLVM(install-deps.batで自動インストール可)

高性能ビルド(Thin LTO有効):

bazel build --config=thin-lto //src/workerd/server:workerd

主要な機能・用途

  • アプリケーションサーバー: Cloudflare Workers向けアプリのセルフホスト
  • 開発ツール: ローカル開発・テスト(Wrangler v3.0以上と連携可能)
  • プログラム可能なHTTPプロキシ: フォワード/リバースプロキシとしてリクエストの傍受・加工・ルーティング
  • Web標準API: fetch()などのWeb Platform Standards準拠のAPI
  • 互換性日付システム: バージョン番号が日付で、過去の日付を指定するとその時点のAPIを忠実に再現

本番運用

  • systemdとの統合が推奨されており、--socket-fdフラグで親プロセスからソケットを継承可能
  • 特権ポート(80/443)をsystemdのソケットユニットで開き、workerd自体は非特権ユーザー(nobody)で実行可能
  • クラッシュ時の自動再起動、NoNewPrivilegesによるセキュリティ強化が設定例として提供

セキュリティに関する注意点

  • workerd単体ではサンドボックスとしての防御は十分ではない
  • 信頼できないコードを実行する場合は、仮想マシンなど追加のセキュリティレイヤーが必要
  • Cloudflare本番環境では多層防御を実装済み
  • セキュリティバグはCloudflareのバグバウンティプログラム(HackerOne)で報奨金対象

配布方法

  • プリビルドバイナリはnpm経由で配布(npx workerdで実行可能)
  • ソースからのビルドはBazelを使用

ライセンス

  • Cloudflareが管理するオープンソースプロジェクト(GitHubリポジトリで公開)

インストール・クイックスタート

npm経由で実行する場合(最も手軽)

npx workerd serve my-config.capnp

ソースからビルドする場合

  1. Bazelisk(推奨)をインストール
  2. Linux: clang-19以上、libc++-19以上、lld-19以上、python3、tcl8.6を用意
  3. macOS: Xcode 16.3、Homebrew経由のtcl-tkを用意
  4. ビルド実行:
bazel build //src/workerd/server:workerd

リリースモードでビルド:

bazel build //src/workerd/server:workerd --config=release

簡単なHello World設定ファイル例

hello.js:

addEventListener("fetch", event => {
  event.respondWith(new Response("Hello World"));
});

実行:

workerd serve my-config.capnp

参考になる外部の関連記事

関連リポジトリ

たった12MBで作れる!超高速クロスプラットフォームデスクトップアプリ — electrobun

blackboardsh/electrobunC++6.2k

ElectrobunはTypeScript(JavaScriptの改良版)でデスクトップアプリを作るためのツールです。通常のElectronアプリは重くて動作が遅いことが多いですが、electrobu

cloudflare/kumo

cloudflare/kumoTypeScript724

Cloudflareが開発するモダンなWebアプリケーション構築のためのコンポーネントライブラリです。Cloudflareの内部で使用されている実績のあるUIコンポーネントを提供し、一貫したデザインシ

完全無料でプログラマーになれる!10万人以上が転職に成功した学習プラットフォーム — freeCodeCamp

freeCodeCamp/freeCodeCampTypeScript441.8k

freeCodeCampは、プログラミング・数学・コンピュータサイエンスを完全無料で学べるオンライン学習プラットフォームです。寄付で運営される非営利団体が提供しており、Webサイト制作からPython

開発者の宝箱!1400以上の無料APIを一覧できるカタログ集 — public-apis

public-apis/public-apisPython409.9k

public-apisは、世界中の無料で使えるAPI(ソフトウェア同士をつなぐ仕組み)を1つのリストにまとめた巨大なカタログ集です。天気予報、仮想通貨の価格、動物の画像、ニュース、音楽、地図など、50

美しいUIを「コピペ」で即導入!自分だけのコンポーネントライブラリを作ろう — ui

shadcn-ui/uiTypeScript109.0k

shadcn/uiは、美しくデザインされたUI部品(ボタン、入力欄、ダイアログなど)を自分のプロジェクトにそのまま取り込んで自由にカスタマイズできる、オープンソースのコンポーネント集&コード配布プラッ