AppEngine for Go でのVendoring

GAE/GoでVedoringの設定をしてみました。

2016/11/23

GAE/Go 皆さん使っていますか?やっぱりGAE使うならGoですね!
Goの1.6から正式にvendoringが使えるようになりましたが、どうも僕が使っていた今までの構成だと上手く行かなかったんですよね。
今回、やっと実用性のありそうな構成にたどり着いたので書いてみました。

GAE/Goのパッケージ構成

以下がVendoringが機能した際のパッケージ構成になります。

root (GOPATH)
└── src
    ├── mypackage
    │   ├── handler.go
    │   ├── model.go
    │   …
    │
    ├── static
    │   ├── css
    │   ├── js
    │   …
    │
    ├── vendor
    │   ├── google.golang.com
    │   …
    │
    ├── app.yaml
    ├── glide.yaml
    └── index.yaml

mypackage

ポイントは、mypackageの場所でしょうか。
僕は、今までsrcの下に直接 *.go を置いていたのですが、パッケージを作らないとvendorディレクトリを認識してくれませんでした。

GOPATHの設定

GAE/Goは、 syscall などGAEでは使えない機能があります。プロジェクト内に外部のライブラリを入れてしまうと、これらも含めてコンパイルされてしまい動きませんでした。その為、GOPATHは、プロジェクトの外に設定することが多くありました。

今回、Vendoringが使えるようになることで、外部にGOPATHを設定する必要がなく、プロジェクトルートのみの設定で対応が可能となりました。

パッケージ管理ツール(Glide)

vendorディレクトリを認識できるようになったのですが、vendorディレクトリに go get をするとgitなどのリポジトリになってしまい、pkgディレクトリとか、binディレクトリも出来てしまったりと色々困ります。そこで、パッケージ管理ツールの出番になります。

今回は、Glide を利用しました。使い方は、今回は割愛させて頂きます。

今回使ったコマンドは、

glide create

glide update

の2つのみでした。

app.yamlの設定追加(これ重要!)

GAEの設定ファイルである、app.yamlに以下を追加する必要があります。

nobuild_files:
- vendor

skip_files:
- vendor/.*$

nobuild_files

vendorディレクトリを作って、Vendoringが可能になっても、残念ながらvendorディレクトリ以下もコンパイル対象になってしまいます。これに対応するために、 nobuild_files の設定を追加してビルド対象から外します。

skip_files

nobuild_files を入れればビルドは出来て問題なく動くようです。
しかし、appengineのプロダクション環境のコンソールでサイズを見ると、異常に大きくなっています。どうやら、deployする際、vendor以下も上がってしまうようです。
skip_files の設定を入れることで、vendor以下のファイルをアップロードしなくなります。

最後に

実際に集中して対応する時間が取れていませんでしたが、初心者向けに色々とGAEを触るきっかけ作りをしたいなと思いながら、簡単な構成がないかを考えていたところでたどり着きました。
僕が主催している タネマキGAE の中で色々と試しながらでした。

自分で作るアプリは、しばらくはこの構成でやっていきたいと思います。

GAEに関して、何か質問や相談などありましたら、こちらの問合せフォームからご連絡下さい。
FreeGufo 問い合わせフォーム

By nuki_pon

Related articles

--- AD ---