Ubuntu Weekly Recipe

第351回 GoとQMLとGUIアプリ

この記事を読むのに必要な時間:およそ 5.5 分

Go言語,流行ってますね。今回はGo言語とQMLを組み合わせて,簡単にGUIアプリケーションを作れるgo-qmlについて紹介しましょう。

go-qmlとは?

go-qml(qmlパッケージ)⁠はGo言語からQMLを使うためのGoパッケージです。Goプログラムの中でUIとしてQMLを利用できたり,QMLの拡張をGo言語で作成することができます。開発者はCanonical社員のGustavo Niemeyerで,Debian/Ubuntu上で最新のGo言語を導入するためのgodebやJujuのGo対応なども行っている人物です。

Go言語やQMLについてはRecipeの読者なら名前ぐらいは聞いたことがあるでしょうし,よく使っているという方もそれなりにいらっしゃると思いますので釈迦に説法になりそうではありますが,両者についても簡単に説明しておきます。

Go言語はシンプルな仕様と豊富な標準パッケージを兼ね備えたプログラミング言語で,容易にクロスプラットフォームなバイナリを構築・配布できます。UbuntuのJujuはもちろんのこと,Dockerをはじめとするさまざまなプロジェクトで利用されています。

QMLは,これまたクロスプラットフォームなアプリケーション開発プラットフォームであるQtで使われているJavaScriptとCSSを組み合わせたような構文の言語です。Qt自体はC++で開発されていますが,UIの部分をQMLで記述することでより柔軟かつ効率的にGUIアプリケーションを作成できます。Qt/QMLは非常に多くの環境で利用されており,UbuntuでもKDEだけでなくUbuntu Touchでも重要なコンポーネントの1つとなっています。

今回紹介するgo-qmlは,QMLの部分はそのままにQMLをC++で拡張していた部分をGo言語で置き換えるためのパッケージです。これにより,QMLとGo言語の良いとこ取りをしたアプリケーション開発が行えるのです注1)⁠

注1)
効能には個人差があります。

ちなみにgo-qmlは例外条項付きのLGPLv3ライセンスされています。通常のLGPLなライブラリを静的にリンクした場合,リンクしたアプリケーション側の対応するコードを何らかの形で伝えるなどの方法を取る必要があります(LGPLv3の4のd)⁠Go言語の場合,パッケージはすべて静的にリンクするためこれが適用されるのですが,go-qmlは上記の例外条項によって4のdや4のeなどを行わなくても良いようになっています。これによりGo言語で作った他のバイナリと同様に,バイナリ単体での配布が可能です注2)⁠また,同じくLGPLでライセンスされているQtについては動的にリンクされます注3)⁠

注2)
解釈には個人差があります。不安な場合は,各自が信頼できる法律家に相談しましょう。
注3)
このためGoの特色の1つである,ビルドしたバイナリファイルを1つ持っていけば他の環境でも動く,ということは実現できません。qmlパッケージを使ったアプリケーションを他の環境で動かすためには,環境ごとにQt(とそれが依存しているライブラリ群)が適切にインストールされている必要があります。

開発環境の準備

では最初に開発環境を構築しましょう。go-qmlはQMLを使うため,QMLエンジンとしてのQtも必要です。逆に言うと,Go 1.2以上とQt 5.x以上さえ正しくインストールできる環境であれば,ここで説明するようなUbuntuでなくても他のOSやディストリビューションでも同様に利用できます。実際,go-qmlのページには,Mac OS XやWindowsのインストール方法も記載されています。

Goのインストール

Goのインストール方法はいくつか存在します。一番簡単なのがパッケージ管理システムからインストールする方法です。

$ sudo apt install git bzr golang-go

ここでgitとbzrもインストールしているのは,後に出てくる「go get」コマンドでgitやbzrを使ってソースコードを取得することがあるためです。

もしクロスプラットフォームなコンパイル環境も構築したいのであれば,それぞれのプラットフォームのライブラリパッケージもインストールしましょう。たとえばUbuntu上で,Windowsの32ビット版バイナリを作成したい場合は「golang-go-windows-386」パッケージをインストールします。またgodocやoracleなどを使いたい場合は「golang-go.tools」パッケージをインストールしてください。

Ubuntuのパッケージ管理システムからインストールできるGoは,14.04,14.10ともにバージョン1.2です。go-qmlを試すだけであれば1.2でも問題ありませんが,他の要因で1.3以上を使いたい場合はgodebを使ってインストールすると良いでしょう。

$ wget https://godeb.s3.amazonaws.com/godeb-amd64.tar.gz
$ tar xvf godeb-amd64.tar.gz
$ ./godeb -h
$ ./godeb install

32ビット版のUbuntuを使っている場合は,⁠amd64」の部分を「386」に置き換えてください。⁠i386」ではなく「386」です。今回は展開したディレクトリで実行していますが,/usr/local/binなどにコピーして実行しても問題ありません。

Qtのインストール

Ubuntuのパッケージ管理システムを使ってQtをインストールする場合,Ubuntu 14.04 LTSだと5.2.xが,Ubuntu 14.10だと5.3.xがインストールされます。go-qmlを動かすにあたってはどちらでも問題ありません。もし5.3.xに統一したい場合は,14.04に次のようにPPAを追加したうえで,Qtの開発パッケージをインストールしてください。

$ sudo add-apt-repository ppa:ubuntu-sdk-team/ppa
$ sudo apt update
$ sudo apt install qtdeclarative5-dev qtbase5-private-dev \
    qtdeclarative5-private-dev libqt5opengl5-dev \
    qtdeclarative5-qtquick2-plugin

けっこうたくさんのパッケージがインストールされますので,モバイル通信を使っている場合は注意しましょう。

go-qmlのインストール

最後にgo-qmlのインストールです。これは,Goの他の外部パッケージと同じように「go get」コマンドで取得します。⁠go get」コマンドを使う場合は,あらかじめ環境変数GOPATHを設定しておきましょう。GoパッケージはこのGOPATH以下にインストールされます。ユーザーがアクセス可能な領域であればどこを指定してもかまいません。

$ mkdir ~/gocode
$ export GOPATH=$HOME/gocode
$ go get gopkg.in/qml.v1

これで~/gocode以下に,go-qmlのコードがダウンロードされたことがわかります。なおプロキシ内部の環境の場合は,http_proxyやhttps_proxyを適切に設定しておいてください。

GOPATHはgo getでインストールしたパッケージを利用してビルドするときにも必要になります。一度作成したら,~/.bashrcなどに上記のexport文を設定しておくと良いでしょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入