先頃Cloudfareがオープンソース公開したWranglerは、Rustで記述されてWebAssemblyにコンパイルされるCloudfare ワーカの開発、プレビュー、パブリッシュを行うためのCLIツールセットである。
Wranglerは、開発者がRustで記述したサーバレス関数をWebAssemblyに変換して、Cloudfareワーカとしてデプロイし実行できるような、エンドツーエンドのエクスペリエンスを提供することを目的とする。WebAssemblyにコンパイルするステップは、Wrangler CLIによって隠蔽されている。
Wranglerを試すためには、cargoを使って"cargo install wrangler
"を実行してインストールすればよい。Wranglerによって生成されるプロジェクトの一般構造には、Rustコードが格納されるsrc
ディレクトリ、Rustの生成したコードを呼び出すworker.js
スクリプトを置くworker
ディレクトリ、いくつかのメタデータファイルが含まれている。Wranglerにはbuild
、preview
、publish
という3つの主要なコマンドがある。build
コマンドはRustコードをWebAssemblyにコンパイルするもので、preview
コマンドは作成した関数をCloudfareアーキテクチャ上で実行するためのものだ。現時点では関数をローカルでプレビューすることはできないが、少なくともCloudfareインフラストラクチャ上で関数をプレビューするためには、Cloudfareアカウントは必要ない。
Rustのコードは通常のように記述する。任意の依存関係をCargo.toml
ファイルで指定したり、wasm.bindgen
を使って、文字列やオブジェクト、クラスなどの利用を可能にして、wasmとJS間のコミュニケーションを改善することも可能だ。例えば、次のような簡単なRustファイルがあるとする。
use wasm_bindgen::prelude::*;
extern "C" {
fn alert(s: &str);
}
#[wasm_bindgen]
pub fn greet(name: &str) -> String{
&format!("Hello, {}!", name);
}
次の構文を使用することで、このコードをworker.js
ファイルにインポートして実行することができる。
const { greet } = wasm_bindgen;
await wasm_bindgen(wasm)
const output = greet('Worker')
Cloudfareではさらに、リンティングやテスト、ベンチマーク、サイズプロファイリングのサポートといったコマンドをWranglerに追加する予定である。
CloudfareワーカはJavaScriptで記述されたサーバレス関数で、世界中に点在する任意のCloudfareのエッジロケーションで実行することができる。Cloudfareによれば、エッジロケーションがエンドユーザに近いことによってネットワークレイテンシが低減され、ワーカのパフォーマンスが向上する。Cloudfareワーカはコードの実行にV8 JavaScriptエンジンを使用するが、Node.jsは使用せず、多数の独自実装APIに依存することによって、効率性と安全性の向上を図っている。