Windowsでの Go 1.3 & Google App Engine SDK for GO 1.9.6 のセットアップ

これまで手元の環境では、結構前になんとなく入れてみた1.2系のものを使っていました。 しかし先日 1.3 がリリースされ、速度の向上や色々な変更も加わっているようです。

Playground は最新のビルドを使っているようですし、せっかくなのでツアーを終えたこの段階で、ローカルの Windows の環境を作り直してみます。 また、ついでに Google App Engine の Go 用 SDK も、最新のものをインストールしておきます。

Go 1.3 のインストール

Go のインストールは、基本的に以下の公式ガイドに従います。

旧バージョンのアンインストール

私の環境には Go 1.2 がすでにインストールされていますが、こういった場合 1.3へのアップグレード前に、旧バージョンのアンインストールが必要です。 インストールガイドには次の注意があります。

If you are upgrading from an older version of Go you must first remove the existing version.

過去のインストールをどのように行ったかで、アンインストールの方法は異なります。

インストーラを使用した場合

コントロールパネルの「プログラムと機能」等から、アンインストールを行います。

zip ファイル等から主導インストールした場合

アンインストールには2つの作業が必要です。

  1. インストールしたディレクトリの削除
  2. 環境変数の削除

Windows なので、私の場合インストール先は C:\Go でした。 まずこのディレクトリを削除します。

次に環境変数の削除。 これは後でもう一度同じ設定をする筈ですが、将来的に環境変数の追加や変更が行われる可能性もあるので、一応クリーンにしてからアップグレードします。 削除はマイコンピューターのプロパティ、システムの詳細設定等から「環境変数」設定ダイアログを表示して、Go関連のパスをそれぞれ削除しました。

これで旧バージョンのアンインストールは完了です。

ダウンロード

Go のセットアップは、Windows の場合通常はインストーラを使用するのが手軽で確実です。

f:id:belbo:20140707181958j:plain

Downloads - The Go Programming Language

インストーラは32bit・64bit用に分かれていて、今回は自分の環境が Windows8.1 の64bit版だったので「go1.3.windows-amd64.msi」をダウンロードしました。

インストール

ダウンロードしたインストーラを起動すると、インストールウィザードが始まります。

f:id:belbo:20140707181959j:plain

この時点で、より低いバージョンの Go が、インストーラからインストールし、且つまだアンインストールされていない場合、アンインストールするよう警告が表示され、インストールが続行できません。

f:id:belbo:20140707182002j:plain

f:id:belbo:20140707182003j:plain

f:id:belbo:20140707182005j:plain

ウィザードでは、インストール先のパスを選ぶぐらいしかオプションはありません。 Windows の場合、" C:\Go\ " が標準のインストール先になります。 後々細かなトラブルの原因になったり、トラブルシュートを面倒にする可能性もあるので、積極的な理由がない限り、標準のものを使用した方が安全です。

f:id:belbo:20140707182007j:plain

f:id:belbo:20140707182009j:plain

インストールが完了すると、システムの環境変数に、それぞれ次の値が追加されます。

  • GOROOT : C:\Go\
  • Path : C:\Go\bin

これにより、go, gofmt, godoc のコマンドが使用可能になります。 コマンドライン(すでに開いていた場合は開き直しが必要)で go を実行し、go コマンドの Usage が表示されれば、インストールが成功しています。

f:id:belbo:20140707182012j:plain

なお、GOROOT 環境変数については、どのように Go を導入したかによって、その要不要や扱いが変わってくるようです。

これが最も問題になるのは、複数の Go が導入されている場合です。 後述の appengine SDK がそれに当たりますが、SDK 側で独自の GOROOT を設定してくれるようになっているため、現時点では気にしないことにします。

go get のための環境変数 GOPATH とツールの設定

Go にはとてもシンプルなパッケージ管理機能が付属しています。 "go get パッケージのパス" とするだけで、インターネットなどからパッケージを取得し、ローカルの環境にインストールまで行ってくれます。 この go get を使えるようにするには、事前に幾つか準備が必要ですが、現在のインストーラはそこまで面倒を見てくれません。

環境変数 GOPATH の設定

これは go get をして取得したパッケージのダウンロード先であり、import を解決する際の参照先でもあります。

このパスを設定せず go get を実行しても、

package *******: cannot download, $GOPATH not set. For more details see: go help gopath

と怒られ、パッケージのセットアップが行えません。

GOPATH に設定するパスは、自由に決めて構いません。 但し Go のインストール先同様、長すぎるものや、空白や非ASCIIの文字は避けた方が無難です。 また、Go をインストールした先も、パーミッションやバージョンアップの問題が起きます。

Windows では、ユーザーディレクトリの直下などが分かりやすいと思いますが、日本語を含んでいる場合は避けるべきかも知れません。 渡しの場合は "C:\Users\name\go" を設定しました。

ライブラリの開発などでは、

ソースコード管理ツールの導入

"go get" は任意のリソースからパッケージを取得しますが、取得にはその環境にインストール済のソースコード管理ツールを使用します。

例えば参照先が Github であれば、git コマンドを使用して、パッケージのファイルを取得します。 そのため、参照先のリポジトリが使用しているツールが使用できる状態でないと、"go get"としても、パッケージの取得に失敗します。

現在 "go get" が対応しているのは、以下の4つのサービスにあるリポジトリであり、それぞれが対応している管理ツールに違いがあります。

これら全てを Windows環境で導入するのは、ちょっと面倒です。 ざっと見る限りでは、多くのプロジェクトが Github を使用しており、次いで bitbucket か Google Code という印象です。 ひとまず git コマンドが使えればかなり幅広く対応できますし、残りは必要なパッケージが要求した時点で導入しても、充分間に合います。

go のインストールはこれで完了です。

Google App Engine SDK for Go のインストール

引き続き、Google App Engine SDK for Go のインストールを行います。

といっても SDK は必要な Go や、gofmt 等のツールを含んでいるため、前述の手順で Go をインストールしていなくても、appengine 用の開発が可能です。 しかし、ローカル用の Go で学習やライブラリの開発を行えた方が都合が良いので、両方のインストールをおすすめします。

GAE で Go を使う価値

Go の魅力のひとつは、Google App Engine で使えることです。 まだ Experimental ですが、それでも充分使い物になる状態です。

appengine では Java, Python, Go と3つの言語が標準(Managed VM 等を使わずに)でサポートされています。 しかし、無数のインスタンスが負荷等に応じて随時起動・終了される appengine では、Java のようにスピンアップの重たい環境は、起動の都度長い待ち時間を生じさせます。 Python は比較的軽量ですが、Go に比べると重く、演算処理も時間がかかります。

Google の想定とは違って、appengine はフルスタックのアプリケーションプラットフォームというより、Compute Engine や Cloud Strage などへのフロントエンドとしての活用が目立ちます。 そういう用途では、更に Go のメリットが目立ちます。 瞬間的に凄まじいアクセスが集中しても、超軽量な Go のインスタンスであれば、必要な分だけ迅速に立ち上がり、とにかくリクエストを捌いて行けます。

ということで、Go を新しくセットアップしたついでに、Google App Engine の Go 用 SDK もセットアップしなおしておきます。

ダウンロード

Google App Engine SDK for Go は、zip ファイルのみが、appengine の公式サイトから提供されています。

f:id:belbo:20140707182013j:plain

Download the Google App Engine SDK - Google App Engine — Google Developers

Windows なので、"Google App Engine SDK for Go" から "go_appengine_sdk_windows_amd64-1.9.6.zip" を選択しました。

Python 2.7系 の確認

Go の appengie SDK を利用するには python の 2.7.x が必要です。 2.6以前や、3には対応していません。

ここでは python のインストール手順には触れませんが、下記の情報などを参考に、インストールを完了させます。

python をインストールし、パスも設定されていれば、下記のコマンドで python のバージョン番号が表示されます。

python -V

ここで 2.7.x が表示されていれば、python の準備は完了です。

zip の展開

ダウンロードした SDK の zip ファイルは、任意の場所に展開します。 展開先は特に定められていませんが、極端に長かったり、空白文字を含んだりするパスは避けた方が無難です。 私は SDK 用の標準のパスとして " C:\SDK\ " を使用しているため、ここに展開しました。

パスの設定

SDK そのものは展開した時点で使用可能ですが、パスを通しておくと、例えば開発環境用の Go をラップしたコマンドが " goapp " のみで可能になり便利です。 しかし、SDK には gofmt, godoc という、Go が持つコマンドとの重複したものが含まれています。 もちろん、gofmt や godoc は、Go 側でも SDK 側でも、そう大きな違いは無いはずですが、問題となる可能性も残ります。

パスを設定しないのも手ですし、ユーザー変数に設定してユーザーの切り替えなどで対応する方法もあります。 今回の場合は、Go 側のものを優先して使えるよう、パスを設定しました。

先に記述されているものが優先されるので、システム環境変数にある Path を、"...;C:\Go\bin;C:\sdk\go_appengine" の順で設定しました。

もうひとつ競合しうるのが GOPATH ですが、これは SDK に含まれる gofmt.bat などで、設定済みの GOPATH がある場合はそちらを使用するようになっているため、問題なさそうです。


以上で Google App Engine SDK for Go のセットアップは完了です。