山本ゆうごブログ

山本ゆうごの仕事メモ

Electronが意外に頑張ってるという話

Electronというのは、GitHubが開発したオープンソースのフレームワーク。デスクトップアプリケーションを作るのに便利。UIの部分はブラウザを使っている。ATOMというテキストエディタが代表的なElectron製のアプリ。ブラウザを使ってるのにプレーンテキストを編集するアプリケーションだってところが面白ポイント。

その後VSCodeというマイクロソフト製のATOMが出てきてしのぎを削ってるという感じ。

ATOMやVSCodeを使っている人ならわかるけど、エディタとしての軽さは十分保ちながら拡張性が高くてプラグインも充実してる。

ブラウザを埋め込んでるからプログラムのサイズが大きくなってヤダというのはわかる。じゃぁネイティブアプリでいいじゃないかというと、結局のところUIの部分で「大量の文字や画像を描画したり」「いい感じに入力してもらったり」の部分で、ブラウザの再発明が必要になって、ごめんやっぱりブラウザを埋め込ませて欲しいということにもなる。

当然Electronの代替フレームワークは出てきてる。 https://www.publickey1.jp/blog/22/electronrusttauri.html

TauriというフレームワークはRust製というところが売り。Rustという言語はいいとして、じゃぁUIも全部Rustで記述できてるのかっていうと、ブラウザを埋め込む代わりにOSが持ってるWebViewの機能を呼び出してるというところがブラウザの埋め込みを回避してる。ん?あれ?Rust関係なくない?

OS毎のWebViewは当然のことながらレンダリングエンジンも違うので同じUIにはならない。そのうち標準化が進んで、MacのWebViewもChroniumベースになれば、今のElectronと同等の再現性になるだろう。ただまだそうではない。

そもそもRustからLinuxでUIを触るには、gtk-rs を使う。gtk-rsはC/C++なのでここはC系依存。さらにgtkからWebViewを呼び出してる。

いやいやElectronはバックエンドをNode.jsで書かなくちゃいけないじゃないかという話かも知んないけど、フロントエンドで大事なのは、ブラウザ上でどういう動きをさせるか。Chrome上でRustが動けばいいけど、動かない。動くのはJavaScript。サーバーサイドのNode.jsが動くのが気に食わないかもしれないけど、根本は「ブラウザをうまく使うデスクトップフレームワーク」であることは代わりはない。