Fyne は Go(golang)で記述できるクロスプラットフォームな GUI フレームワークです。
Fyne でプログラミングするには、GCC と Git と Go が必要です。GCC については、 CentOS 7 に付属している gcc 4.8.5 ではバージョンが古くて対応していません。 CentOS Minimal で gcc 10.1 のインストール方法を 説明しています。
そして、それ以外にも CentOS の場合には、6 つのプログラムをインストールする必要があります。CentOS に付属している Development Tools をインストールすると、その 6 つもインストールされます。
sudo yum groupinstall "Development Tools"
私の場合は、ユーザディレクトリに Downloads というディレクトリを作り、そこに Go の実行ファイルを展開しました。
mkdir Downloads && cd Downloads
// もし wget をまだインストールしていない場合は
sudo yum install wget
// Go をダウンロードします
wget https://golang.org/dl/go1.16.5.linux-amd64.tar.gz
// ダウンロードされた圧縮ファイルを展開します
tar xvzf go1.16.5.linux-amd64.tar.gz
// 圧縮ファイルはもう不要です。削除する場合は次のようにします
rm go1.16.5.linux-amd64.tar.gz
// 最後にユーザのホームディレクトリに戻ります
cd
Go が展開されたフォルダは、go という名前になったり、他の名前になったり、 あるいは、展開されたフォルダの中に go というフォルダができていたりする場合もあると思います。ここでは、 go という名前で展開されたとして話しを進めていきます。もし違う名前だった場合は、go という名前に変更してください。
ホームディレクトリに戻り、.bashrc というファイルの末尾に次のようなパスを記述します。
PATH="$PATH:/home/ユーザ名/Downloads/go/bin"
パスを有効にするには、ホームディレクトリで source .bashrc
と
コマンドするか、再ログインするか、CentOS を再起動します。そして次のようにして
Go の確認をします。
go version
// 次のように表示されれば無事にインストールされています
go version go1.16.5linux/amd64
作業はすべてユーザのホームディレクトリで行っています。
// Fyne の基礎プログラムをインストールします
go get fyne.io/fyne/v2
// Fyne のデモをインストールします。
go get fyne.io/fyne/v2/cmd/fyne_demo
// Fyne の実行ファイルやリソースを作るプログラムをインストールします。
go get fyne.io/fyne/v2/cmd/fyne
// .bashrc に次ようなパスを追加します。
PATH="$PATH:/home/ユーザ名/go/bin"
// ホームディレクトリに戻り次のようにコマンドしてパスを有効にします。
source .bashrc
X11 上で Fyne のデモを起動してみます。
fyne_demo & X -retro
デモアプリの File メニューの Quit メニューアイテムでデモアプリは終了できますが、 X11 を終了するには次のようにします。
// 次のコマンドで X11 の画面が閉じます
Ctrl + Alt + F1
// F1 のところは、X11 を起動したコンソールの番号に合わせt、F1、F2、F3 と変えていきます
// ほとんどの場合、コンソール番号 1 からの起動なので、F1 にしました
// 画面は閉じても X11 のタスクは起動したままです。次のコマンドで X11 は完全に終了します
Ctrl + C
実際にアプリケーションを作っていきます。
Fyne は一つのアプリケーションを一つディレクトリにまとめることになっています。 今回は Button とうディレクトリにまとめることにします。 場所はどこでも構わないのですが、私はホームディレクトリに Documets というディレクトリを作り、その中に fyne というディレクトリを作り、そしてその中に、Button ディレクトリを作りました。 今後はその Button ディレクトリでの作業になります。
Button ディレクトリに移動し、次のようにコマンドして、Fyne アプリケーションの初期設定 を行います。次のコマンドで初期内容は自動で設定されます。
go mod init example.com/Button
// 通常は、example.com の部分を、あなたが持っているURLにします。
// URL をお持ちでない場合は、example.com などで大丈夫です。
// もし URL をお持ちなら、あなたさえ同じ名前のアプリケーションを作らなければ、
// 世界で、一つだけのアプケーション ID が生成されることになります。
// デフォルトでは、スラッシュ(/)の次の名前がアプリの名前になります。
Button ディレクトリに、butonn.go というファイルを作り、次のように記述します。 main 関数を記述しているファイルは、 main.go とするのが一般的ですが、 好きなファイル名にしても大丈夫です。
package main
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/widget"
)
func main() {
app := app.New()
win := app.NewWindow("Button")
button := widget.NewButton("Quit", func() { app.Quit() })
win.SetContent(container.New(layout.NewCenterLayout(), button))
win.Resize(fyne.NewSize(400, 200))
win.CenterOnScreen()
win.ShowAndRun()
}
Button ディレクトリに戻り、次のようにコマンドすると、記述した go ファイルを正しいインデントや改行に整形してくれます。また完全にではありませんが、 記述エラーも検出してくるみたいです。
go fmt button.go
// button.go とだけ表示されなければ、この段階では問題ありません。
button.go
今の段階で、button.go を実行しようとすると、パッケージの追加を促されます。
// 実行してみる
go run button.go
// 次のようにパッケージの追加を促される
button.go:4:2: no required module provides package fyne.io/fyne/v2; to add it:
go get fyne.io/fyne/v2
button.go:5:2: no required module provides package fyne.io/fyne/v2/app; to add it:
go get fyne.io/fyne/v2/app
button.go:6:2: no required module provides package fyne.io/fyne/v2/container; to add it:
go get fyne.io/fyne/v2/container
button.go:7:2: no required module provides package fyne.io/fyne/v2/layout; to add it:
go get fyne.io/fyne/v2/layout
button.go:8:2: no required module provides package fyne.io/fyne/v2/widget; to add it:
go get fyne.io/fyne/v2/widget
// 指示のとおりパッケージを追加する
go get fyne.io/fyne/v2
go get fyne.io/fyne/v2/app
go get fyne.io/fyne/v2/container
go get fyne.io/fyne/v2/layout
go get fyne.io/fyne/v2/widget
この追加したパッケージは、そのアプリケーションだけに有効で、 アプリケーションを作るたびに、追加するパッケージが要求されます。 追加するパッケージは、アプリケーションによって違います。
実際に実行する場合は、X11 が必要なので、次のようにコマンドします。
go run button.go & X -retro
X11 ではウィンドウのフレーム(タイトルバーやリサイズする機能)は付かないみたいです。
Quit ボタンをクリックすると、Button アプリケーションは終了しますが、 X11 を終了するには次のようにします。
// 次のコマンドで X11 の画面が閉じます
Ctrl + Alt + F1
// F1 のところは、X11 を起動したコンソールの番号に合わせt、F1、F2、F3 と変えていきます
// ほとんどの場合、コンソール番号 1 からの起動なので、F1 にしました
// 画面は閉じても X11 のタスクは起動したままです。次のコマンドで X11 は完全に終了します
Ctrl + C
Linux ではビルドしたアプリケーションに直接アイコンがつくことはありません。 アイコンは別の方法で登録します。そもそも CentOS MInimal ではアイコンを登録しても 無意味です。しかし Fyne をビルドする時に アイコンファイルがないとビルドできない仕組みになっています。
Fyne で使えるアイコンファイルは png だけです。png ファイルを Fyne がそれぞれの OS のアイコンファイルへ変換してくれます。
アイコンファイルへの URL が分かっていれば、wget でダウンロードすることができます。 あるいは X11 で起動した Firefox でダウンロードすることもできるかもしれません。 試してみましたが、どの場所にダウンロードしたのかまだ見つけられていません。
もしアイコンファイルが用意できなければ、この節は一旦とばしてください。 私の場合は、macOS の Parallels Desktop 上の CentOS 7 Minimal で実行しいますので、 Mac からアイコンを持ってくることができました。
以下、アイコンファイルが用意できたとして話しを進めていきます。 アイコンファイルは、Button ディレクトリの中に入れます。そして次のようにコマンドします 。
// ビルドします。アイコンファイル名は、あなたが用意したファイルの名前です。
fyne package -os linux -icon leaf.png
// Button ディレクトリに Button.tar.gz 圧縮ファイルができますので、それを展開します
tar vxzf Button.tar.gz
// usr というディレクトリが作られ、usr/local/bin の中に Button という実行ファイルができます
// usr/local/bin に移動してそこで実行するか、Button 実行ファイルを Button ディレクトリに移動して実行します。
// usr/local/bin へ移動
cd usr/local/bin
// Button 実行ファイルを Button ディレクトリへコピー
cp Button ../../../
// Button ディレクトリへ移動
cd ../../../
// Button ディレクトリで Button 実行ファイルを X11 で実行
./Button & X -retro
Button & X -retro
だけで起動できるようになります。しかし、/bin
ディレクトリにどんな名前の実行ファイルがあるかはっきりしない場合は、
うっかりと上書きしてしまう場合がありますので、あまりおすすめしません。