田舎人の書斎作ったり、試したり、書き留めたり。

田舎人、GoでGUIの道具を探す。

GoのGUIフレームワーク比較:Fyne・gotron・Wailsを試した記録

公開

この記事は2021年に書いたものです。ソフトウェアのバージョンや配布状況など、いまとは異なる場合があります。

きっかけ

以前「見た目の整ったGUIアプリにはWPFを:良い点と気になる点」という記事を書きました。GUIアプリを作るときは、見た目にこだわりたいほうです。

これまではC#とWPFで作ってきて、GUIの作りやすさや仕上がりは群を抜いていると感じています。ただ、Windows向けのアプリしか作れないのが残念なところです。趣味で作ったソフトを公開しているので、せっかくならmacOSやLinuxでも動くほうが、多くの人に使ってもらえます。

C#でXamarinを使う手もありますが、趣味なので新しい言語に触れてみたく、クロスプラットフォームに対応したGoに目を付けました。Visual Studio 2022の公開と同時に、C#のクロスプラットフォームGUIフレームワークが出るという話もありましたが、延期になったようです。

そんなわけでGoのGUIフレームワークをいくつか試し、最終的にWailsにたどり着きました。選ぶまでにかなり迷ったので、同じ考えの方のために記録しておきます。

Fyne:Goだけで書けるが、デザインに凝れない

最初に目を付けたのは、Goだけで書けるFyneです。GitHubでも人気があり、チュートリアルも充実していて、確かに良くできていました。

ただ、デザインに凝ることができません。また、標準では日本語フォントに対応しておらず、日本語入力の周りにも問題があるという記事を見かけました。とはいえ、見送った一番の理由は、画面の見た目をあまり変えられなかったことです。試しに触ってみた画面がこちらです。

Fyneで作った試作画面

私には合いませんでしたが、手軽にGUIアプリを作りたいなら、Goだけで完結し他の言語を覚える必要がないのは大きな利点です。

gotron:チュートリアル通りに動かなかった

次に試したのは、Go版のElectronのような名前のgotronです。

チュートリアルが手薄で、その通りに進めても私の環境ではうまく動きませんでした。Hello Worldまではすんなり起動し、フロントエンドからGoへデータを送ることもできました。しかし、Goからフロントエンドへのデータ送信は、チュートリアル通りにやってもできなかったため、見送りました。

Wails:デザインにも凝れそう

そして行き着いたのがWailsです。チュートリアルが充実していて、Goとフロントエンドの間のデータのやり取りも問題なくできました。フロントエンドはJavaScriptなので、デザインにも凝れそうです。これがいちばん大事な点でした。

Hello Worldアプリの見た目はこのようになります。

WailsのHello Worldアプリの画面

WailsのHello Worldアプリの別の画面

Fyneと比べると、見た目の差ははっきりしています。

これから

実はJavaScriptは少し触ったことがある程度です。それでも、この見た目でクロスプラットフォームのGUIが作れるならと、GoとあわせてJavaScriptの勉強も始めました。覚えておけばWebアプリも作れるようになりそうです。

あまり時間をかけたくないので、画面づくりはVue.jsとVuetifyで近道するつもりです。かえって深みにはまるかもしれませんが。