golangでguiをつくれるライブラリをさがして、hello worldしてみる
いろいろあってGUIツールを近々作ることになりそう。
ほんまはExcelVBAでも十分かもやし、CUIでもいいかもやけど、
非プログラマが使うサードパーティーツールってことで、GUIがあったほうが親切やろうなーってことで。
希望
ネイティブGo
C言語バインディングとかならそこそこあると思うけど、できればGo言語だけで解決したい
UIがHTML/CSSで構築できる
ピクセル指定してオブジェクトを配置していくと考慮しなあかんことが増える
表示に関してはHTML/CSSは優秀で学習コストが低い
単一バイナリが作れる
zipで実行ファイルを配布するって未来が見えるから、出来れば単一バイナリで吐き出したい
マルチプラットフォーム対応
具体的にはWinとMacで動けばいいなーって思う
手元にMac miniあるけど、動作検証できるかは不安
なんでGoなん?JS + Electronで解決やん。とかあるけど、
金融関連やからあるていどかたい言語が使いたい。
んで、社内のWebプログラマとかにも共有したいから学習コストが低い言語がいい。ってのが理由。
あと単純にGo好き。
みつけたライブラリ
Watch: 199
Star: 10.2k
Goで作られたUIツールキット
HTML/CSSではないけど、かなりアクティブなライブラリ
Cコンパイラが必要
Watch: 149
Star: 5.5k
HTML5のデスクトップアプリ
Pure Go library (no cgo) with a very simple API !!!
なんか一回触ったことがある気がする
描画はがっつりjavascript
Watch: 137
Star: 3.3k
ElectronのAPIを使って他言語からElectronを操作するastilectronとやらのgoバインディングって感じ?
JSかかなくていいならいいんじゃね?
issueとかできてたりするし、アクティブそう
結構大きくて軽く見ただけじゃピンとこない
サーバとクライアントが分かれてる感じ?
GoのサーバとHTML/CSS/JavaScriptのクライアントを作って、主処理をGoで、表示をHTML~でって感じか
JavaScript書きたくないのにー
Watch: 39
Star: 2k
npmに依存してるJavaScriptこわい
説明見てる分にはHTML/CSSっぽい
Wacth: 49
Star: 1.8k
軽量版Electronらしい
Ultralightは軽量なHTMLレンダラー
やっぱりJavaScriptごりごりーん
Watch: 47
Star: 723
ElectronのAPIをGoで実行するライブラリ
最近はあんまり動いてない?
Watch: 28
Star: 723
UIツールキット。コピペとかも対応してそう
アクティブそう
gokiのkiは日本語の木からきてるらしい
Qtバインディング
Qt触ったことないけど、長いこと活発なライブラリっぽいし安定感はある?
やってできないことはなさそう
非アクティブ?
何かTwitterで見たことがある人が作ってる
Gtkバインディング
そこそこ動いてる感じがする
初めて見るGitホスティング
fyneと並んで話題っぽいけど、githubじゃないからか情報が見つからない
exampleはあれど情報は少なすぎる
Pure Go。まじでGoだけ。
マテリアルデザインをGoで書くスタンスっぽい。期待してる
lorcaの高機能版?Windowの操作ができるっぽい
名前の通りwebview
ローカルにサーバ建てて、そこを見せるかたちでGUIを提供できる?
つまり、UIはJavaScriptごりごーり
Goでつくられた3Dレンダリングエンジン
gccが必要
OpenGL driverが必要らしいけどよくわかってない
3Dレンダラーなんで、入力受付があるか不明
ためしてみた
Fyne
https://gyazo.com/1ddf6d38c6fda32f7acc236e547eba07
https://gyazo.com/5f5a7aa9bf6cab90ade4d7eb76feab42
なかなかに勢いのあるライブラリ
思ったよりモダンナ見た目
各パーツを良い感じに並べてくれる機能がついてるから、HTML感覚でできなくもなさそう
表示を書き換えとか、ボタンの動作とか、そういうのも全部Goで実現できる
ビルド早い
gccが必要
なんかわからんけど手元に入ってたからセットアップに作業は要らなかった
画像見てる限りではグラフ描いてる例もある
写経するだけでも何してるのかだいたいイメージできる
チュートリアルが結構充実してる
fyne bundleってのでフォントとかを組み込むこともできる
使い方ぱっとじゃわからんぞこれ
gokiよりかは使い勝手良い感じ
goki
https://gyazo.com/45b010bb62bcee7b101a95b3e6d6c9ff
なかなかに勢いのあるライブラリ
他のコンパイラとか要らないのは環境構築が楽でいい
縦とか横に配置を並べられるからHTMLに近い感覚で記述することはできる
とはいえ全部Goのコードで書くからなかなか大変で見通しは良くない
コンポーネント指向で書けばある程度解決するかも
ビルドはGoの割には少しかかるなーとはおもうけど、外部ライブラリもりもりのせいやとおもう
当たり前やけどデフォルトでは日本語フォントは入ってないから日本語が使えない
デフォルトではデザインが残念、変えられるかは調べてない
なんか解像度があってないのか、ひと昔みたいな見た目になった
基本的に日本語の情報はなさそうなので、手探り感は強いけどドキュメントは結構数があるから読めばわかるかも
basicを写経しても何してるか分からないおまじないがちょいちょいあるから、意識して使おうとすると結構重労働になるかも
wails
https://gyazo.com/1368954fc2b83f907adfd991e15b9c0a
更新頻度は高そう
バックエンドがGoでフロントエンドがJavaScriptなElectronみたいなやつ
フロントエンドはがっつりJavaScript
ReactとかVueとか選択できるくらいJavaScript
当たり前やけどnpmが必須
ただElectronとかに頼ってない独自のレンダリングツールを使ってるっぽくて、gccが必要
wails cmdっていうCLIが用意されてて、対話式にプロジェクトを作ってくれていい感じ
でもプロジェクト作るのにちょっと固まる
ビルドはそんなにかからない
ちょっとJavaScriptに偏りすぎかなー、希望に合わないなーって印象
Gio
https://gyazo.com/0e4504edf2be90b267e34ee2de200bca
GopherCon 2019に登壇してたっぽい
HTMLをGoで書きながらGUIを作れるっぽい
ドキュメント激すくない
exampleにhelloがあったからそれを写経して、うすーく雰囲気をつかめる?
スクショとったらフリーズして何が原因か分からない
タスクバーから右クリックでウィンドウを閉じるをすると閉じられたことを検知できない
ウィンドウを×で閉じてもgoroutineがデッドロックを起こして死ぬ
使い勝手が分からないところがおおいけど、DOM操作をGoでできるPure Go GUIってことで深掘りしてみる予定
Lorca
https://gyazo.com/fd53e9af0f7052978824940196e46fe2
UIをHTMLに頼って、バックエンドとしてGoを書くタイプ
HTML+CSSは苦手やけど、どちらかというと得意な人が多いから誰かと協力しやすそう
JavaScriptは好きじゃないけど、なるべく処理をGoに寄せることで何とかいい感じにできないか模索してみる
Chromeに依存していて、たぶんChromeがインストールされてない環境だと動かない
ブラウザ依存やからレンダリングに不安は少なめ
glfwのIME周りに振り回されるのはもうやめたい
結構いい感じやけど、ウィンドウをコントロールできないのが想像以上につらい
戻る、進むによって画面を簡単に変えられてしまう
右クリックでの操作が生きてるから、予期しない操作をされ得る
結局Chromeでできることができてしまうから、開発者側でのコントロールに限界がある
→ 製品にするのは困難
webview
https://gyazo.com/57a4f47285736a8f62c47a3235e15ff2
https://gyazo.com/c48969ed16db2134eea7f0f0b9a6277d
DLLをバイナリと同じディレクトリに設置しなくてはいけないという制約がある
Getting Startedがすんなり通せないのでちょっとやる気が
DLLはリポジトリの中にあるから、go getすればまあローカルにはあるから、コピーするだけではある
コピーしてうごかしたら32GBのメモリ積んでるPCでも100%に張り付いた
セキュリティソフトとの相性の問題やから、セキュリティソフトをオフにしたら問題なかった
と思ったけど、それ以外にも影響しているものがあるのかも、ハングアップした
muon
UltraLightとかいうブラウザレンダラーを含めて作る
DLLは別途設置が必要
それ以前に、リソースのパッケージングに癖がある
muon外のツールに依存させようとしてくる
lorcaのEmbedを参考に手元にFileServerを作ったら解決
WindowsではカレントにDLLを並べないといけないのが違和感
WindowsではPATHからdllを探すから、PATH=$PATH:./binとかしちゃえば解決できる
他のGUIライブラリに比べると最近まで動いていてるけど、それでも10ヵ月前
6月にあった簡単なissueへの回答もついていない状況
UltraLight自体が有償のツール。小さな商用までなら無料で使わせてくれるみたいやけど
Free* for use by companies with less than $100K annual gross revenue
Chrome依存なLorcaに比べると自由な気はするけど、それでもUltraLight依存は楽ではなさそう
go-astilectron
https://gyazo.com/28de560302b2409261eea0c1bdd95e56
Electronラッパーなので初回に色々揃えるために時間がかかる
2回目以降は必要なものがそろってるからサクサク
Quick Startだけじゃ始まらなくて、Ctrl + Cするとよく分からんエラーがでる
issue立ってるけど、誰も教えてあげないあたり冷たい(Closeされちゃってるし)
Lorcaだと不便なところを解決できることを期待して動きを確認していく
何もしなくても日本語使えるのはブラウザ系のいいところやなー
更新履歴
2020/08/17 go-astilectronを試す
2020/08/16 Lorcaをあきらめた
2020/08/12 muonのGetting Startedぽいのを試した
2020/07/24 lorcaも検討
2020/07/15 fyneを深く学ぶことに決定
2020/07/14 wailsを試した
2020/07/14 fyneを試した
2020/07/13 gokiを試した
2020/07/13 書き始め