Tauriで作るデスクトップアプリ

表題の件ですが、

デスクトップを整理するアプリ、Sortdを作成しました。

https://github.com/coffee522jelly-development/Sortd

2026年5月18日、リリースを開始しました。

まず、JavaScriptでデスクトップアプリを作るとはどういうことか?

一般的にJavaScriptは「Webブラウザの中で動く言語」というイメージが強いですが、現在ではJavaScriptだけでWindowsやmacOS向けのデスクトップアプリを開発できます。

その代表例が、Electron と Tauri です。

両者とも基本思想は共通しています。

  • UIはHTML/CSS/JavaScriptで作る
  • そのWeb画面を「ネイティブウィンドウ」の中に表示する
  • JavaScriptからOS機能(ファイル操作など)を呼び出せる

つまり、

「ブラウザ技術で作ったWebアプリを、ネイティブアプリとして動かす」

訳ですね。


Electronとは何か?

Electron は、簡単に言えば:

  • Chromium(Google Chrome本体)
  • Node.js(サーバーサイドJavaScript実行環境)

を丸ごと同梱したデスクトップアプリ実行環境です。

構造を図にすると:

[ あなたのHTML/CSS/JavaScript ]
                ↓
        Electron Runtime
      ┌─────────────────┐
      │ Chromium        │ ← UI描画
      │ Node.js         │ ← OS操作
      └─────────────────┘
                ↓
             Windows

なぜNode.jsが必要か?

普通のブラウザJavaScriptは、安全性のためにOSへ直接アクセスできません。

例えばブラウザでは:

  • C:\ を自由に読む
  • 任意ファイルを削除する
  • レジストリを触る
  • システムプロセスを起動する

などはできません。

しかしデスクトップアプリでは必要です。

そこでElectronは、Node.jsを統合することで:

const fs = require('fs')

fs.unlinkSync('C:/temp/test.txt')

のようなコードを可能にしています。

つまり、

JavaScriptが「ローカルPCを操作できる」

ようになる。

これは非常に強力です。


Electronのセキュリティ問題

しかしここが最大の危険点でもあります。

Electronでは、画面部分(レンダラープロセス)にNode.js機能を露出させる構成が可能でした。

つまり、もしアプリにXSS脆弱性があると:

require('fs')

のようなNode APIを悪意あるスクリプトが呼べる可能性があります。

結果として:

  • ファイル削除
  • 情報窃取
  • 任意コマンド実行

に繋がるケースがありました。

これは通常のWebサイトのXSSより遥かに危険です。

WebサイトのXSS:
→ 「ブラウザ内だけ」の被害

ElectronのXSS:
→ 「OS全体」へアクセス可能

だからElectronでは:

  • nodeIntegration: false
  • contextIsolation: true
  • preload script分離

などのセキュリティ設定が非常に重要になります。


なぜElectronアプリは重いのか?

ElectronアプリはChromiumを丸ごと内蔵します。

つまり各アプリが:

  • 独自ブラウザ
  • JavaScriptエンジン
  • 描画エンジン
  • 各種ライブラリ

を全部持っています。

例えば:

  • Visual Studio Code
  • Discord
  • Slack

などもElectron製です。

そのため:

  • メモリ使用量が大きい
  • 初回インストールサイズが大きい

という特徴があります。

はじめてデスクトップ掃除アプリを作った時にはexeが348MB。

多くのElectronアプリでは:

アプリコード数MB
+
Chromium数百MB

という構造になります。


Tauriとは何か?

そこで近年注目されているのが Tauri です。

TauriはElectronと違い:

Chromiumを同梱しません。

代わりにOS標準のWebViewを利用します。

構造はこう:

[ HTML/CSS/JavaScript ]
              ↓
          WebView
              ↓
        Tauri Core(Rust)
              ↓
            Windows

WebViewとは?

WebViewとは:

OSが元々持っている「ブラウザ表示機能」

です。

Windowsなら:

  • WebView2(Edgeベース)

macOSなら:

  • WKWebView(Safariベース)

Linuxなら:

  • WebKitGTK

などを利用します。

つまりTauriは:

「既にOSにあるブラウザ機能を借りる」

ので、Chromiumを丸ごと抱え込む必要がない。

これが劇的な軽量化の理由です。


なぜ8MBまで小さくなったのか?

Tauriで軽い理由は:

Electron

アプリ
+ Chromium
+ Node.js
= 数百MB

Tauri

アプリ
+ Rustランタイム少量
= 数MB〜十数MB

だからです。

  • Electron版:348MB
  • Tauri版:8MB

差は歴然です。


Rustが使われる理由

Tauriは内部をRustで書いています。

Rustは:

  • C++並みに高速
  • メモリ安全
  • バッファオーバーフローに強い

という特徴があります。

さらに:

  • Node.js常駐不要
  • GC不要
  • ネイティブコード生成

なので非常に軽量です。


「Rust製のVC++コンパイラ」とは?

ここは少し整理するとより正確です。

Windows向けにTauriをビルドするとき:

  • Rustコンパイラ(rustc)
  • Microsoft Visual C++ Build Tools

が必要になります。

つまり:

Rust → Windowsネイティブexe

へ変換する際に、MSVCツールチェインを利用します。

そのため:

「Rust製VC++コンパイラ」

というより、

「RustがMSVCツールチェインを利用してWindows exeを生成する」

という表現の方が技術的には正確です。


ElectronとTauriの思想の違い

Electron

思想:

「Web技術を完全に同梱して、どこでも同じ動作を保証する」

メリット:

  • 動作が安定
  • OS差異が少ない
  • Web開発者が扱いやすい

デメリット:

  • 重い
  • メモリ消費大
  • セキュリティ設計が重要

Tauri

思想:

「OS標準機能を活用して軽量化する」

メリット:

  • 軽量
  • 高速
  • セキュリティが比較的強い
  • 配布サイズ小

デメリット:

  • WebView差異の影響を受ける
  • Electronほど成熟していない部分もある
  • Rust知識が必要になる場面がある

「Tauriすごい」と感じるポイント

「WebViewをVC++で操作できる世界」と
「JavaScript UI」を
「Rustで安全に橋渡ししている」

ここがTauriの巧妙な設計です。

つまりTauriは:

  • フロント:Web技術
  • バックエンド:Rust
  • 描画:OSネイティブWebView

を繋ぐことで、

「Web開発体験」

「ネイティブアプリの軽量性」

を両立しようとしている。


総括

Electronは:

「Chromiumを丸ごと抱えたWebブラウザ型アプリ」

Tauriは:

「OSのWebViewを借りる軽量ネイティブ型アプリ」

です。

その結果:

  • Electronは巨大だが安定
  • Tauriは軽量だがOS依存が増える

というトレードオフが生まれています。

348MB → 8MB

という差は、

単なる圧縮技術ではなく、

「ランタイムを同梱するか」
「OS機能を借りるか」

という設計思想そのものの違いです。

ブラウザはなんでもできるため、作れるアプリの幅はElectron>Tauriですが、

小さなアプリの場合はTauri>Electronという図式が成り立ちます。

どのようなアプリを作れるか?どのような場合に有効か?を考えて最適な設計でアプリを作りたいと思いました。