連載目次

はじめに

@tenntennです。

もうすぐGoのバージョン1.5がリリースされる予定ですが， みなさまはどの機能に注目しているでしょうか？ コンカレントGCだったりshared libraryが作れるようになったりと，Go 1.5は非常に楽しみです。 その中でも私は，Go 1.4で入ったGo Mobileのアップデートに注目しています。

Go Mobileは，Goを使ってモバイルアプリを書くためのツール類を提供するプロジェクトです。 Go 1.5では，iOS向けのアプリがビルドできるようになったり，Androidのサポートが強化されるようです。 masterブランチの最新（2015年7月19日 時点）では，すでにiOS向けのビルドもできるようになっているみたいです。 実際に，GoチームによってIvyというAPLライクな言語のインタプリタがiOSとAndroid向けにリリースされています。

私も先日，Go Conference 2015 SummerのLT大会で使用したLTタイマーのGoFun（ソースコード）を試しに個人でGoogle Play Storeでリリースしてみました。 私が作成したGoFunというアプリは，Javaを使わずすべてGoだけで書いています。 JavaとGoを使った記事はよく見かけるのですが，Goだけで書いている記事はあまり見かけません。 また，Google Play Storeに公開するところまで扱っている記事も見かけません。 そこでこの記事では，複数回に分けてその時に調べたGoだけでAndroidアプリを作ってリリースするまでの手順を説明します。 まず今回は，Go Mobileの簡単な説明とインストール方法を説明したいと思います。

この記事で扱う手順やノウハウは，記事執筆時（2015年7月19日）のものです。 Go Mobileはまだまだ開発途中です。 現在（執筆当時）も毎日のように破壊的な変更がされています。 そのため，ビルド方法やパッケージ名，各ライブラリやツールの使い方が変わる可能性があります。

なお，この記事ではMac OSX Yosemite（10.10.3）とNexus 9（Android 5.1.1）で動作検証をしていますが，他のOSやAndroid端末では動作検証をしてまいません。 Go MobileはLinuxでは動くようですが，Windowsではまだ動かないようです。 Go Mobileのコード上にはWindowsの記述があるので，そのうち対応されるでしょう。

Go Mobileのインストール

最新のGo Momobileを使用するには，Go 1.5が必要です。 Go 1.5のベータ版をダウンロードするかソースコードからビルドしてください。 なお，Go 1.5のビルドには，Go 1.4が必要です。

Go 1.5のインストールが終わったら，次は gomobile コマンドを go get します。

$ go get golang.org/x/mobile/cmd/gomobile

$GOPATH/bin 以下に gomoible コマンドががインストールされます。 $PATH に $GOPATH/bin が含まれていない場合は追加しておきましょう。 これで gomobile コマンドが使えるようになったはずです。

$ gomobile -h Gomobile is a tool for building and running mobile apps written in Go. To install: ....

つづいて， gomobile init を実行しましょう。 このコマンドは，Go Mobileを使うために必要なものをインストールしてくれます。 どうやら，モバイル端末向けにクロスコンパイルするためのGoツールチェーンやAndroid NDK，OpenAL（libopenal）がインストールされるようです。 執筆当時のバージョンでは android-ndk-r10d が $GOPATH/pkg/gomobile/ 以下にインストールされるようでした。 なお，実行には結構時間がかかるので， -v をつけて進捗を確認するとよいでしょう。

$ gomobile init -v

Goだけでモバイルアプリを書く

Go Mobileでは，以下の2種類の方法でGoを使ってモバイルアプリを開発することができます。

Java（Android）やObjective-C（iOS）からGoで書かれた処理を呼び出す

GoでOpenGLやOpenALを使ってアプリを書く

Go Mobileは，AndroidやiOSが提供するAPIのラッパーをすべて用意することを目的としてはいません。 GUIなどは通常のAndroidやiOSのアプリの開発と同じように，JavaやObjective-Cを使い，Goが得意なところはGoに任せるといった具合に使用することを想定しています。 （Swiftから呼び出せるのかは調べてません。すいません。）

一方で，OpenGLやOpenALの関数が呼び出せるようになっています。そのため，ゲームなどOS標準のUIを使わない場合は，これらを使用して開発できるようになっています。 しかしながら，まだ提供されている機能は低レベルな関数が多く，多くのパッケージが exp 以下に配置されていることから分かるように，まだまだ実験的に実装されているだけのようです。

この記事では，GoだけでAndroidアプリを作る方法について説明します。 JavaからGoで書かれた処理を呼び出す方法については，いくつか日本語でも記事があるので探してみるとよいでしょう。

なお，Go Mobileのアプリからでも，ほとんどのGoの標準パッケージで提供される機能が使用できるようです。

サンプルを動かしてみる

Go Mobileのリポジトリには， example というディレクトリがあります。 この中には，Go Mobileを触れてみるのにちょうど良いサンプルがいくつか入っています。 ここでは最もシンプルなサンプルの example/basic を使って動かし方を説明していきます。

まずはMac上で動かしてみましょう。 サンプルのあるディレクトリまで行き， go run コマンドで実行します。

$ cd $GOPATH/src/golang.org/x/mobile/example/basic/ $ go run main.go

うまく実行できると下のような赤い背景に緑の三角形がでるはずです。 緑の三角形はドラッグできるので，ぜひ動かしてみてください。

Mac上で動かせることは確認できましたので，次にAndroid上で動かしてみましょう。 gomobile build コマンドを使うと，モバイルアプリ用にビルドができます。 デフォルトではapkが生成されます。 -target ios と指定すると，iOS向けのappファイルがビルドされます。 appからipaを作ればiOSでも動かせるとは思いますが，私の環境では実行できるipaは生成できませんでした。

$ cd ~/Desktop #どこでもよい $ gomobile build golang.org/x/mobile/example/basic

上記のコマンドを打つと，カレントディレクトリに basic.apk が生成されているかと思います。 adb install でAndoridにインストールして実行してみましょう。

$ adb install basic.apk

うまくいくと以下のようにAndroid上でアプリが実行できます。

上記の例では， gomobile build を使用しましたが， gomoible install を使えば，ビルド後に adb install を使って自動でAndroidへのインストールするところまでやってくれます。 gomobile install を使用するには， adb コマンドが必要となります。 Android SDKの開発環境を用意して， adb コマンドにパスを通しておきましょう。 なお， gomobile install コマンドはビルドターゲットが android でないと動作しませんので，注意してください。

$ gomobile install golang.org/x/mobile/example/basic