メインコンテンツまでスキップ
Version: 0.18.0

Choosing a web library

はじめに

Yew アプリはweb-sysstdwebで作ることができます。 これらのクレートは Rust と Web API のバインディングを提供しています。 Cargo の依存クレートにyewを追加する際はどちらかを選ばなければいけません:

# Choose `web-sys`
yew = "0.17"

# Choose `stdweb`
yew = { version = "0.17", package = "yew-stdweb" }

Rust / Wasm 活動チームのサポートがあるweb-sysが推奨です。

使用例

// web-sys
let window: web_sys::Window = web_sys::window().expect("window not available");
window.alert_with_message("hello from wasm!").expect("alert failed");

// stdweb
let window: stdweb::web::Window = stdweb::web::window();
window.alert("hello from wasm!");

// stdweb with js! macro
use stdweb::js;
use stdweb::unstable::TryFrom;
use stdweb::web::Window;

let window_val: stdweb::Value = js!{ return window; }; // <- JS syntax inside!
let window = Window::try_from(window_val).expect("conversion to window failed");
window.alert("hello from wasm!");

2 つのクレートの API はわずかに異なりますが、だいたい同じ目的で似た機能が提供されています。

一方を選ぶ

アプリにweb-sysstdwebのどちらを選ぶかにおいてはいくつかの見方があります。 注意として、一つのアプリに両方を用いることができるのですが、クレートをコンパイルした際にバイナリのサイズを小さくするには 一方だけを使用するのが良いです。

web-sysstdweb
プロジェクトの進捗状況

Rust / Wasm 活動チーム により活発にメンテナンスされている

GitHubで8ヶ月間動きなし
Web API のカバー

RustのAPIはWeb IDLスペックから自動的に生成される。

Browser APIはコミュニティにより追加。

RustのAPIのデザイン

ほとんどのAPIコールおいてResult が返ってくるよう保守的なアプローチがとられている。

しばしばResult を返さずpanicするようになっている。例えば stdweb::web::window() ワーカーの中で呼ばれるパニックする。

サポートされているビルドツール

  • wasm-bindgen
  • wasm-pack

  • cargo-web
  • wasm-bindgen
  • wasm-pack
サポートされているターゲット
  • wasm32-unknown-unknown
  • wasm32-unknown-unknown
  • wasm32-unknown-emscripten
  • asmjs-unknown-emscripten