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のフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16
— のぼのぼ📡 (@nobonobo) July 21, 2020
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で済ませようと思います。
コメント
コメントを投稿