ルーテさんアドベントカレンダー 17日目の記事です。
前編でbotを作成することができましたが、このままだとPC上で動作させておく必要があリマす。つまり寝ても覚めてもPCをずっと起動しておかなければならず非経済的です。
なので、クラウドサービスを利用してルーテさんbotを稼働さることにします。具体的にはHerokuです。
Herokuとは
専門用語でいうとHerokuはPaaS(Platform as a Service)と呼ばれるサービスで、要はネットの向こう側のサーバを貸してくれるサービスです。
で、PaaSは色々あるんですが、その中でもHerokuは以下の特徴を持っています。
- アプリケーションの公開、管理が非常に簡単
- 月あたり1000時間の無料稼働時間が与えられる
- アプリを一つしか動かさなければ、フルで稼働させても24*31=744hなので実質完全無料
Amazonが展開しているAWSの方が自由度は高いのでしょうが、今回は簡単なbotなのでHerokuを使います。
Herokuアカウント取得
上のページからアカウントを取得します。
アカウントを作成すると、アプリケーション作成画面に移行するので、適当な名前でアプリケーションを登録します。
また、無料稼働時間はクレジットカードを登録しないと与えられないので、カード情報も登録しておきます。
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を軽率に作ってTwitterをbotで溢れ返させ、電脳世界の無人化を推し進めましょう。
あと、ルーテさんbotの拡張案はいつでも募集しております。何かアイデアがあればお気軽にお声がけください。技術が手の届く範囲であれば対応します。