はじめに
Go1.11から依存管理に go modules が使えるようになりました。
Women Who Go Tokyo のハンズオンでつくった Slackbot に利用しているライブラリのバージョン管理を go modules を使って行いたいと思ったため、アプリケーションの Go のバージョンを1.9から1.12に一気に上げました。
App Engine SDKの利用をやめる
Go1.9の時点では Cloud SDK に加え App Engine SDK をダウンロードする必要がありました。
Go 1.12では App Engine SDK は 廃止され、Cloud SDKとそのコンポーネントを使う形に変わりました。
https://cloud.google.com/appengine/docs/standard/go/download
Cloud SDK はここからダウンロードできます。 https://cloud.google.com/appengine/docs/standard/go112/quickstart
今回の場合 Cloud SDK はすでにダウンロードしているのでアップデートをします。
$ gcloud components update
さらにGoのApp Engine拡張機能が含まれている gcloud コンポーネントをインストールします。
$ gcloud components install app-engine-go
また、不要になった App Engine SDK(go_appengineディレクトリ)を併せて削除しました。
App Engine SDK を脱却し今後は Cloud SDK を利用するので、デプロイのコマンドも下記のように変更します。
(旧)App Engine SDKを利用していたときのデプロイのコマンド
$ goapp deploy --application <ROJECT_ID> --version <VERSION_ID> .
(新)Cloud SDKを利用したデプロイのコマンド
$ gcloud app deploy --project <PROJECT_ID> --version <VERSION_ID>
app.yamlを書き換える
app.yamlを変更します。
- runtime: go
- api_version: go1.9
- module: slackbot
+ runtime: go112
+ service: slackbot
handlers:
- url: /.*
- script: _go_app
+ script: auto
module は名称が service に変更されました。
またscriptは省略可能で、記載する場合は Go1.9 では _go_app
とする必要がありましたが、 Go1.12 では指定できるのは auto
のみとなっています。
Go1.9 のドキュメント(日本語)
Go1.12 のドキュメント(英語のみ)
コードを書き換える
コード上は下記のような変更がありました。
- init 関数ではなくmain 関数を使う。
appengine.NewContext()
とslack.SetHTTPClient()
の代わりに、標準パッケージnet/http
のhttp.ListenAndServe()
を使う。google.golang.org/appengine/log
の代わりに標準パッケージのlog
を使う。log.Errorf()
やlog.Infof()
などgoogle.golang.org/appengine
の関数は使えなくなる- 標準パッケージの
log.Printf()
を使う
package slackbot
import (
...
+ "log"
...
- "google.golang.org/appengine"
- "google.golang.org/appengine/log"
- "google.golang.org/appengine/urlfetch"
)
- func init() {
+ func main() {
http.HandleFunc("/events", eventsHandler)
+ http.ListenAndServe(":8080", nil)
}
...
- ctx := appengine.NewContext(r)
- slack.SetHTTPClient(urlfetch.Client(ctx))
...
- log.Errorf(ctx, "ParseEvent: %v", err)
+ log.Printf("ParseEvent: %v", err)
おわりに
ここまで書いてきたコード上の変更は以下の Pull Request にまとまっています。
ハンズオンの教材をつくってくださり、 Women Who Go Tokyo で講師をしていただいている @tenntennさん、 @knsh14さん、レビューしていただいた @sinmetalさん、 @sonatardさんありがとうございます。