11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Electronを超えろ!軽量・高速なRustで切り拓くクロスプラットフォーム開発

Last updated at Posted at 2025-12-09

この記事はNTTドコモソリューションズ Advent Calendar 2025 10日目の記事です。

はじめに

ドコモソリューションズの山内です。
社内でRust関連を担当しており、社内へRustを普及/展開/開発支援する組織にいます。

今回はRust製デスクトップアプリの所感について書かせていただきます。

まずはRustという言語の特徴を簡単に振り返りますので、直接本題に行きたい方はコチラからお願いいたします🙇‍♀️🙇‍♂️

Rustとは⚙️

Rustは2015年から2016年ころに最初のバージョンがリリースされた、「安全性」「速度」「生産性」の三つを高いレベルで両立しようとするシステムプログラミング言語です。

所有権(ownership)と借用(borrowing)に代表されるメモリ管理モデルによって、

  • use-after-free
  • ダングリングポインタ
  • データ競合

といった定番の問題をコンパイル時に潰せるのが大きな特徴です。

加えて、Rustがもつ型システムの厳密さもRustが持つメリットの一つで、昨今流行っている生成AIを利用したコーディングにおいて、動かないコードや脆弱性を含むコードをコンパイル時に弾くことができます。

このような利点はAIアプリ開発、WebAssembly、バックエンド、CLIツール系、そして近年はデスクトップアプリ領域にも確実に進出しています。

Rustの主戦場⚔️

前述した通り、現在のRustの主戦場はC/C++が動いている領域です。
2025年12月時点までで、Rustは以下のような実績があります。

  • Windowsにおけるドライバの開発 [文献1] [文献2]
  • Androidのシステムサービスやライブラリ、カーネルの一部をRustへ移行 [文献3]
  • Rust製サービス AWS Firecracker / AWSがRustを使った開発のためにSDKを準備 [文献4] [文献5]
  • Rust for Linuxプロジェクトの発足 [文献6]

ここまででわかることは、
「安定性が要件としてあるものにRustが採用されている」
ということです。

OSのコア部分(カーネル)やドライバ、仮想化など、メモリ周りが原因で機能不全に陥ってはいけないものにRustが積極採用されているという現実があります。

では、私たちが日常的に使うWebやデスクトップ、モバイルアプリに安定性が不要かといえば、もちろんそんなことはありません。
メモリ安全性をはじめとするRustの強みは、こうしたアプリ開発領域にも活かせるため、最近ではRust製アプリの開発が少しずつ進んできています。

しかし、現状のデスクトップアプリ界にはElectronという強力な存在があります。

デスクトップアプリ界に存在するElectronの牙城👑

現在では数多くのアプリがElectronで制作されています。
例えば:

  • VisualStudio Code
  • Slack
  • Discord

など。

これらのうち一つくらい使ったことがあるという方は多いのかなと思います。

ElectronはメインプロセスでNode.jsが動作し、フロントエンドにはHTML/CSS/JavaScriptを利用します。
そのためWebアプリの資産を流用しやすく、Web技術に慣れた開発者であればデスクトップアプリ開発にも参入しやすい、というメリットがあります。

一方でElectron製アプリは、フロントエンド描画用のChromiumとNode.jsランタイムの双方をバンドルする必要があるため、実行バイナリが肥大化しやすいという課題もあります。

さらに実行時には、ChromiumとNode.jsの2種類のランタイムが同時に動作するため、アプリを起動しただけでも100MB単位のメモリを消費します。

これではリソースが限られた端末(具体的にはメモリを8GBしか積んでいないようなマシン)では動かすのも一苦労になってしまいます。

Rust製デスクトップアプリの素晴らしさとは(直球)

前置きが長くなりましたが本題です。

ではRust製アプリはクロスプラットフォーム界のゲームチェンジャーになり得るのか、という話です。
「短期的にはNo、長期的にはYes」だと感じています。

短期的にはNoである理由は以下にざっくりとまとめます。

  • Electronに関連する技術資産が多い
  • Node.jsを扱える技術者がRust技術者に比べて多い
  • 既存の動いているElectron製アプリをRust(Tauri)製に移行するのはいろいろとコストがかかりすぎる

長期的にはYesである理由も以下にざっくりまとめますが、あとでさらに深堀りしていきます。

  • Electron製のアプリに比べて圧倒的に軽量になる
  • 要らないものは内包しないのでよりセキュリティレベル向上を図れる
  • Rustのメリットを享受できる

Rust製アプリ開発を可能にするTauri

前述の通りRustは所有権や借用といった独自の仕組みにより、メモリまわりの不具合をコンパイル時に防ぐことができます。これはOS開発や組み込みのような低レイヤー分野だけでなく、私たちが日常的に開発するアプリケーションでも大きなメリットがあります。

もちろんRustでも循環参照などによるメモリリークはゼロにはできませんが、手動でfree()(C系でのメモリ解放)を呼ぶ必要があるC/C++と比べれば、メモリ管理の負担は圧倒的に小さくなります。

そして、これらRustの利点を抱えながら、ElectronのようにWeb系の資産を流用でき、かつクロスプラットフォーム開発を可能にする技術があります。

それがTauriです。

Tauriって誰ぞ?

一言でまとめるとRust製のElectronです(暴論)。

とはいえ、成果物のイメージとしては近いものがあります。
フロントエンドは既存のWebアプリの資産をそのまま活かせますし、UIは各OSが標準で持っているWebViewに描画されます。
バックエンド側はRustで実装されており、軽量さや堅牢性を活かしながら、通知・ファイルシステムといったOSの機能へアクセスできます。

「Web の開発しやすさ」と「ネイティブアプリとしての扱いやすさ」をうまく両立させようとしているフレームワーク……というと、雰囲気がつかみやすいかもしれません。

RustはElectronを超える?その理由を探る

1. ChromiumとNode.jsから卒業できるから

VS Codeのような大規模アプリをノートPCで動かすと「重い」「バッテリーを食う」といった声を見かけますが、その背景にはChromium + Node.jsの二本立て構造があります。

また、Electronを採用すればクロスプラットフォーム開発ができる反面、Chromiumの不要な実装まで一緒に抱え込んでしまい、結果としてアプリ全体が重くなりがちです。

ChromiumとNode.jsを使うElectronを卒業すれば不要なブラウザエンジンを内包せずに済むため、バイナリに余計な「贅肉」がつかなくなります。

2. WebViewは最低限の権限のみでサンドボックス実行される

各OSのWebViewは、基本的にOSの機能へ直接アクセスできない“箱”として動作します。

OS依存の処理が必要な場合は、TauriのバックエンドへInter-Process Communication(IPC)で処理を依頼する仕組みになっています。

Tauriバックエンド側で用意する関数はtauri_commandを使って定義し、これをフロントエンド側から呼び出す形で実現します。

つまり、開発者がRust側で明示的に処理を書かない限り、WebViewは「UIを描画するためのコンポーネント」という役割しか持ちません。

この構造のおかげで、“フロントエンドがなんでもOSを触れる状態”にならず、セキュリティやアーキテクチャ面での整理がしやすくなっています。

3. 攻撃対象範囲が相対的に狭い

まずUIですが、HTML/CSS/Javascriptで書かれたものをOS由来のWebViewへ描画するので、WebViewの脆弱性への対処をOS側に投げることができます。WebViewの脆弱性を塞ぐのをOSのセキュリティパッチに任せるということですね。

Chromiumにもなんとなく同じようなことが言えるとは思うのですが、アプリ自体の脆弱性という意味では、Chromiumよりも攻撃対象が小さくなります。

加えて、Node.jsを含まない、Chromiumの余計な実装を含まないことは、そのまま攻撃対象範囲が狭まることを意味します。

このようにElectron製のアプリと比較して嬉しいことがたくさんあることは理解していただけたかと思います。

Tauri (Rust)の弱点

Rust担当だからといって贔屓目に記事を書きましたが、RustやTauriにも弱点はあります。

それはずばり、人材確保の難しさです。

まず前提として、日本国内でRustを触ったことがある人はまだ少なく希少な存在です。
加えてRustには所有権やライフタイムといったメモリ安全性に関する概念によって学習曲線が急になりがちで、プログラミング初学者は挫折する可能性があります。

プログラミング中級者であっても、C/C++を触ったことがない人やポインタというワードを聞いただけで蕁麻疹が出る人は覚悟の準備が必要かと思います(私調べ)。

つまり、書ける人を見つけるのも難しいし、育てるのも難しいという二重苦があります。

一方でElectronはどうでしょうか。

HTML/CSS/Javascriptはもちろんとして、Node.jsを触ったことあるよ、というWebアプリ開発者は少なくないと思います。学習するにしてもよい教材や情報がたくさん存在し、すぐにある程度書けるようになる言語です。

結論

結論として、現実的にはElectron製アプリが完全に駆逐されることはないと考えています。
Electronは近年メモリ最適化やChromiumの軽量化など改善が進んでいるので、今回挙げた「Tauriの方が優れている部分」も今後変わる可能性が大いにあります。

一方でRustですが、数年でRustを書ける人が爆発的に増えるとも思っていません(理由は「弱点」の部分で前述)。

しかし、中長期的にはRustによって支えられるサービスやアプリは数を増やし、市民権を得ていくものと考えています。

Electronの設計思想よりRust(Tauri)のものに合ったユースケースがあれば、気軽に試せる未来がくるよう社内外で邁進してまいりますので、今回の記事で少しでもRust/Tauriを知って、触っていただけたらと思います。

参考文献


記載されている会社名、製品名、サービス名は、各社の商標または登録商標です。

11
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?