Skip to content

feat: デスクトップアプリを Electron から Wails (Go) へ移行 #49

Description

@dashi296

概要

現在 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/exectailscale ip -4 呼び出し
index.ts(Electron エントリ) Wails エントリポイント(main.go
システムトレイ(electron.Tray Wails ビルトインのシステムトレイ API

実装ステップ

  • Wails v2 プロジェクトのスキャフォールド(packages/desktop を置き換え)
  • Go バックエンド: WebSocket サーバー(認証・セッション管理)
  • Go バックエンド: PTY 制御(go-ptyclaude コマンドを spawn)
  • Go バックエンド: Tailscale IP 自動取得
  • システムトレイ(IP・トークン表示・終了メニュー)
  • フロントエンド: Wails バインディングへの接続確認
  • クロスプラットフォームビルド確認(macOS / Windows / Linux)
  • メモリ使用量のベンチマーク計測

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions