Discord、ElectronをRustとGPUIに置き換え、より高速で軽量なデスクトップアプリを実現
Discordの新しいRustベースのクライアントは、GPUIフレームワークを活用することで、従来までのElectron版と比較して起動速度が大幅に向上し、RAM使用量を70%削減しました。
英語の原文から自動翻訳されました。
Discordは、Windows 11用デスクトップアプリケーションにおいて、ElectronフレームワークからRustで構築されたネイティブ実装への移行という大きなアーキテクチャ変更を実証しました。共同創業者兼CTOであるStanislav Vishnevskiy氏が共有した並列比較では、新クライアントはレガシーなElectronアプリが初期起動シーケンスを終える前に、インターフェースとフレンドリストの読み込みを完了していました。この移行は、高性能アプリケーションの間で、バンドルされたWebエンジンからシステムレベルの言語へ移行するトレンドが高まっていることを浮き彫りにしています。
何が起きたか
デモには、Windows 11を実行する2台のLenovo ThinkPadが使用され、現在のElectronクライアントと新しいRustベースのクライアントの両方をコールドスタートで起動しました。数百万回再生された動画では、Electronアプリが数秒間空白ウィンドウと読み込みヒントを表示している様子が映っていました。対照的に、タスクマネージャーで「Discord Phoenix」と識別される新クライアントは1秒以内にフェードインし、旧バージョンがまだ初期化中の間にフレンドリストを完全に読み込んでいました。Discordの従業員は、どちらのインスタンスもバックグラウンドで実行されておらず、システムトレイからの起動でもないことを確認し、速度差が新しいアーキテクチャによるものであることを裏付けました。
起動時間に加え、新クライアントのリソース効率も大幅な改善を示しています。Rust版は、同時にサインインしている2つのアカウントをサポートしながら、RAMをわずか290.2MBしか消費しませんでした。これは、Electronクライアントの典型的なアイドル時使用量である1GBと比較して、約70%の削減に相当します。同社は、Electron 42へのアップグレードなど、過去のElectronビルド最適化の試みは、メモリ使用量のわずかな増加と引き換えに、CPU性能の限定的な改善しか得られなかったと指摘しています。新しいアプローチでは、バックグラウンドでの自動更新と迅速なブートストラップにより、「Starting」画面が不要になるため、従来のモーダルダイアログを排除できます。
仕組み
Discordは、ChromiumベースのElectronランタイムを、Rustで書かれたGPUアクセラレーションUIフレームワークであるGPUIに置き換えました。すべてのアプリケーションインスタンスに対して完全なブラウザエンジンとNode.js環境をバンドルするElectronとは異なり、GPUIはハイブリッドな即時モードおよび保持モードレンダリング戦略を使用して、GPU上で直接インターフェース要素を描画します。これにより、コアUIコンポーネントにおけるHTMLおよびCSS解析のオーバーヘッドを回避できます。Rustはガベージコレクタなしでアプリケーションロジックとメモリを管理し、決定論的なパフォーマンスと低いメモリフットプリントを提供します。
このアーキテクチャは、OSのWebView(Windows上のWebView2など)に依存してHTMLインターフェースをレンダリングするTauriなどの他のRustベースのフレームワークとは異なります。Discordの実装はメインシェル全体でWeb技術を避けていますが、YouTubeビデオやActivitiesなどの特定の埋め込みコンテンツには引き続きネイティブシステムWebViewを使用しています。このハイブリッドアプローチにより、複雑なWebベースの統合機能はそのまま維持しつつ、主要なユーザーインターフェースはネイティブレンダリングの速度メリットを得られます。同じRustコードベースはモバイルプラットフォームにも適用されており、iOSおよびAndroidでのReact Nativeを置き換え、WebAssemblyを通じてWebクライアントのロジックを支えることになります。
主な詳細
- 新しいRustクライアントは、2つのアカウントがアクティブな状態で約290.2MBのRAMを使用しており、Electron版の1〜2GBと比較されています。
- 起動時間が大幅に短縮され、新クライアントはElectronアプリが起動アニメーションを終える前にフレンドリストを読み込みます。
- Discordは、TauriやWinUIではなく、Zedコードエディターの開発者によるRust UIフレームワークであるGPUIを利用しています。
- このアプリケーションは、切り替え時にクライアントをシャットダウンして再起動することなく、同時マルチアカウントログインをサポートします。
- 更新はバックグラウンドで処理され、起動時に更新を確認する「Starting」モーダルが必要なくなります。
- 新しいクライアントは、セキュリティ強化のため、WindowsのCredential Managerなどのシステムキーリングにログイントークンを保存します。
なぜ重要なのか
ソフトウェアエンジニアや技術リードにとって、この移行は大規模消費者向けアプリケーションにおけるRustとカスタムUIフレームワークの実現可能性を検証するものです。単一のコードベースでクロスプラットフォームの整合性を保つための唯一の実用的な方法はElectronだという長年の前提を覆します。Discordは、開発速度を犠牲にすることなく、複雑で機能豊富なチャットアプリケーションがネイティブに近いパフォーマンスと低メモリ使用量を達成できることを示すことで、Webベースのデスクトップラッパーの肥大化に苦しむ他のチームのための青写真を提供しています。
このシフトは、ハードウェアリソースの制約に関する業界全体の圧力にも対応しています。メモリ価格の上昇やデータセンターの供給制限を背景に、効率的なソフトウェア設計は単なる技術的な美徳ではなく、競争優位性になりつつあります。かつて安価なRAMの潤沢さに依存していたアプリケーションは、現在、最適化を余儀なくされています。Discordの動きは、特に常時接続のコミュニケーションツールにおいて、Webテクノロジーの利便性がパフォーマンスペナルティを正当化できなくなる転換点に、ユーザーと開発者の双方が達しつつあることを示唆しています。
できること
- デスクトップアプリケーションのコアUIが本当にHTML/CSSレンダリングを必要とするのか、それともネイティブGPUアクセラレーションフレームワークでオーバーヘッドを削減できるかを評価してください。
- メモリフットプリントの削減や起動時間の改善を目指す場合は、GPUIやIcedなどのRustベースのUIツールキットを検討してください。
- 現在のElectronアプリケーションのメモリ使用量をプロファイリングし、バンドルされたChromiumインスタンスが不均衡なリソースを消費していないか特定してください。
- ブロックする起動モーダルを削除し、知覚パフォーマンスを向上させるために、バックグラウンド更新メカニズムの実装を検討してください。
- Webとネイティブクライアント間でビジネスロジックを共有するためにWebAssemblyを検討し、統一されたコードベースでありながらUIレンダリングは統一しないアプローチを探ってください。
- Discordの新クライアントの一般公開を監視し、実際の環境でのパフォーマンス向上を自社の内部指標と比較してベンチマークしてください。



