Electronの最適な代替手段は?徹底比較検証

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

스크립트

00:00:00クロスプラットフォームのデスクトップアプリ開発といえば、以前はElectronが定番でしたが、現在は
00:00:04選択肢が豊富で迷ってしまうほどです。そこで今日は、最適な選択肢を明確にするため、
00:00:093つの主要なクロスプラットフォーム向けデスクトップアプリ開発ツールを比較します。Rust製のTauri、Bunチームによる
00:00:14Electro Bun、そしてDenoの新しいデスクトップ向けツールであるDeno Desktopを扱います。基準としてElectronも使用します。
00:00:20もしこのチャンネルで他のツールを取り上げてほしい場合は、コメント欄で教えてください。
00:00:23今回は、バンドルサイズ、起動パフォーマンス、ランタイムパフォーマンス、そして開発体験の4点を比較します。
00:00:29検証のために、全く同じアプリを4回作成しました。画面録画ツールで、タイムライン上で編集して
00:00:35MP4として書き出せるものです。動画処理は、こうしたツールの限界を試すのに適しているため、あえてこの種類を選びました。
00:00:40もちろん、すべてがパフォーマンスだけで決まるわけではありません。
00:00:44チームのスキルセットや、構築しようとしている製品の種類も、どのフレームワークを選ぶかに影響します。
00:00:49しかし、本動画が選択の参考になれば幸いです。
00:00:58それでは、今回構築したアプリのデモを簡単に紹介します。アプリを起動して、
00:01:03録画する画面を選択し、録画ボタンを押します。これで画面を短く録画できます。
00:01:08終了したら「停止」ボタンを押します。すると、タイムライン上に録画データが表示されたウィンドウが現れます。
00:01:12ここで不要な部分をカットし、エクスポートしてMP4として保存できます。アプリ自体は非常にシンプルですが、
00:01:18録画、動画処理、UIレンダリングといった複数のAPIを使用しているため、テストとしては適切です。
00:01:24では、最初の項目であるバンドルサイズを確認してみましょう。
00:01:28繰り返しになりますが、すべて同一機能のアプリです。基準となるElectronは323MB、
00:01:35Tauriはわずか57MB、Electro Bunは418MB、Denoは111MBでした。
00:01:44MP4書き出し用にすべてffmpegを内蔵しており、これだけで45MBを占めます。Electro Bunがこれほど大きいのは、
00:01:52Chromiumを同梱する必要があったからです。何とかして回避しようと試みましたが、
00:01:56JavaScriptから直接システム標準のWebViewを使って画面を録画することはできませんでした。
00:02:01画面を録画するには「Screen Capture API」と「getDisplayMedia」関数が必要です。ブラウザに画面を要求して、
00:02:06ストリームを受け取り、MediaRecorderでエンコードします。ElectronとDenoはこの方法です。Electro Bunは
00:02:12そのAPIを一切含んでいないため、利用するにはChromiumを再導入するしかありませんでした。
00:02:17その結果、さらに200MBも肥大化します。DenoのAPIはこの機能を実装しているため、同じコードでも
00:02:24Chromium不要で、バンドルサイズは約100MBに収まります。一方、Electro Bunは約400MBに達します。
00:02:30RustのTauriはWebViewでの録画を一切行わないため、この対策は不要でした。
00:02:35すべてバックエンドで、ネイティブの「Screen Capture Kit」を介して録画されます。
00:02:40これはmacOSのQuickTimeと同じフレームワークで、バックエンドから直接録画が行われます。
00:02:46ディスプレイ、コーデック、ファイルパスを渡すと、アプリが自らファイルを作成します。WebViewはUIのみを担当し、
00:02:52描画データには一切触れません。JavaScript側で処理が必要なことも、Tauriなら
00:02:56ネイティブ機能で完結します。Screen Capture Kitはマイクとシステム音声をミキシングしてMP4に仕上げます。
00:03:02他のフォーマットへのエクスポート用にffmpegを同梱していますが、これは必須ではありません。
00:03:07次に起動速度を測定します。10回実行して中央値を取るスクリプトを作成しました。
00:03:13基準のElectronは273ミリ秒、Tauriは
00:03:19311ミリ秒でした。Electro Bunは773ミリ秒、Denoは242ミリ秒という結果でした。
00:03:29驚いたことにTauriは最速ではなく、Electronよりわずかに遅かったです。Denoが全員を上回りました。
00:03:34RustとシステムWebViewなら瞬時に起動すると思われがちですが、
00:03:39レンダリングエンジンが起動する点は共通なので、それが要因かもしれません。
00:03:44Electro Bunは異常で、Electronの3倍近くかかりました。ランチャーがBunを起動し、さらにChromiumを起動するという
00:03:503段構えのランタイムが原因であり、その遅延は体感できます。
00:03:56続いて、起動後のメモリ使用量を見てみましょう。基準のElectronは
00:04:01128MBでした。Tauriは109MB、Electro Bunは208MB、Denoは98MBでした。
00:04:10DenoとTauriはほぼ同等で、Electro Bunは他よりほぼ倍でした。
00:04:15Tauriについて、マーケティングで謳われているような10倍の改善とは言い難いです。ディスク容量は
00:04:21確かに小さいですが、実行時のメモリ消費量は他のツールと大差ありませんでした。
00:04:26測定時に注意すべき点として、Tauriは
00:04:31システムWebViewを使用しており、そのプロセスはアプリの子プロセスではありません。macOSが個別に起動するため、
00:04:36アクティビティモニター上ではTauriは約36MBと表示され、Electronの3倍優秀に見えますが、
00:04:42実際には関連プロセスを合計すると109MB近くになり、今回のテスト結果と一致します。
00:04:48録画自体のパフォーマンスについては、Tauriの方が明らかに優れていました。
00:04:53これはWebView内で録画データを橋渡しするのではなく、
00:04:58OSが提供するネイティブSDKで直接録画しているからでしょう。
00:05:0460fpsに近い滑らかな録画を実現したいなら、RustとTauriを選ぶのが正解です。
00:05:10次に開発体験についてですが、各プラットフォームの違いにより、この
00:05:15単純なアプリを作るだけでも一苦労でした。全体として、ElectronとTauriが最も
00:05:20実装が容易でしたが、DenoとElectro Bunでは多くの問題やシステムクラッシュが発生しました。Denoは
00:05:26録画を開始してアプリを非表示にすると、アプリ全体が強制終了してしまいました。おそらく
00:05:30表示される画面がなくなると、Denoがアプリのタスクが完了したと判断してしまうためでしょう。
00:05:36そのため、画面外に移動させるという無理な回避策をとる必要がありました。
00:05:41Electro Bunは、画面録画のためにChromiumを同梱する必要があり、さらに
00:05:46なぜか3Dレンダリング用のThree.jsやBabylon.jsに依存しており、それがバンドルサイズを膨らませていました。
00:05:53結論として、個人的にはTauriを選びます。ただし、Rustでプログラムしたくないなら、
00:05:58TypeScript開発者には成熟したElectronが依然として最適です。Denoは期待できますが、
00:06:04成熟にはまだ時間が必要でしょう。Electro Bunは今回の選択肢の中では最も残念でした。
00:06:09皆さんが判断する参考になれば幸いです。感想をコメントで聞かせてください。
00:06:13Deno Desktopについては別途動画を作成したので、詳しく知りたい方はこちらをクリックしてください。
00:06:18それでは、BetterstackのWarrenでした。ご視聴ありがとうございました。また次回お会いしましょう。

핵심 요약

開発体験と安定性を求めるならElectronが依然として最適だが、Rustの学習コストを許容できるのであれば、バンドルサイズと録画パフォーマンスにおいてTauriが最も優れた代替手段となる。

하이라이트

  • Electron(323MB)と比較して、Tauriは57MB、Denoは111MB、Electro Bunは418MBのバンドルサイズとなった。

  • 起動速度の中央値はDenoが242msで最速であり、Tauri(311ms)、Electron(273ms)を上回る結果となった。

  • メモリ使用量はElectronが128MB、Tauriが109MB、Denoが98MBであり、大きな差はない。

  • TauriはmacOSのネイティブSDKであるScreen Capture Kitを利用することで、他のツールよりも滑らかな60fpsに近い録画を実現する。

  • Electro Bunは画面録画のためにChromiumを同梱する必要があり、パフォーマンスとサイズの両面で非効率である。

타임라인

検証環境と対象ツール

  • Electron、Tauri、Electro Bun、Deno Desktopの4つを比較対象とする。
  • 録画、動画処理、UIレンダリングを行う画面録画アプリを共通のテストケースとして採用した。

クロスプラットフォーム開発において選択肢が増える中、バンドルサイズ、起動速度、ランタイムのパフォーマンス、開発体験を指標として検証を行った。検証用アプリはタイムライン編集とMP4書き出し機能を持ち、システムAPIの限界をテストするために最適化されている。

バンドルサイズと実装アプローチ

  • Tauriは57MBで最小のサイズを実現した。
  • Electro BunはChromiumの同梱が必要なため418MBに達した。
  • DenoはScreen Capture APIを実装済みのため、Chromiumなしで111MBに収まった。

ElectronとDenoはブラウザ標準のAPIを利用するが、Electro Bunにはその機能がないためChromiumを内蔵する必要があり、サイズが肥大化した。一方、TauriはWebViewに依存せず、macOSのScreen Capture Kitをネイティブで直接呼び出すことで効率的な録画処理を行っている。

起動速度とメモリ使用量

  • 起動速度はDenoが242msで最も速い。
  • Electro BunはElectronの約3倍の起動時間を要した。
  • 実行時のメモリ消費量は全ツールで100MB前後であり、Tauriが特別に優れているわけではない。

起動速度についてはDenoが最も優れたパフォーマンスを示した。TauriはシステムWebViewのプロセスが分離しているため、アクティビティモニター上では小さく見えるが、関連プロセスを含めるとメモリ使用量は109MB程度となり、他ツールと大きな差はない。

開発体験と結論

  • 実装の容易さではElectronとTauriが安定している。
  • Denoはアプリの画面非表示時に強制終了するなどの不安定さが見られた。
  • Rustを選択できる環境ならTauriを推奨し、TypeScript中心なら成熟したElectronが最適である。

開発体験ではDenoやElectro Bunにシステムクラッシュ等の問題が見られ、成熟度の差が明確になった。動画録画のパフォーマンスを最優先する場合、ネイティブSDKを活用するTauriが最も高い品質を提供し、TypeScript開発者にとっては既存のElectronが最も信頼できる選択肢である。

커뮤니티 글

모든 글 보기