GAE上でGolangを動かしてみましたよ

Aug 13, 2018   #golang  #GAE 

はじめに

GoogleAppEngine上で動くwebサービスをgolangで作りはじめました。
作り始めでつまずくことが多いので自分用の最小構成メモです。 ここで説明するwebサービスは、Ajaxで非同期通信し、Golangが返した文字列を表示するだけのものです。

環境の準備

まずは、GCPの公式ドキュメントを参考にGolang、Cloud SDKをダウンロードします。
以下のようにバージョンが表示されればOKです。

$ goapp version
go version 1.9.4 (appengine-1.9.74) darwin/amd64

ちなみに、開発にはmacOS High Sierra(10.13.6)を使用しています。

構成説明

ディレクトリ構成は以下の通りです。

├── app.yaml
├── hello.go
└── static
    ├── js
    │   └── main.js
    ├── css
    │   └── main.css
    └── index.html

この中でGAE特有のファイルはapp.yamlになります。
app.yamlリファレンスに各パラメータの説明が載ってますが、最低限のパラメータだけ書いておきます。

runtime: go #Golangを使用する場合はgoを指定
api_version: go1 #最新のバージョンを使用する場合はgo1を指定

handlers: #リクエストと実行する処理をURLパターン毎に指定
- url: /
  static_files: static/index.html
  upload: static/index.html
- url: /js
  static_dir: static/js
- url: /css
  static_dir: static/css
- url: /.*
  script: _go_app

その他のファイルについては、特別なことはしていないので説明は省略します。
各ファイルはGithubに置いてあります。

ローカル環境での実行

ローカル環境にGoogleAppEngineの開発用サーバを立ち上げるには、Cloud SDKに含まれているdev_appserver.pyを実行します。
実行時のオプションはいくつも用意されていますが、サーバを立ち上げるだけならば、以下のようにapp.yamlを指定して実行すれば問題ありません。 ※dev_appserver.pyを実行するにはPython2.xがインストールされている必要があります。

dev_appserver.py app.yaml

サーバが立ち上がったら、ブラウザからhttp://localhost:8080にアクセスすれば、開発サーバ上のwebサービスにアクセスができます。

本番へのデプロイ

GoogleAppEngine上にデプロイする場合は、以下のコマンドを実施します。

gcloud app deploy app.yaml

まとめ

今回、GoogleAppEngine上で動かすことを目的としているので、最低限のオプションしか指定していません。 実際に使用する場合は、セキュリティを高めたり、パフォーマンスの最適化を図ってください。
記事の内容に不備や誤りがありましたら、@foresukecomまでご連絡ください。

その他

最近、Life is Strageというゲームをクリアしました。
後半は感情移入して涙目になりながら遊んでしまいました、ゲームで泣いたのは幻想水滸伝2以来です。

ゲーム自体は短めで、週末だけでクリアできる程度のボリュームなので、是非遊んでみてください。 PS4とSteamで遊ぶことができます(Steamは年に数回75%OFFのセールを実施するので、そこで買っておくのがおすすめです)。

このゲームはストーリーもよいのですが、要所要所で流れるBGMが特に素晴らしいです。
サントラはAmazonPrimeMusicの対象にもなっているので、Amazonプライム会員の方は是非聴いてみて下さい。落ち着いた音楽で、作業用BGMとしても最適です。