はじめまして、AppEngine goに触れる機会があったのでメモを兼ねてまとめようと思います。
私はGAE初心者なのでAppEngin goの開発環境を整えるのに少し苦労しました。
そのため間違っているところや非効率的な所もあるかもしれませんがご容赦下さい。
※あくまで自分用のメモ程度
#開発環境の構築
はじめにGoの開発環境構築から行いたいと思います。
所々省いている箇所がありますがご了承下さい。
##goenv
では早速goenvをインストールする所から始めようと思います。
goenvとはGoのバージョンを複数管理できるツールです。
これを用いることでAppEngineの開発に使うバージョン以外のGoを共存させることが可能になります。
今回はgoenvの取得をHomebrewから行います。(分かる人はgitからクローンしてもok)
まだHomebrewをインストールしていない方は検索して入れて下さい。
ターミナルを開いて以下のコマンドでgoenvを取得します。
$ brew install goenv
.bash_profileに下記を記載してgoenvのパスを通し、ついでにGOPATHも設定します。
GOPATHはHomeディレクトに設定している方が多いので合わせます。
#goenv
export PATH="$HOME/.goenv/bin:$PATH"
export GOPATH=$HOME/go
eval "$(goenv init -)"
.bash_profileを再読込します。
$ source ~/.bash_profile
これでgoenvコマンドが使えるようになると思うので以下のコマンドで確認してみます。
$ goenv -v
goenv 1.0.0 //このようにバージョンが表示されれば成功
ここまでできた方はgoの導入に進みます。
##golang
goenvを使用してgolang本体のインストールを行います。
ターミナルで次のコマンドを実行して下さい。
$ goenv install -l
Available versions:
1.2.2
~
1.9.6
インストール可能なGoのバージョンが一覧表示されます。(長いので一部省略)
今回はAppEngine Goのバージョンに合わせて1.9.2をインストールします。
$ goenv install 1.9.2 #1.9.2の部分を変えれば他のバージョンをインストールできます
インストールが終わったら正しくインストールされたか確認します。
$ goenv versions
1.9.2 (set by /Users/ユーザー名/.goenv/version)
上記のようにインストールしたバージョンが表示されればOK
使うバージョンを指定して実際に使えるようにします。
$ goenv global 1.9.2 #グローバルで使うバージョンを指定しています(今回はこちらでOK)
$ goenv rehash #実際に使えるようにする
#プロジェクトごとに使うバージョンを変えたい(ローカルで使うバージョンを指定したい)場合は下記
$ goenv local 1.9.2
$ goenv rehash #実際に使えるようにする
これでgoを使えるようになりました。
##GoでHello,World!してみる
環境の構築が最低限できたので実際にHello,World!してみたいと思います。
デスクトップなどにhello.goを作成して下さい。
適当なテキストエディタ(AtomやVS Code,vimなど)でhello.goを開き以下のコードを書きます。
package hello
import (
"fmt"
)
func main(){
fmt.println("Hello,World!")
}
Hello,World!と表示されれば成功です。
#AppEngine Go standardにテストアプリをデプロイする
Goの環境構築に成功したところで、いよいよ本題のAppEngine Goに触れていきたいと思います。
前提としてGoogleCloudSDKが必要となりますのでまだインストールしていない方は下記の公式ドキュメントがわかりやすいと思うのでこちらを見て導入して下さい。
https://cloud.google.com/sdk/docs/
CloudSDKのインストールが終わったらGCPプロジェクトの作成とAppEngineインスタンスの生成も**GoogleCloudConsole**から行って下さい。
CloudSDKのインストールとAppEngine goインスタンスの準備ができたら次に進みます
##GoにAppEngine関連のパッケージを追加する
ここから先はGoogleのドキュメントを見ながら進めていきます。
Setting up Your Project and Application
ターミナルを開いて以下のコマンドを入力します。
$ go get -u google.golang.org/appengine/... #AppEngine関連のパッケージをGoに追加
このコマンドを実行するとGOPATH直下にgoフォルダが生成され、AppEngine関連のパッケージはこちらに格納されます。
GOPATHを確認したい方は以下のコマンドでパスを表示できます。
$ echo $GOPATH
次に以下のコマンドでgo-appディレクトリを作成し、作成したディレクトリに移動します。
$ mkdir $GOPATH/src/go-app #mkdirでディレクトリ作成
$ cd $GOPATH/src/go-app #cdで作成したディレクトリに移動
go-appディレクトリに移動したらapp.yamlを作成します。
app.yamlはAppEngineの設定などを記述するyamlファイルです。
作成には以下のコマンドを使用します。
$ touch app.yaml
続いてapp.yamlを適当なテキストエディタで開き以下を記入,保存して下さい。
runtime: go #AppEngine goを使用します
api_version: go1 #AppEngine Go SDKのバージョン指定
handlers:
# All URLs are handled by the Go application script
- url: /.* #アクセスされたら
script: _go_app #Goプログラムを起動します
ここまでできたらプログラム部分を書いていきます。
app.yamlと同じ階層にmain.goを作成して下さい。
(今回はGoogleのチュートリアルに従いmain.goとしていますが、本来はアプリケーション名と同じであることが望ましいらしい?です)
main.goは以下のコマンドで作成できます。
$ touch main.go
main.goを作成したら下記の内容を記述,保存します。
package main
import (
"fmt"
"net/http"
"google.golang.org/appengine" // AppEngineライブラリを読み込みます
)
func indexHandler(w http.ResponseWriter, r *http.Request) {
// ドメインより後ろのパスが"/"以外だった場合にリダイレクト処理が発生します
if r.URL.Path != "/" {
http.Redirect(w, r, "/", http.StatusFound)
return
}
fmt.Fprintln(w, "Hello, Gopher Network!")
}
func main() {
http.HandleFunc("/", indexHandler)
appengine.Main() // Flexible環境では必須ですが、Standardではなくても良いらしい
}
これでAppEngineにデプロイする準備はできましたが、まずはローカルサーバーで試してみたいと思います。
app.yamlのある階層で以下のコマンドを入力して下さい。
$ dev_appserver.py app.yaml
ローカルサーバーが起動しブラウザ上からlocalhost:8080でアクセスできると思います。
ここでエラーがでなければAppEngineにデプロイしても恐らく大丈夫です。
エラーが出た方はプログラムの問題か、テストサーバーを動かすのに必須となるPythonのバージョン等が関連していると思われます。
両方よく確認してみて下さい。
Pythonのバージョンは2.7である必要があります。(2018/05/30現在)
以下のコマンドでAppEngine Go standardにデプロイしてみましょう。
$ gcloud app deploy
途中で内容が正しいか聞かれますので y を入力して下さい。
デプロイが終わるとブラウザから実際にアクセスできます。
アクセスするには以下のコマンドが便利です。
$ gcloud app browse
既定のブラウザが自動起動してアプリが表示されれば成功です。
以上でAppEngine Go standardへのアプリデプロイは完了です。
お疲れ様でした。
#あとがき
今回始めてQiitaに記事を投稿したので直したほうがいい点や間違っている箇所などありましたらコメント頂ければと思います。
これからAppEngine Goを始める方の手助けになれば幸いです。