GoogleAppEngine/GOに触ってみたら、チュートリアルに感動しました。


GCPのアドベントカレンダー11日目です。

久しぶりにGAE触ったら管理画面の日本語対応が進んでいて嬉しかったので触ってみました。
といってもチュートリアルな感じです。

Goだけ触ったことがなかったので、試してみました。

昔AppEngineを触ってたときがありましたが、そのときと比べてチュートリアルや管理画面が凄く分かりやすくなっていて感動してます。


## Google App Engineでアプリケーション作成

 https://cloud.google.com/appengine/?hl=ja

* `今すぐ試す` を選択しましょう。
![](http://i.gyazo.com/ddb2896bfa00117c9fda7a7deacfe9c5.png)

* 任意のプロジェクト名を入力して 言語はGoを選択します。
![](http://i.gyazo.com/192aa813dbd3efeb020b756719b98fdf.png)

* ソースコードは眺めるくらいでおk
![](http://i.gyazo.com/19dd1fa75e16656757c960d495762d5b.png)

* Google Cloud SDKをまだインストールしていない場合はインストールしましょう。
* ~/.bash_profileにaliasを追加しておきます。

```
alias goapp=~/google-cloud-sdk/platform/google_appengine/goapp
```

* gcloud auth loginでログインしておきます。

```
$ gcloud auth login
```
ブラウザ側で認証画面が開かれるので認証しましょう。

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

![](http://i.gyazo.com/2f62e54b6439cc7578205e32d0caa7c3.png)

* サンプルのアプリのzipファイルをダウンロードして解凍しておきましょう。 -> https://cloud-playground.appspot.com/_ah/mimic/ziprepo?repo=repos/appengine-try-go&filename=appengine-try-go.zip

![](http://i.gyazo.com/c5baadbe88d8f7f845bf647c0ae574c1.png)

* ローカルサーバーを立ち上げてアプリを起動します。

```
$ goapp serve appengine-try-go
```

appengine-try-goフォルダの中ではなくてフォルダがある階層でgoappコマンドを使うと良いみたいです。

![](http://i.gyazo.com/714913ed73e8119af92f4d87e6f59a36.png)


* ブラウザから http://localhost:8080 にアクセスすると`Hello,world!`が表示されますね。

![](http://i.gyazo.com/522e2851bedb1c9ea6735407b891612b.png)

* ソースコードはこんな感じ

```
package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}

```

Goのコードってちゃんとみたの初めてかもです。

* サーバー起動してからサーバーにアクセスがあるとログが表示されます。

```
$ goapp serve appengine-try-go
INFO     2014-12-10 17:08:17,776 devappserver2.py:745] Skipping SDK update check.
WARNING  2014-12-10 17:08:17,788 simple_search_stub.py:1115] Could not read search indexes from /var/folders/wk/clq1j2m55_515vzfq2mdjzh40000gp/T/appengine.helloworld.sugawara_ryosuke/search_indexes
INFO     2014-12-10 17:08:17,792 api_server.py:172] Starting API server at: http://localhost:51249
INFO     2014-12-10 17:08:17,796 dispatcher.py:186] Starting module "default" running at: http://localhost:8080
INFO     2014-12-10 17:08:17,798 admin_server.py:118] Starting admin server at: http://localhost:8000
INFO     2014-12-10 17:08:23,305 module.py:718] default: "GET / HTTP/1.1" 200 13
INFO     2014-12-10 17:08:23,391 module.py:718] default: "GET /favicon.ico HTTP/1.1" 200 13
INFO     2014-12-10 17:08:23,447 module.py:718] default: "GET /favicon.ico HTTP/1.1" 200 13

```

* 最後に実際のサーバーにデプロイします。プロジェクトを作成を押します。

![](http://i.gyazo.com/2b5f95496b91ef98ed7cd654d0337dae.png)

* プロジェクトが立ち上がるので少し待ちましょう。

![](http://i.gyazo.com/580cdcf01edd0db5a2ea83f0e16b0634.png)



* プロジェクトIDを指定してデプロイします。

今回は自動生成されたプロジェクトIDは`lyrical-drive-790`です。

```
$ goapp deploy -oauth -application [プロジェクトID] appengine-try-go
```

今回の場合は

```
$ goapp deploy -oauth -application lyrical-drive-790 appengine-try-go
```

になります。

![](http://i.gyazo.com/31e4dc3d8e7c92b2203c411960fcba62.png)


成功すると http://lyrical-drive-790.appspot.com でwebサーバーが起動します。 アクセスすると先ほどのhelloworldが表示されます。


## まとめ

チュートリアルや管理画面が変わって、思った以上に最初のハードルが下がったと思います。
昔AppEngineで挫折した人などはもう一度試してみると良いかもしれないですね。

参考: http://qiita.com/taizo/items/bf1ec35a65ad5f608d45