post Image
Go製のフレームワークechoをHerokuで動かす

Go製のフレームワークechoを使ってJSONを返すWebサーバーを作り、GoogleAppEngineで動かす
という記事を書きましたが、GoogleAppEngineではなくHerokuで動かしたという例があまりなさそうだったので調べてみました。

Golang on Heroku

Herokuは昨年からGoの正式サポートを開始しています。
https://devcenter.heroku.com/articles/getting-started-with-go#introduction
introductionを見ると、

  • a free Heroku account.
  • Go 1.6+ installed.
  • \$GOPATH/bin has been added to your $PATH.

ということなので、これを前提として進めます。
echoフレームワークはv2.0.1で動作確認しています。

まずはlocalで

手元で動かしてみます。
公式のサンプル https://echo.labstack.com/recipes/hello-world をそのまま使います。

go getで取得していない場合は取得します

go get github.com/labstack/echo/...

$GOPATH/srcの下にechoprojectというディレクトリを作って作業します。

$GOPATH/src/echoproject/main.go
package main

import (
    "net/http"
    "os"

    "github.com/labstack/echo"
    "github.com/labstack/echo/engine/standard"
    "github.com/labstack/echo/middleware"
)

func main() {
    // Echo instance
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // Route => handler
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!\n")
    })

    // Start server
    // ポート番号は環境変数から取得
    e.Run(standard.New(":" + os.Getenv("PORT")))
}

ポイントとしてはHerokuは起動時にポート番号を環境変数から指定するので、”os”をインポートして可変にできるようにしました。

ローカルでは8080番で起動してみます。

cd $GOPATH/src/echoproject
export PORT=8080
go run main.go
# http://localhost:8080 に "Hello, World!"と表示されていればOK

Herokuに乗せる準備

Herokuで動かす際、echoフレームワーク本体の依存関係を保存してHeroku側に伝える必要があります。glide を使えば良いのかと思いましたが、下記によるとgodep、govendor、GBの3つしか対応していないようなので、ここではgodepを使います。
https://devcenter.heroku.com/articles/go-support#supported-dependency-vendor-managers

# godepの取得
go get github.com/kr/godep
# 私の環境では以下も必要でした
go get golang.org/x/sys/unix
# 依存関係を保存します
godep save

また、Herokuが起動するためにProcfileというファイルが必要なので作成します。

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

Procfileに “web: echoproject” とディレクトリの名前を書き込みます。

(最初ここでディレクトリの名前を echo にしていたらシステムのコマンド名とバッティングして起動できずにハマりました…よく考えたら当たり前なんですが、echoという名前ありきたりすぎませんかね。検索もしにくいし…😓)

ここまでやると以下のような構成になります。

$GOPATH/src/echoproject
├── Godeps
│   ├── Godeps.json
│   └── Readme
├── Procfile
├── main.go
└── vendor
    ├── github.com
    │   ├── dgrijalva
    │   │   └── jwt-go
    │   ├── labstack
    │   │   ├── echo
    │   │   └── gommon
    │   ├── mattn
    │   │   ├── go-colorable
    │   │   └── go-isatty
    │   └── valyala
    │       └── fasttemplate
    └── golang.org
        └── x
            ├── net
            └── sys

Herokuにデプロイ

まずはgitで管理します。

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

Herokuにデプロイします。

# heroku側にアプリを作ります
heroku create
git push heroku master
# ブラウザで開きます
heroku open

これで完了です。うまく動かない場合はログを見てみると良いかもしれません。

heroku logs --tail

> 2016-07-03T02:36:24.386962+00:00 heroku[slug-compiler]: Slug compilation started
> 2016-07-03T02:36:24.386967+00:00 heroku[slug-compiler]: Slug compilation finished
> 2016-07-03T02:36:24.858458+00:00 heroku[web.1]: Starting process with command `echoproject`
> 2016-07-03T02:36:28.518721+00:00 heroku[web.1]: State changed from starting to up

まとめ

Go製のフレームワークechoをHerokuで動かす、ということで手順をまとめました。
HerokuがGoに正式対応しているので、少し古めの記事に出てくる .godir のファイルを作ったり、buildpackを指定したりする作業は不要でした。とても気軽にできるようになってますね。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。