電気ひつじ牧場

技術メモと日常のあれこれ

GitHubじゃんけんのバックエンドをGoで書き換えてherokuにデプロイした

GitHubじゃんけんというwebアプリがあったのを覚えているだろうか... それのバックエンドをGoで置き換えてherokuにデプロイしたのでその時のメモ

GitHubじゃんけんとは

qiita.com

これです。GitHubのContribution数が多い人が勝つというじゃんけん要素皆無のゲームです。Twitterエゴサしてみると地味に遊んでくれている人がいて笑ってしまいます。

Goで書き換える

以前までバックエンドはNode.jsでしたが、最近Goの勉強をしたので書き換えてみることにしました。html要素の取得にはPuerkitoBio/goqueryを利用しています。

github.com

ソースコードはここにあります。

github.com

デプロイ

ローカルで開発が終わったらpushします。

リッスンポートの変更

heroku上では好き勝手にポートを使えないので環境変数PORTから取得する必要があります。

func getListenPort() string {
    port := os.Getenv("PORT")
    if port != "" {
        return ":" + port
    }
    return ":3000"
}

func main() {
    server := http.Server{
        Addr: getListenPort(),
    }
    http.HandleFunc("/contributions", handler)
    server.ListenAndServe()
}

依存の管理

herokuはgoプロジェクトの依存パッケージ管理にgodepを利用するので、それをインストールします。

$ go get github.com/tools/godep

saveコマンドで現在の依存関係を書き出します。

$ godep save

vendorGodepsというディレクトリが生成されて、その中にはそれぞれ依存パッケージのソースとそれらの一覧が記述されたファイルが作成されます。

Procfile

Procfileにはherokuで実行されるファイルを記載します。これはGoのプロジェクトをビルドした時に生成されるファイル名になります。

web: ghjanken

buildpackの変更

herokuのサイトにログインして置き換えたいプロジェクトの設定画面を開きます。'Add buildpack'ボタンからGoが選択できるので、それを選びます。(画像はGoを選択してNode.jsを消したところ)

f:id:cha-shu00:20190816161825p:plain

push

herokuに存在しているNodeのプロジェクトをforce pushして置換します。

$ git remote add heroku https://git.heroku.com/github-janken-backend.git
$ git push -f heroku master

最後に勝負

実はこのアプリ無駄に挑戦状機能も付いています。下記のリンクで私と勝負しましょう。

github-janken.herokuapp.com