連載目次

はじめに

@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ライクな言語のインタプリタがiOSAndroid向けにリリースされています。

私も先日,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

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

basic

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上でアプリが実行できます。

basic_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

いかがだったでしょうか?Goだけで書かれたアプリがAndroid端末上で動くのは感動しますよね。 次回は,サンプルを見ながらGo Mobileで提供されているspriteパッケージについて説明する予定です。