[Golang]Herokuにデプロイする!

Goで簡易サービスを作った時にどこにデプロイしようか悩みますよね。何個かいろんなサービスにデプロイしてみて、自分にあったものを選びたいと思います。そんなこんなで今回はHerokuにデプロイしてみることにしました。早速やってみましょう。

準備

Goのプロジェクトを開始します。

$ cd $GOPATH/src/github.com/<username>
$ mkdir golang-heroku-sample
$ cd golang-heroku-sample

今回はGinを使って、Hello, World!と返す簡単なアプリケーションを作ってみましょう。Ginを導入します。

$ go get github.com/gin-gonic/gin

それでは簡単にmain.goを作成しましょう。

package main

import (
	"log"
	"net/http"
	"os"

	"github.com/gin-gonic/gin"
)

func main() {
	port := os.Getenv("PORT")

	if port == "" {
		log.Fatal("$PORT must be set")
	}

	router := gin.New()
	router.Use(gin.Logger())

	router.GET("/", func(c *gin.Context) {
		c.String(http.StatusOK, "Hello, World!")
	})

	router.Run(":" + port)
}

これでひとまずGoのアプリケーションが作成できました。次にデプロイをしましょう。

デプロイ

Herokuで実行するにはProcfileというものがいります。作成しておきましょう。

$ echo "web: $(basename `pwd`)" > Procfile

あと、GoをHerokuで動かすには依存関係のバージョン管理もしておかなければなりません。今回はdepというツールを使います。インストールします。

$ brew install dep

これを導入しましょう。

$ dep init
$ dep ensure

vendor/以下にたくさんライブラリがありますね。他にもいくつかファイルが作成されているはずです。

次にGopkg.tomlmetadata.herokuを作成しましょう。root-packageを明示しないとデプロイしたあとHerokuに怒られちゃって失敗します。

[metadata.heroku]
  root-package = "github.com/jyouj/qiita-airline"

あとはHerokuにデプロイするためにGit管理をしておきましょう。

$ git init
$ git add .
$ git commit -m "initial commit"

Herokuのアカウントは取っているものとして、Herokuにデプロイ。

$ heroku create
$ git push heroku master

成功したら、最後に。

$ heroku open

これで、Hello, World!と表示されていたら、おっけーです。