🦜

Go製のGUIフレームワークWails3を試す

2024/11/01に公開
$ go install github.com/wailsapp/wails/v3/cmd/wails3@latest
$ wails3 init -n Wails3Sample -t svelte
Creating project
----------------

Project Name      | Wails3Sample
Project Directory | C:\Users\nobo\Dropbox\Sandbox\wails3\Wails3Sample
Template          | Svelte + Vite
Template Source   | https://wails.io

Project 'Wails3Sample' created successfully.
$ cd Wails3Sample
$ wails3 task dev

Wails2系からの変更点

  • Taskfile機能をwails3コマンドに内包
  • システムトレイメニュー機能追加
  • マルチウインドウ対応追加
  • JS/TSバインディング生成のフォルダ構成が固定された「frontend/bindings
  • バインディング生成対象は「Service」と呼ばれ、Appインスタンスに渡したものが生成対象になる
  • イベントハンドリング時の引数は「any」から「[]any」に変更された
  • wails.jsonが不要になった(vite.config.jsonやTaskfileに集約された)

フロントエンド側

npm install "@wailsio/runtime"
import * as Wails from "@wailsio/runtime";

// Emit
Wails.Events.Emit({ name: "name", data: any });

// On
Wails.Events.On("name", async (args: any) => {
  let data = args.data;
});

Go側

import "github.com/wailsapp/wails/v3/pkg/application"
func main() {
    app := application.New(application.Options{...})
    app.EmitEvent("name", data)
    app.OnEvent("name", func(ev *application.CustomEvent) {
        data := ev.Data.(...)
        ...
    })
}

main以外からappインスタンスアクセス

import "github.com/wailsapp/wails/v3/pkg/application"

application.Get().EmitEvent("name", data)

Discussion