1月14日、The New Stackが「Want a Web Framework for Rust, Not JavaScript? Try Leptos」と題した記事を公開した。この記事では、Rustフレームワーク「Leptos」やWebAssembly(Wasm)を活用したWeb開発の最新動向について詳しく紹介されている。
以下に、その内容を紹介する。
Leptosとは
Leptosは、Rustで書かれたフレームワークをWeb Assembly経由でWebアプリとして高速かつインタラクティブに動作させる仕組みを提供するものである。公式サイトによれば、主要なフロントエンドフレームワーク(Vue、Svelte、Reactなど)と比較して優れたパフォーマンスを持ち、バニラJavaScriptに迫るとされている。以下はLeptos公式サイトで公開されているベンチマークの一例である。
LeptosはSolid(JavaScript)やSycamore(Rust)と同様の“細粒度リアクティブシステム”を採用しており、仮想DOMを使用せずにUIの一部だけを更新する効率的なレンダリングを可能にしている。また、コンポーネントベースの設計を採用し、クライアントサイドレンダリング(CSR)とサーバサイドレンダリング(SSR)の両方に対応しているのが特徴だ。
Leptosを使用したコード例は以下。ボタンをクリックすると数値がカウントアップしていく、というおなじみの例だが、Reactに近い感覚でコードを記述できることがわかる。
#[component]
pub fn Button() -> impl IntoView {
let (count, set_count) = signal(0);
view! {
<button on:click=move |_| {
set_count.update(|n| *n += 1);
}
>
"Click me: "
{count}
</button>
}
}
実行結果
開発者であるGreg Johnston氏は、WebAssemblyの登場をきっかけにRust製のWebフレームワークを作るに至ったと語っている。元々JavaScriptで多数のWebアプリケーションを作っていたが、Rustを学ぶ中で言語仕様の堅牢性やパフォーマンスが魅力的だったという。そのため、JavaScriptフレームワークに匹敵する開発体験をRustで実現することを目指し、Leptosを開発したとのことだ。
Leptosはバージョン0.7.3であり、完全な本番運用に向けてはまだ課題が残っている。とはいえ、開発者コミュニティが活発にライブラリを整備しており、「積極的に貢献しながら使うのであれば十分利用可能」というスタンスである。現状では、必要に応じて制約や未実装部分を理解しつつ使いこなす必要があるだろう。
他のRustフレームワークとの比較と今後
Leptosも競合RustフレームワークのSycamore(v0.9.1)も、まだ1.0には到達していないのが実情だ。しかし、高いパフォーマンスや正確性を求める開発者にとっては十分試す価値があるといえる。Wasmの台頭によって、RustでWebアプリを作成する道はこれまで以上に拡大しつつある。Leptosは、JavaScriptに頼らない高速でリアクティブなWebアプリを構築する可能性を示唆している点が興味深い。
Wasmによって、どのようなプログラミング言語でもWebアプリの構築に利用できるようになる、という未来が少しずつ現実味を帯びてきているといえるだろう。
最後に、WebAssembly自体も今後さらにWeb開発に取り入れられると考えられる。Leptosは、そうした可能性を象徴するプロジェクトの一つであり、まだ成熟段階ではないものの、RustでWebアプリを組み立てるうえで新たな選択肢として注目されている。
詳細は[Want a Web Framework for Rust, Not JavaScript? Try Leptos]を参照していただきたい。