概要
ポイントまとめ
- GoでGUIを作る
- GUIライブラリはandlabs/uiを使う
- linuxでlinux/windows/macに対してクロスコンパイルする
リポジトリ: https://github.com/contribu/equalizer-apo-translator
やりたかったこと
Windows + GUI + 商用利用 + dynamicリンクなし + ビルド環境/方法をソースコードで管理
を実現したかった。
技術選択
C#は.Netに依存してしまう。今なら大概の環境で動くかもしれないが、少し前は.Netが入っていない場合とかで動かなかったので不採用。
Delphiは、商用利用可能なバージョンを持っていなかったので不採用。
ビルド環境/方法をソースコード管理する方法も知らない。
Lazarusはできたかもしれないが、試していない。
Goはdynamicリンクなしにできることを聞いていた。
GUIライブラリを調べたら、andlabs/uiはGTKに依存しているらしいが、windows向けビルドなら実行時に依存なしにできるらしいことがわかった。
andlabs/uiにはクロスコンパイル用のdockerが用意されていることもわかった。
Goにした。
Go + andlabs/uiでGUIアプリをクロスコンパイルする方法
基本
andlabs/uiの使い方は、公式ページを参照。
https://github.com/andlabs/ui
examplesディレクトリの中を見ると使い方が分かる。
クロスコンパイル
クロスコンパイル用のdocker image
以下にandlabs/uiのクロスコンパイル用のdockerがあることが書いてある。
https://github.com/andlabs/ui/wiki/Building-and-Cross-Compilation
https://github.com/magJ/go-ui-crossbuild/
circleciでクロスコンパイルする方法
これを参照。
https://github.com/contribu/equalizer-apo-translator/blob/master/.circleci/config.yml
注意点
- クロスコンパイル用のdockerイメージが最後にビルドされたのは、2年前(多分2017年くらい)
- なので、ライブラリとかが古い
- docker imageの再ビルドが面倒だったので、そのまま使ったが、一部のライブラリはアップデートする必要があった(.circleci/config.yml参照)
- クロスコンパイルのコマンドの引数指定方法はよくわからなかったので、スクリプトのソースコードを見て、うまく動くように与えた
- .circleci/config.ymlに記載されているgo-bindataやlreleaseは、このアプリ特有の処理なので、無視してください
- macのビルドは動きませんでした。推測ですが、クロスコンパイル用のdockerイメージが古いからかもしれません。
- linuxのビルドが動くかどうかは試していません。