Go言語はC言語のようなコンパイルとPython等のLL言語の両方の実行方法を持ちつつ、

言語の仕様を削ぎ落として学習コストを下げつつ実行の高速化を保ち、

更にはクロスコンパイルで一つのコードで様々なOSをサポートする。

シンプルな故に開発の支援ツールも充実している

という特徴を持つ言語だが、

デスクトップアプリ(GUI)の開発に弱いというイメージがある。


敢えて弱くしているように見えるので以後は弱点とは言わないが、

洗礼された言語を使っっているとやはりGUIアプリのコードを書いてみたくなる。


GUIといえば即効で頭に浮かぶのがQt(キュート)だろう。



Qtはクロスプラットフォームアプリケーションフレームワークであり、

これまた様々なOS向けにGUIアプリが作れる代物である。

Qt | Cross-platform software development for embedded & desktop


早速Go言語でQtを試してみようと思ったが、

開発環境の整備に非常に苦戦した。


というわけで、

Go言語とQtのセットアップのメモを残すことにする。




環境

Lenovo Ideapad 720S プラチナ

CPU : AMD Ryzen 5 2500U APU ( 2.00GHz 2MB )

OS : Ubuntu 18.04

メモリ : 8.0GB PC4-17000 DDR4 (オンボード) 2133MHz

グラフィック : APU内蔵グラフィックス

Go言語:1.11 linux/amd64

Qt:5.11.1

※注意:端末はZ Shell(zsh)を利用しています。

最高の開発環境を求めて


はじめにGo言語をこの記事を書いている時の最新版にしておく。

sudo apt-get purge golang-go
wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.11.linux-amd64.tar.gz

tarコマンドで/usr/local以下に解凍できたら、

.zshrcを開いて下記の環境変数等を追加する。

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN:/usr/local/go/bin

変更後に設定を再読込しておく。




続いて、Qtのインストールを行う。

インストールの手順は下記のページを参考にして行った。

Install Qt 5 on Ubuntu - Qt Wiki


下記ページからオープンソース版のインストーラをダウンロードしてくる。

Download Qt: Choose commercial or open source


ダウンロード後に端末を開き、下記のコマンドを実行する。

] ※Ubuntuは日本語対応しています

cd ~/ダウンロード
chmod +x qt-unified-linux-x64-3.0.5-online.run
./qt-unified-linux-x64-3.0.5-online.run


インストーラが開くので、

画面の指示に従いQt用のアカウントを作成したりと手続きを行う。



インストール先のフォルダは、

他のアプリ同様、optディレクトリ以下にしてみる。



Qtのセットアップで安定版の最新版にチェックを入れて、

インストールの作業を続ける。

※インストールは30分ぐらいかかる


インストール終了後に下記のコマンドを実行する。

sudo apt-get install build-essential libfontconfig1 mesa-common-dev libglu1-mesa-dev

諸々のインストールが終わったらパスを通す。

.zshrcを開いて、下記の環境変数を追加

export QT_VERSION=5.11.1
export QT_DIR=/opt/Qt
export QT_QMAKE_DIR=$QT_DIR/$QT_VERSION/gcc_64/bin
export PATH=$PATH:$QT_QMAKE_DIR

設定を再読込したら、

下記のコマンドでサンプルを試してみる。

cp -r /opt/Qt/Examples/Qt-5.11.1/webengine/quicknanobrowser $HOME
cd ~/quicknanobrowser
qmake
make
./quicknanobrowser


Qtで作られたWebブラウザが実行された。




続いて、Go言語でQtを扱えるパッケージを取得してみる。

パッケージの取得の前に/usr/local/go/binディレクトリに変更権限を与える。

sudo chmod 777 bin

※権限については適当に決めただけで、適宜検討する必要あり。


権限を変更したら、Qtバインディング用のパッケージを取得する。

sudo apt-get -y install build-essential libglu1-mesa-dev libpulse-dev libglib2.0-dev
go get -v github.com/therecipe/qt/cmd/...
qtsetup

qtsetupでパッケージの使用準備を開始するが、

qt/guiのインストールの途中で止まってしまったため、

generateが終了した時点で準備を終了した。


generateが終了したら使えると信じて、

サンプルを実行してみたところ、

go get -d -v github.com/therecipe/examples/...
cd $GOPATH/src/github.com/therecipe/examples
qtdeploy test desktop ./basic/widgets


無事、サンプルが実行された。