BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Rustから生成されたWASMをCloudfareサーバレスワーカにデプロイする

Rustから生成されたWASMをCloudfareサーバレスワーカにデプロイする

原文(投稿日:2019/03/31)へのリンク

先頃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にはbuildpreviewpublishという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に依存することによって、効率性と安全性の向上を図っている。

この記事に星をつける

おすすめ度
スタイル

BT