GitHubじゃんけんというwebアプリがあったのを覚えているだろうか... それのバックエンドをGoで置き換えてherokuにデプロイしたのでその時のメモ
GitHubじゃんけんとは
これです。GitHubのContribution数が多い人が勝つというじゃんけん要素皆無のゲームです。Twitterでエゴサしてみると地味に遊んでくれている人がいて笑ってしまいます。
Goで書き換える
以前までバックエンドはNode.jsでしたが、最近Goの勉強をしたので書き換えてみることにしました。html要素の取得にはPuerkitoBio/goqueryを利用しています。
ソースコードはここにあります。
デプロイ
ローカルで開発が終わったら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
vendor
とGodeps
というディレクトリが生成されて、その中にはそれぞれ依存パッケージのソースとそれらの一覧が記述されたファイルが作成されます。
Procfile
Procfileにはherokuで実行されるファイルを記載します。これはGoのプロジェクトをビルドした時に生成されるファイル名になります。
web: ghjanken
buildpackの変更
herokuのサイトにログインして置き換えたいプロジェクトの設定画面を開きます。'Add buildpack'ボタンからGoが選択できるので、それを選びます。(画像はGoを選択してNode.jsを消したところ)
push
herokuに存在しているNodeのプロジェクトをforce pushして置換します。
$ git remote add heroku https://git.heroku.com/github-janken-backend.git $ git push -f heroku master
最後に勝負
実はこのアプリ無駄に挑戦状機能も付いています。下記のリンクで私と勝負しましょう。