IntelliJ IDEA14でGAE SDK for Goの構築〜実行まで

はじめに
---

今回、次の内容で開発環境を構築する. 

 - Mac OS X 10.9.5
 - Java 1.7.0_51
 - IntelliJ IDEA 14
 - Go 1.4
 - Google Cloud SDK 0.9.42
 - IntelliJ IDEA google-go-langurage plugin 0.9.16-alpha.9

構築は以下の手順で進める.

IntelliJ IDEA14をダウンロード＆インストール
---

下記ページからIntelliJ IDEA14をダウンロードしインストールする. 
[Download link](https://www.jetbrains.com/idea/download/)

今回使用するpluginの都合上, IntelliJ IDEAのバージョンは14である必要がある. 

Go SDKをインストール
---

今回はbrewからインストール

```bash
$ brew install go
```

インストールが完了したらバージョンを確認しておく. 

```bash
$ go version
# 今回はGo 1.4であることを確認
```


Google Cloud SDKをインストール
---

GAE SDK for Goをインストールする前にGoogle Cloud SDKをインストールする. 
[Google Cloud SDKの参考ページ](https://cloud.google.com/sdk/) 

Google Cloud SDKをインストールするフォルダ構成を事前に用意しておく.
(今回は`~/Documents/dev/google_cloud`とした)

下記コマンドを実行しGoogle Cloud SDKをインストールする. 

```bash
$ curl https://sdk.cloud.google.com | bash
```

インストールする場所を問われるので事前に用意したフォルダパスを指定. 

```bash
Directory to extract under(~): 
$ ~/Documents/dev/google_cloud # 事前に用意したパスを指定
```

Google Cloud SDKの品質向上について問われるのでYes/Noを指定.

```bash
Do you want to help improve the Google Cloud SDK (Y/n)?
$ Y  # 品質向上に寄与
```

rcファイルのパスを指定.

```bash
Enter path to an rc file to update, or leave blank to use [~]
$ <blank>  # 空白Enterでデフォルトの~/.bash_profileを指定
```

環境変数`PATH`の更新を問われるのでYesを指定.

```bash
Modify profile to update your $PATH? (Y/n)?  Y
$ Y  # $PATHを更新する
```

bashの補完機能について有効にするためYを指定.

```bash
Modify profile to enable bash completion? (Y/n)?  
$ Y  # bashの補完機能は有効にする
```

bashリロードのためにターミナルを再起動する. 
ターミナルを再起動したら下記コマンドでGoogle Cloud SDKのバージョンを確認. 

```bash
$ gcloud --version
# 今回は次の結果が得られた
Google Cloud SDK 0.9.42

bq 2.0.18
bq-nix 2.0.18
compute 2015.01.06
core 2015.01.08
core-nix 2014.10.20
dns 2015.01.06
gcutil 1.16.5
gcutil-nix 1.16.5
gsutil 4.7
gsutil-nix 4.6
sql 2015.01.06
```

GAE SDK for Goをインストール
---

Google Cloud SDKのインストール完了後に次のコマンドを発行するとGAE SDK for Goをインストールできる. 

```bash
$ gcloud components update gae-go
```

インストール確認にYesを指定.

```bash
Do you want to continue
$ Yes 
```

環境は`google-cloud-sdk/platform/`にインストールされている. 


go lang pluginをインストール
---

下記ページからIntelliJ IDEA用のgo lang plugin(google-go-language.jar)をダウンロード.
[GitHub - go-lang-plugin-org](https://github.com/go-lang-plugin-org/go-lang-idea-plugin/releases)
（今回は0.9.16-alpha.9を使用）

IntelliJ IDEA14を起動し, Welcome画面で[Configure]＞[Plugins]＞[Install plugin from disk]から, 
ダウンロードしたgoogle-go-language.jarを指定し, pulginをインストールする. 
IntelliJ IDEA14を再起動してインストールを完了する. 


Go App Engine プロジェクトを作成する
---

IntelliJ IDEA14のWelcome画面から[Create New Project]＞[Go App Engine]を選択. 
プロジェクト名は全て小文字で(今回は"gotest"とした), ローケーションは任意. 

プロジェクト画面の起動を確認し[Project Structure]＞[Platform Settings]＞[SDKs]を表示. 
"Go SDK"と"Go App Engine"が登録されていることを確認する. 
もし追加されていない場合は下記を実施する. 

### Go SDKを設定

[Project Structure]＞[Platform Settings]＞[SDKs]を表示. 
[＋]を押して[Go SDK]を選択. 
ファイルエクスプローラでGo SDKのパス`/usr/local/Cellar/go/1.4/libexec`を指定する. 

> **NOTE**
> `/usr/local/Cellar/go`は`brew install go`でインストールされるデフォルトパス  
> パスは`libexec`まで指定する必要がある. 
  
> **NOTE**
> ファイルエクスプローラでパスを直接指定するには`command＋Shift＋G`を入力する

### Go App Engineを設定

[Project Structure]＞[Platform Settings]＞[SDKs]を表示. 
[＋]を押して[Go App Engine SDK]を選択. 
ファイルエクスプローラでGAE SDK for Goのパス`〜省略〜google-cloud-sdk/platform/google_appengine`を指定する. 

これでSDKの設定は完了. 次にProjectに使用するSDKを設定する. 
[Project Structure]＞[Project Settings]＞[Project]を表示. 
[Project SDK]で先ほど作成した[Go App Engine]を指定する. 


GOPATHとGOROOTを設定
---

Goの環境変数`$GOPATH`と`$GOROOT`を設定しておく. 
メニューの[IntelliJ IDEA]＞[Tools]＞[Google Go]を表示. 

GOROOTにはGo SDKのパス`/usr/local/Cellar/go/1.4/libexec`を指定. 
GO AppEngine ROOTにはGAE SDK for Goのパス`〜google-cloud-sdk/platform/google_appengine`を指定. 
GOPATHには今回作成したGO Projectのルートディレクトリ`〜省略〜/gotest`を指定. 

ここまででGAE SDK for Goの実行環境は一通り整った. 


コーディング
----

Projectのツリービューにある`src`フォルダを右クリックし
[New]＞[Package]を選択し名前`main`でソースフォルダを作成しておく. 
次に作成した`main`フォルダ上で右クリックし[New]＞[Go AppEngine]＞[Go File]を選択. 
`main.go`を作成し下記コードをコピーペーストする. 
＃IDE上エラーに見えるケースがあるが実行はできる

```go
package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, World")
}

func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}
```

実行
---

メニュー[Run]＞[Edit Configurations]から[＋]＞[Go Local AppEngine Server]を選択. 
デフォルト設定値のまま[OK]を押下. 
再びメニューの[Run]から先ほど追加した実行プロファイルを選択し実行する. 

実行すると下記のようなログがコンソールに表示されるのがわかる. 
これでローカルサーバとしてGAEをgoで実行できている状態となる. 

```bash
Starting module "default" running at: http://localhost:8080
```

この状態で`http://localhost:8080`にブラウザからアクセスすると"Hello World"の
レスポンスが返される. 

以上.