スキップしてメイン コンテンツに移動

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提

  • 社内ツールとしてexeで配布
  • 開発環境はGoLandを使う
社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。

lxn/walk

Windows application library kit for Go.
Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。

fyne-io/fyne

Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android.

walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。

therecipe/qt

therecipe/qt allows you to write Qt applications entirely in Go or JavaScript.
Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。

どうしたものかとツイートしましたら、下記のようにご助言をいただいた。


PWA

早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのように動くWeb技術のアプリだそうです。Twitterのデスクトップアプリが対応しているとのことで、Chromeで開いてダウンロードしてみました。

ショートカットがデスクトップに作成されたので、そのショートカットのプロパティを確認すると、chromeにパラメータを渡して起動させていました。

C:\Program Files (x86)\Google\Chrome\Application\chrome_proxy.exe"  --profile-directory=Default --app-id=panfkkhihbglmaommdcbgghogdofkjpi

Chromeでなくても、Visual Studioによる開発でMicrosoft Edgeでもいけるようです。WebViewのような仕組みを組み込んでやればexeにもなる??かと思ったのですが、当初のデザインを切り離したいという要望からかけ離れる過ぎそうなので、断念しました。Twitterアプリの動作は軽快でしたので、将来性を感じました。

Electronを扱うライブラリ

asticode/go-astilectronが有名で、最近の記事でEquanox/gotronを知りました。

Equanox/gotronのほうは構成がシンプルで、導入もimportに"github.com/Equanox/gotron"を書いて、Golandにgo getさせたら、自動で必要なものをインストールしてくれました。デザイン部分を切り離したいだけなので、とっつきやすくていい気がしています。
asticode/go-astilectronはビルドできなくて断念しました。ただ、asticode/go-astilectronのほうが圧倒的にGithubの★の数は多いです。

wailsapp/wails

Mac, Windows, Linux desktop apps with HTML UI using built-in OS HTML renderer.
なんか良さそうな感じがしましたし、ドキュメントやチュートリアルが充実していますので、チュートリアルを視聴しながら動かしてみました。


いきなりビルドで手こずりました。MinGWの32bit版だとビルドができないようです。あと、フロントエンド側のビルドでこけたり、こけなかったりよくわからない。そして、ビルド長いです(チュートリアルのビルドは全然時間かかってませんが)。ビルド後のexeはgotronより軽快に動いている印象ですし、使いこなせるならこっちのほうがいい気がします。

結論

本格的にやるなら、ビルドでこけても粘り強くやろうかと思いますが、まずはデザインを切り離したいので、今回の調査結果ではgotronを使ってみようと思います。gotronで行き詰まったら、別のに手を出そうと思います。ただ、UI部分に凝る必要がなければ、lxn/walkで済ませようと思います。

ライブラリ良い点イマイチな点
lxn/walk・動作が軽い
・Goだけで書ける
・デザイン部分をGoコード内に書く必要がある
gotron・デザイン部分はHTMLやCSSで・HTML、CSS、JSの知識も必要
・ビルド失敗したときに追いづらい(?)

参考

コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。