概要
現在 Electron で実装しているデスクトップアプリを Wails (Go) へ移行し、メモリ使用量とバンドルサイズを大幅に削減する。
背景・動機
Electron は Chromium + Node.js を丸ごと同梱するため、以下の課題がある。
| 指標 |
Electron |
Wails (Go) |
| インストーラーサイズ |
80–150 MB |
5–15 MB |
| アイドル時メモリ |
200–500 MB |
40–80 MB |
| 起動時間 |
2–4 秒 |
0.5–1 秒 |
Wails は OS 標準 WebView(macOS: WKWebView / Windows: WebView2 / Linux: WebKitGTK)を使うため、Chromium の同梱が不要になり軽量化できる。
また、今回のユースケース(WebSocket サーバー・PTY 制御・システムトレイ)に必要なライブラリが Go エコシステムに揃っており、Tauri(Rust)より学習コストも低い。
移行方針
変更なし(再利用)
- React / TypeScript フロントエンド
- xterm.js(WebView 内の描画)
packages/shared の型定義
Go で書き直し
| 現在(Node.js) |
移行後(Go) |
ws パッケージ(WebSocket サーバー) |
gorilla/websocket または標準 net/http |
node-pty(PTY 制御) |
go-pty(クロスプラットフォーム PTY) |
tailscale.ts(IP 取得) |
os/exec で tailscale ip -4 呼び出し |
index.ts(Electron エントリ) |
Wails エントリポイント(main.go) |
システムトレイ(electron.Tray) |
Wails ビルトインのシステムトレイ API |
実装ステップ
参考
概要
現在 Electron で実装しているデスクトップアプリを Wails (Go) へ移行し、メモリ使用量とバンドルサイズを大幅に削減する。
背景・動機
Electron は Chromium + Node.js を丸ごと同梱するため、以下の課題がある。
Wails は OS 標準 WebView(macOS: WKWebView / Windows: WebView2 / Linux: WebKitGTK)を使うため、Chromium の同梱が不要になり軽量化できる。
また、今回のユースケース(WebSocket サーバー・PTY 制御・システムトレイ)に必要なライブラリが Go エコシステムに揃っており、Tauri(Rust)より学習コストも低い。
移行方針
変更なし(再利用)
packages/sharedの型定義Go で書き直し
wsパッケージ(WebSocket サーバー)gorilla/websocketまたは標準net/httpnode-pty(PTY 制御)go-pty(クロスプラットフォーム PTY)tailscale.ts(IP 取得)os/execでtailscale ip -4呼び出しindex.ts(Electron エントリ)main.go)electron.Tray)実装ステップ
packages/desktopを置き換え)go-ptyでclaudeコマンドを spawn)参考