猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

GoのWebフレームワークginを使って作ったアプリをHerokuにデプロイするまで

ginフレームワークのキャラクター
ginフレームワークのキャラクター

Go のバージョン

  • go 1.14.4
$ go version
go version go1.14.4 darwin/amd64

GOMODULEを使う

GOMODULE についてはこの記事がわかりやすいです。

qiita.com

Qiitaに書いている通り GOMODULE を有効にします。

# 現在の状態を確認
$ go env
GO111MODULE=""

# 値を変更
$ go env -w GO111MODULE=on

# 書き換わったことを確認
$ go env
GO111MODULE="on"

go.mod ファイルを作成します。

go mod init <アプリケーション名とか>

こんな感じのファイルができるはず

module <アプリケーション名とか>
 
go 1.14

GOMODULEでginを入れる

ginはORMやActive Recordは入っていないので、フルスタックなフレームワークではないです。

しかし色々な拡張ライブラリがあります。ライブコンパイルの拡張があって非常に便利なので、僕は結構好んで使っています。

ginの導入についてはこちらの Qiita を参考にしました。

qiita.com

ginのインストール

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

main.go というファイルを作成して以下のようにしました。

package main

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

func main() {
    router := gin.Default()
    router.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    router.Run()
}

動かしてみます

go run main.go

これで http://localhost:8080/ping とかにアクセスすると json で pong が返ってきます。

Herokuにデプロイする

Herokuで動かす場合は、環境変数の PORT を読み込んで、そのポートでアプリケーションを動かす必要があるので、少しコードを変更します。




package main

import ( "os"

"github.com/gin-gonic/gin"

)

func main() { router := gin.Default() router.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) })

port := os.Getenv("PORT")
router.Run(":" + port)

}

 そして、以下のような内容の `Procfile` というファイルをリポジトリルートに配置するだけです。

web: bin/<アプリケーション名とか>

あとは GitHub 経由なりで Heroku にデプロイするだけです。

Heroku に Go をデプロイした場合、 `bin/` 以下にコンパイルされてバイナリが配置されるようです。