打ち首こくまろ

限界オタクの最終処分場

ルーテさんbot改造計画(後編)

ルーテさんアドベントカレンダー 17日目の記事です。

kokukoku.hatenablog.com

前編でbotを作成することができましたが、このままだとPC上で動作させておく必要があリマす。つまり寝ても覚めてもPCをずっと起動しておかなければならず非経済的です。

なので、クラウドサービスを利用してルーテさんbotを稼働さることにします。具体的にはHerokuです。

Herokuとは

f:id:realizemoon:20171217224408p:plain

専門用語でいうとHerokuはPaaS(Platform as a Service)と呼ばれるサービスで、要はネットの向こう側のサーバを貸してくれるサービスです。

で、PaaSは色々あるんですが、その中でもHerokuは以下の特徴を持っています。

  • アプリケーションの公開、管理が非常に簡単
  • 月あたり1000時間の無料稼働時間が与えられる
    • アプリを一つしか動かさなければ、フルで稼働させても24*31=744hなので実質完全無料

Amazonが展開しているAWSの方が自由度は高いのでしょうが、今回は簡単なbotなのでHerokuを使います。

Herokuアカウント取得

devcenter.heroku.com

上のページからアカウントを取得します。

アカウントを作成すると、アプリケーション作成画面に移行するので、適当な名前でアプリケーションを登録します。

また、無料稼働時間はクレジットカードを登録しないと与えられないので、カード情報も登録しておきます。

Heroku CLIのインストール

コマンドラインでHerokuを制御するため、CLIツールをインストールします。

https://devcenter.heroku.com/articles/heroku-cli

上記のページに各OSでのインストール方法が書かれていますが、僕はMacを使っているため以下のコマンドを実行します。

brew install heroku/brew/heroku

インストール後、heroic loginコマンドでログインしときます。

Heroku用のファイルの用意

Herokuで動作させるために必要なファイルがあるので、それを用意します。

Procfile

Herokuに「これを動かすんだよー」と支持するためのファイル。

worker: python tweet.py

runtime.txt

Pythonのバージョンを指定するためのファイル。

python-3.6.3

requirements.txt

Herokuがインストールするライブラリを指定するためのファイル。

pip freeze > requirements.txt

上記のコマンドで簡単に生成できます。

デプロイ

環境変数の設定

前編ではソースコード内にトークンを直書きしていたわけですが、セキュリティ上の理由により環境変数に設定し、それを読み取る方式にします。

def create_api():
    return twitter.Api(consumer_key=os.environ['CONSUMER_KEY'],
                      consumer_secret=os.environ['CONSUMER_SECRET'],
                      access_token_key=os.environ['ACCESS_TOKEN'],
                      access_token_secret=os.environ['ACCESS_TOKEN_SECRET'])

環境変数heroku config:setコマンドで設定します。

lutebot $ heroku config:set CONSUMER_KEY=*** CONSUMER_SECRET=*** ACCESS_TOKEN=*** ACCESS_TOKEN_SECRET=***
Setting CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET and restarting ⬢ guarded-eyrie-93033... done, v3
ACCESS_TOKEN_KEY:    ***
ACCESS_TOKEN_SECRET: ***
CONSUMEER_SECRET:    ***
CONSUMER_KEY:        ***

スケールの設定

workerプロセスを1つ動作させる、ということを設定します。

heroku ps:scale worker=1

アップロード

準備ができたのでいよいよアップロードします。

今回はGitを使ってHerokuにプッシュします。Gitについてはここでは説明しません。

heroku create # git initに相当
git add .
git commit -m "first commit"
git push heroku master

pushすると、herokuの環境で必要なライブラリなどのインストールが始まり、終わり次第アプリケーションが起動されます。

確認

heroku psコマンドで、アプリケーションが動いていることを確認します。

lutebot $ heroku ps
Free dyno hours quota remaining this month: 1000h 0m (100%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== worker (Free): python tweet.py (1)
worker.1: up 2017/12/17 22:33:32 +0900 (~ 35m ago)

その他

Gitを使っているのでGitHubソースコード公開しようかなーと思いましたが、本名のアカウントでコミットしてしまったのでやめました。後で別のアカウントでコミット書き換えてから公開したいと思います。

しかし、Heroku使うと意外と簡単ですね。皆さんも好きなキャラのbotを軽率に作ってTwitterbotで溢れ返させ、電脳世界の無人化を推し進めましょう。

あと、ルーテさんbotの拡張案はいつでも募集しております。何かアイデアがあればお気軽にお声がけください。技術が手の届く範囲であれば対応します。