Diary

@ssig33

21/Jan/2017 (Sat) 11:17

glide をつかってつくったアプリを Heroku にデプロイする 方法ですが、 heroku/heroku-buildpack-go をみるとなんだかやれそうなかんじがしてくるのですが、

Heroku also supports GB. Glide support is a work in progress.

とあります。実際にやってみると、 glide つかってるとビルド時に vendor 以下をみてくれないようでビルドがこけます。

こっちがへんなことやってる可能性もたかいような気もするのですが、ドキュメントもないですしこのへん実際にやってるひともあんまりいないようです。ということでここは Docker と heroku Container registry でやってしまうのがいいとおもいます。ぼくはそうしてます。

Linux 向けバイナリの作成

これも Docker をつかうようにすると楽です。

docker run -v $(pwd):/go/src/PROJECT_NAME golang bash -c "cd src/PROJECT_NAME && go build"

こんな感じ。

実行環境用 Dockerfile

FROM frolvlad/alpine-glibc
RUN mkdir /app
COPY memo /app/PROJECT_NAME
CMD ["/app/PROJECT_NAME"]

こんなんでいいでしょう。 イメージサイズを極限まで節約したい人は glibc じゃない alpine でがんばればいいとおもいます。 Container registry が GA になったときどういう料金体系になるかわからないので、ある程度イメージサイズを節約しておくとよいかなとおもいます。

他の言語でこういうイメージサイズの節約をやろうとするとめんどうなものですが、実用性があり利用例もおおくでユーザーも沢山いる言語のなかで Go はやはりこのあたりの利便性はとてもたかいですね。

$ heroku container:push web -a APP_NAME

とかやると Dockerfile をみてビルドして push して Web アプリを更新するところまで自動でやってくれます。

Ruby アプリとかで積極的にこのしくみを使うメリットはないかなとおもいますが、公式未サポートの環境でもがんがんうごかせてすごい。