Wails:GolangがElectronに対抗してデスクトップ級アプリに賭けた理由
원제 · Wails: Golang's Bet On Desktop Grade Apps To Beat Electron
핵심 요약
WailsはChromiumを同梱しないアーキテクチャにより52メガバイトの軽量なバンドルサイズを実現する一方、エコシステムの成熟度不足によりネイティブ連携でObjective-Cの自作が必要となる場合がある。
하이라이트
WailsはバックエンドにGoを使用し、各プラットフォームのネイティブウェブビューを利用してデスクトップアプリを構築するクロスプラットフォーム技術である。
Wailsのバンドルサイズは52メガバイトであり、Tauriの57メガバイトと同等である一方、Electronの324メガバイトと比較して大幅に小さい。
コールドスタート時の起動時間は、Electronが1,890ミリ秒であるのに対し、Tauriは2,049ミリ秒、Wailsは2,337ミリ秒である。
Goのバックエンド側でコードを変更すると、TypeScriptのAPI定義が自動的に再レンダリングされ、アプリケーションが自動的に再コンパイルされる。
Wailsで画面キャプチャ機能を実装する際、適切なGoのライブラリが存在しないため、約450行のObjective-Cコードを自建する必要がある。
타임라인
Wailsの基本構造とアーキテクチャ
Tauriと同様の仕組みで動作し、フロントエンドはウェブ技術で構築されてGolang管理下のネイティブAPIを呼び出す。MacとWindowsの両方に対応し、ブラウザを内蔵しないことでバンドルサイズを小さく抑えている。
- WailsはバックエンドにGo言語を採用したクロスプラットフォームのデスクトップアプリ構築技術である。
- ブラウザを内蔵せず、各プラットフォームのネイティブレンダリングエンジンを再利用する仕組みをとる。
画面録画ツールの実装と自動コード生成
画面録画ツールの実装では、main.goでウィンドウのタイトルや寸法などの設定を行う。frontendフォルダ内のReactコードから、Wailsによって自動生成されたAPIを介してバックエンドの機能にアクセスする構造を持つ。
- フロントエンドのUIはReactで構築され、Go側で定義されたAPIを呼び出す。
- Goファイル側で変更を加えると、TypeScriptの定義が自動的に再レンダリングされアプリが再読み込みされる。
フレームワーク間の数値比較
Chromiumを同梱しないWailsとTauriはビルドサイズが優れている。起動時間の計測では通常起動でWailsが395ミリ秒、Tauriが410ミリ秒、Electronが350ミリ秒を記録し、コールドスタートではElectronが最速となる。
- バンドルサイズはWailsが52MB、Tauriが57MBであり、Electronの324MBに比べて極めて小さい。
- コールドスタート時の起動時間はElectronが1,890ミリ秒であり、Tauriの2,049ミリ秒やWailsの2,337ミリ秒より速い。
開発者エクスペリエンスとエコシステムの差異
画面キャプチャ機能の実装において、Rustなら既存のCrateで完結する処理に対し、Wailsでは約450行のObjective-Cコードを自分で書く必要が生じる。開発言語の好みで選択できるものの、エコシステムの成熟度においてはTauriに分がある。
- Tauriは豊富なRustのCrateエコシステムを利用できるが、WailsはGoの適したライブラリが少ない。
- Wailsでネイティブ機能を利用するためには、CGOを用いてObjective-Cのコードを自ら記述する必要がある。
설명
You already write Go, so why bundle a whole Chromium to ship a desktop app? Wails builds cross-platform desktop apps on the system webview, 52 MB against Electron's 324. The catch is the developer experience: where Tauri leans on Rust crates, Go can leave you hand-writing Objective-C. Worth it if you're choosing a desktop stack. 🔗 Relevant Links https://wails.io https://github.com/wailsapp/wails ❤️ More about us Radically better observability stack: https://betterstack.com/ Written tutorials: https://betterstack.com/community/ Example projects: https://github.com/BetterStackHQ 📱 Socials Twitter: https://twitter.com/betterstackhq Instagram: https://www.instagram.com/betterstackhq/ TikTok: https://www.tiktok.com/@betterstack LinkedIn: https://www.linkedin.com/company/betterstack 📌 Chapters: 0:00 What is Wails? 0:33 How Wails works (Go + native webview) 1:06 Demo: the screen recorder app 1:29 Project structure: main.go and the frontend 1:57 React frontend and auto-generated bindings 2:50 Live reload with wails dev 3:24 Bundle size: Wails vs Tauri vs Electron 4:07 Startup time 4:36 Runtime performance 5:07 Developer experience 5:37 Writing Objective-C with CGo 6:07 Verdict: Wails or Tauri? 6:40 Outro
