Rustで肥大化したChromiumを使わずにHTML/CSSをレンダリングする方法
小さなデスクトップアプリをElectronでパッケージするたびに、どこかのRAMが泣いています。Tauriのような代替手段でさえ、異なるオペレーティングシステム間で癖があるシステムWebViewに依存しています。Dioxusフレームワークの開発者たちは困難な道を選び、Rustで独自の軽量レンダリングエンジンを書くことを決意しました。彼らはこのプロジェクトをBlitzと名付けました。

なぜ別のエンジンを構築するのか
ChromiumやWebKitには何ギガバイトものコードが含まれています。これらはWebGL、WebSockets、WebRTC、Bluetooth、IndexedDB、数百ものブラウザAPIをサポートしています。しかし、HTMLとCSSに基づいてユーザーインターフェースをレンダリングする必要があるだけなら、そのほとんどが不必要な重量になります。
Blitzは不必要なものをすべて取り除きます。このエンジンは単一のタスクに焦点を当てています:HTML/CSSを解析し、ページレイアウトを計算し、画面またはGPUテクスチャに出力します。デフォルトではJavaScriptエンジンはなく、ネットワークスタックは最小限で、明示的に望まない限りHTTPでリソースを読み込むことしかできません。システムとのやり取りはRustコード内に残ります。
モジュール式アーキテクチャ
Blitzの作成者たちはゼロから始めることはありませんでした。彼らはオープンソースコミュニティから実証済みのコンポーネントを採用し、統一されたシステムに組み合わせました:
- CSSの解析とスタイルの計算は、Mozilla FirefoxおよびServoのCSSエンジンであるStyloが担当します。
- FlexboxとCSS Gridのレイアウト計算は、Taffyライブラリが処理します。
- テキストのレンダリングはParleyを使用します。
- HTMLの解析はhtml5everが担当します。
- グラフィックスのレンダリングは、AnyRender抽象化とVelloを通じて行われます。
この構造により柔軟性が確保されています。画面へのレンダリングなしでHTMLを解析して要素の寸法を決定するだけなら、html5everとTaffyの2つのクレートだけが必要です。ネイティブDioxusアプリケーションの構築には、Velloを統合します。
コードではどのように見えるか
プロジェクトはまだ初期のプレアルファ段階にあるため、ソースからビルドする必要があります。数分でサンプルの試用を開始できます:
git clone https://github.com/DioxusLabs/blitz
cd blitz
cargo run --release --package browser
リポジトリには複数のデモスクリプトが含まれています。たとえば、コンソールから直接シンプルなMarkdownビューアを実行できます:
cargo run --release --package readme ./README.md
すでにDioxusで記述しており、WebViewの依存関係を排除したい場合は、リポジトリがネイティブビルドを提供しています。gitバージョンの直接リンクをCargo.tomlに追加するだけです:
[dependencies]
dioxus-native = { git = "https://github.com/DioxusLabs/blitz", features = ["prelude"] }
その後、標準のインポートuse dioxus::prelude::*がuse blitz_dx::prelude::*に変更され、UIがBlitzを通じてレンダリングされます。
制限事項と現在のステータス
Blitzで商用製品を構築することはまだ時期尚早です。開発者たちは numerous bugs and unimplemented features について正直に警告しています。基本的なCSSセレクター、Flexbox、シンプルなフォーム、CSS変数はすでに動作します。ただし、複雑なメディアクエリや特定のレイアウト属性は予測不能に動作する可能性があります。
ただし、プロジェクトにはいくつかの強力なポイントもあります。AccessKitライブラリとの統合により、画面リーダーやアクセシビリティシステムのサポートがデフォルトで提供されます。そして、WGPUを通じたレンダリングにより、HTMLインターフェースをゲームエンジンや3Dシーンに直接埋め込むことができます。
試す価値はあるか
Blitzは、デスクトップ開発で重いブラウザラッパーに厌倦した人々に設計されたツールです。すぐにElectronの完全な代替品になるわけではありません。
当面は、Rustシステムプログラマー、グラフィックエンジン研究者、Dioxusエコシステムの愛好家にとって魅力的です。リポジトリの開発を追跡する価値は、StyloとTaffyがCEFへの軽量な代替品へと進化するのを見るためだけでもあります。
関連プロジェクト