takaiwa.net

Golang、Windows、トレーニング、ラグビー観戦、食べ歩きなどの日記

2020/07/24

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の知識も必要
・ビルド失敗したときに追いづらい(?)

参考

2020/03/08

リフレッシュを兼ねた学習 スーパー銭湯で読書

久しぶりの休日で読書しようにも、自宅だと寝てしまいそう...
などと考えていたら閃いて、スーパー銭湯へ。
読書できるスーパー銭湯!

2020/02/23

トップリーグ 第6節 悪天候の中での観戦 #花園

新型コロナウィルスと雨予報のニュースで、お客さん少ないと思ってたんですけど、


メインスタンドの屋根の下にお客さんいっぱいいる!

2020/02/11

尼崎で昼飲み

仕事が忙しすぎです(泣)。こんな時はラグビー観戦だ!!と週末を迎えるも、今週末は試合なし...
花園のラグビー酒場へ行ってみようかと検索をすると、日曜は休日...


なので、前々から気になってる尼崎へ行ってみました。

2020/02/10

近鉄ライナーズファン感謝祭

にわかファンなので、こっそり様子を見られたらいいなという感じで参加させていただきました。


2020/01/26

焼き鳥屋でセルフ慰労会

美味しくて素晴らしいお店は星の数ほどあるんだけろうけど、疲れているときは、行ったことのある間違いなしの焼き鳥屋でセルフ慰労会を行います。

2020/01/20

ラグビートップリーグ第2節 #花園

ラグビー観戦はトップチャレンジを3試合とトップリーグが2回目(3試合目)の観戦となります。前々から、何度も観戦していれば落胆して帰るような日もあるだろうなと思ってました。