LoginSignup
8

More than 3 years have passed since last update.

GoでGUIを作るFyne というライブラリが楽しそうだよ、というご紹介

Last updated at Posted at 2019-12-08

この記事はGo4 Advent Calenderの8日目の記事です。
前日の記事はこちらー 7日目
翌日の記事はこちら- 9日目

筆者のGo歴

  • 1年前までプログラミング関連の経験/知識なし
  • Goは今年の5月から趣味で牛歩

前置き

  • この記事は、Fyneというライブラリの簡易的な紹介のみ
  • 極力間違いのないように調べたつもりだが、初学者なので鵜呑みには注意
  • 間違いなどあればコメントや編集リクエスト頂けると泣いて喜びます

Fyne とは

  • GoでGUIアプリケーションを作成する際に利用できるライブラリ
  • OSS(Github)
  • PureGo
  • デザインがキレイ

今回は公式のチュートリアルを実行するまでご紹介

公式のチュートリアルは、すでに分かりやすくてシンプルです。
ただ、英語で記載されているので和訳しつつ紹介していきたいと思います。

ダウンロード

あなたがWindows,macOS,LinuxかBSDを利用していて、既にGoのインストールが済んでいるなら、次のコマンドでFyneの全てをインストールすることができます

$ go get fyne.io/fyne

そのコマンドが完了することで、あなたのGOPATH配下にFyneの開発パッケージの全てがインストールされます。Fyneのツールキットがどのような動作をするのか見てみたいなら、以下を実行することで私たちが用意したデモアプリをコンピュータ上で試すことができます

$ go get fyne.io/fyne/cmd/fyne_demo
$ fyne_demo

これだけです。さあ、Fyne APIを使いあなただけのクロスプラットフォームGUIアプリケーションを作る方法を見てみましょう

初めてのFyneアプリを作りましょう

シンプルなアプリを作るには、app.New()でアプリインスタンスを作成し、app.NewWindow()でウインドウを開くところからです。次に、SetContent()によりウインドウのメインコンテンツがウィジェットツリーとして定義されます。その後、ShowAndRun()を呼び出すことで、アプリのUIが表示されます

UsingFunctions関数を使う場合
package main

import (
    "fyne.io/fyne/app"
    "fyne.io/fyne/widget"
)

func main() {
    a := app.New()

    w := a.NewWindow("Hello")
    w.SetContent(widget.NewVBox(
        widget.NewLabel("Hello Fyne!"),
        widget.NewButton("Quit", func() {
            a.Quit()
        }),
    ))

    w.ShowAndRun()
}
UsingStructs構造体を使う場合
package main

import (
    "fyne.io/fyne"
    "fyne.io/fyne/app"
    "fyne.io/fyne/widget"
)

func main() {
    a := app.New()

    w := a.NewWindow("Hello")
    w.SetContent(&widget.Box{Children: []fyne.CanvasObject{
        &widget.Label{Text: "Hello Fyne!"},
        &widget.Button{Text: "Quit", OnTapped: func() {
            a.Quit()
        }},
    }})

    w.ShowAndRun()
}

上記のコードを実行する(シンプルに行けば、go run hello.goと実行するはずです)と、次のようなウインドウが作成されます
alt
明るい雰囲気にしたいのであれば、FYNE_THEME=light と設定するだけで次のようになります
alt
始めるには、たったこれだけです。完全なAPIドキュメントは、GoDoc.orgで見ることができます

ハマったこと

openGLのライブラリを利用している(?)、そのためにgccとか諸々必要になるらしい。
CentOS8で環境構築した時か、macOS Catalinaで環境構築した時か覚えてないけど、あれもないこれもないとエラーが出て困りました。
もし同じエラーでつまづいた場合は、とりあえず、エラーの中で足りないと言われているライブラリを環境のインストールコマンド(brew,yum,dnfなど)で工夫してみればなんとかなると思います。

後書き

正直、プライベートで色々とあって投稿が遅れました。
その上、予定では自作のGUIアプリをドヤ顔()で投稿するつもりだったのが、公式サイトマルパクリで終わっちゃいました。
ちょっとだけ触ってみた感じは、「簡単なGUIツールを作る」だけならコレ!みたいなイメージです。
悔しいので、忘れないぐらいの間には何かアウトプットを作成してまた投稿したいと思います。

追記(2019年12月13日)

現時点でFyneをインストールしただけでは、日本語フォントに対応してないようです。
julialoverさんがこちらの記事で説明と対応策を提示してくれています。
ありがたや......

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8