GoogleAppEngine/Go入門

こんにちは!エンジニアのH.Yです。

皆様はGoogleAppEngine(以下 AppEngine)をご存知でしょうか?

自分でサーバ構築を行わずとも、コードを書いて所定の方法でデプロイをするだけでGoogleの強力なインフラ上でWebアプリケーションが作成できてしまう優れものです!

個人的には下記のようなところが素晴らしいと思っています

  • ある程度のアクセスまではずっと無料!
  • アクセス量に応じて自動的にスケーリング
  • GoのWeb環境を簡単に使用することが出来る

詳しくはこちらも御覧ください


個人的にWeb環境のGoを気軽に書けるというのは大きいです。

こういうのって大抵導入が大変でコードを書くまで時間がかかってイヤになっちゃうのですが、AppEngineは比較的簡単なので挫折しにくいですね!

今回はHello Worldをブラウザ上で表示するまでをやっていきます。

操作はWindowsで行いますが、恐らくMacでもほぼ大差ない操作で導入ができると思います!


# Pythonのインストール

https://www.python.org/downloads/

導入に際してPython2.xが必要ですので、上記サイトの「Download Python2.7.11」をダウンロード後起動し、手順に従ってインストールしてください

9bda8777ce40d49eebbdb38b37a4a7d7

インストール後コマンドプロンプトを開き

と出てくればOKです


# SDKのインストール

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

ここのページに下記のような部分があると思うので、環境に合わせてファイルをダウンロードZIPを解凍して。

93871edd82393717a30d9f8a47f76561

インストール後コマンドプロンプトを開きgoappと打ち

こんな感じでヘルプ一覧が出てくればOKです


# Google Cloud Platformプロジェクトの作成

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

Googleアカウントにログインして、GoogleCloudPlatform画面を開くと右上にプロジェクト選択画面があるので「プロジェクトを作成」ボタンをクリックします

672d8a712055795575d0bbe38ca25d0f

すると下記のような画面が出てくるので、プロジェクト名を設定して、「作成」を押します。

この時「プロジェクトID」が後々必要になるのでどこかにメモしておいてください

2536ae018d48b45983021924fb66a1c4


# ソースコードの準備

最低限「main.go」とコンフィグファイルである「app.yaml」が必要です。

https://github.com/ekos/appengine_go_sample

上記にファイルを用意したので、参考にしてください。内容は↓のような感じになっています

「main.go」ですが今回はせっかくなのでフレームワークのmartiniを使用しています。Rubyで言うSinatraに当たるフレームワークらしいです(使ったこと無い)

12行目~14行目が http://example.com/ にマッチするルーティングを表しておりHello worldという文字列を返却してます。

15行目~17行目はサンプルとして http://example.com/hoge/huga へのルーティングが書いてあります。

AppEngineの様々なツールを使用するため外部メソッド内でAppEngineのコンテキストを使用する機会がよくあるので、コンテキストを引き渡す例も同時に書きました。

今回は全てのURLをGoスクリプトで処理するようにhandlersパラメータに書いてあります。

画像などにGoプログラムを通さず静的アクセスさせる場合はここに複数のURLパターンを書くことになります。

versionの整数値はデプロイするときのバージョンを指定することができ、指定したバージョンに即座に切り戻したりなんかが可能です。


# プロジェクトとリソースの紐付け

上記2ファイルを適当なディレクトリに設置し、コマンドプロンプトを開きます

上記の用にコマンドを打ってください。

<PROJECT_ID>には先ほどメモしておいたプロジェクトIDを

/path/to/project にはファイル設置したディレクトリを指定してください。

これを打つと自動的にブラウザが立ち上がり、認証画面が出てきますので、「認証」を押します。


# リソースのダウンロード

先ほどmain.goで使用していた

github.com/go-martini/martini

のような外部のライブラリを使用する場合、事前にローカルにライブラリをダウンロードする必要があります。

コマンドプロンプトを立ち上げ

のように打てばダウンロードできます。


# デプロイ前検証

AppEngine上にファイルをアップする前にローカルで検証することが可能です。

起動している間は

http://localhost:8080/

でアクセスが可能になります。

アクセスするとコマンドプロンプト上にアクセスログ/エラーログが流れ、起動している間にGoファイルを更新するとそれを自動的に検知しコンパイル、即座に確認できます!便利!

「Hello world!」がブラウザ上に表示されてれば成功です!


# デプロイ

下記コマンドでデプロイを行います。

デプロイが完了すれば

https://[PROJECT_ID].appspot.com/

でグローバルアクセスが可能になり、「Hello world!」がデプロイまえ検証と同じく表示されるはずです!


# おわりに

以上、走りでの説明でしたがいかがでしたか?

思ったより簡単に導入が済んでしまう・デプロイが簡単なので、コーディングに集中出来る環境が整うのではないかなと思っています。

みなさんもぜひトライしてみてください!

※ブログ掲載のプログラムのインストールは、自己責任で御願いします。インストール等の結果にかかるハードウェアの不稼働等は、 当ブログでは一切サポートしておりませんので、予め御了承下さい