Open sonatard opened 5 years ago
@sonatard 以下の順番が逆さま?
export GO111MODULE=off
go mod vendor
Cloud Functions Go runtime の dependency 周りはドキュメントが分かれたっぽい https://cloud.google.com/functions/docs/writing/specifying-dependencies-go?hl=en
Go 1.13からGO_PROXYの効果で高速になりました
Go 1.11 (vendor) 55秒 Go 1.12 (go mod) 157秒 Go 1.13 (go mod) 68秒
早くするという文脈ではないが、 .gcloudignore
に go.mod, go.sum を入れるみたいな話もあった
ちなみに GO_PROXY で高速化はされたが、プライベート repo にあるモジュールに依存している場合は vendoring が必要になる場合もある。おそらく Go 1.14 以降は vendor と go.mod が両立するので GO111MODULE=off は必要なさそう https://golang.org/doc/go1.14#tools
Go 1.11から
export GO111MODULE=on
と環境変数を設定することでgo modulesを利用することができる。 Google App Engine 2nd genと Cloud Functionsはgo modulesに対応している。しかしデプロイが遅くなるので、従来通りvendorディレクトリを用意してデプロイすることで高速になる。 私の環境のGoogle App Engineでは 4:20が2:20くらいになったので約2分速くなる。
また日常の開発ではgo modulesを使いたいという場合にはデプロイ時だけvendorを用意してgo modulesをオフにするとよい。
以下のようにすることでgcloudコマンド実行時だけoffにすることもできる
Cloud Functionsは試していないが、おそらく同じはず。
go.mod
とgo.sum
を.gcloudignore
に追加することでvendorを利用できるとドキュメントにあるが、実際にはGO111MODULE=off
が必要である。https://cloud.google.com/functions/docs/concepts/go-runtime#vendor_directory
Go 1.13以降go modules onがデフォルトになってしまうとこの回避方法が使えなくなる可能性はある。
またgo modulesを使うと遅くなる原因は恐らくGCP側でgo getが走ってビルドするためなので、将来的にソースコードと同様に依存ファイルもキャッシュされるようになればgo modulesでも高速になるかもしれない。