Python
Heroku
slackbot

pythonで作ったSlackBotを常駐化するまでの備忘録

はじめに

ある程度Slackbotの機能を追加できたのですが、いちいちコマンドプロンプトで
python run.pyをたたくのがめんどくさくなりました。
そこで常駐化に挑戦。すでに多くの方が実戦れているHerokuを使って常駐化してみました。

環境

  • windows10
  • python 3.6.4

Herokuとは

一言でいうとPaaSです。
サーバー,OS,データベース,プログラミング言語に必要な環境をボタン一つで構築してくれます。
同じPaaS環境を提供しているものとしてAzureのWebAppsがあったりすると思うのですが、
Azureを使ったbotの常駐化方法がわからなかったため、今回はひとまずHerokuを使ってみました。

実際にやってみた今回の流れとしては、以下のような感じでした。

PG作成 → Heroku Cliを使ってPGをherokuサーバーにPush → サーバを動かしてbotスタート

サーバーにコードをpushしただけでできてしまったという感じでした。

料金とか

以前調べた際にはFreeプランだと様々な制約がありました。
(30分サーバーにアクセスがないとフリーズする、24時間連続稼働はできない etc…)

ですが、現在はFreeプランでもそれらの問題は解消されていました。
私はクレジットカードを登録するのも嫌なのでしていないのですが、
クレジットカード登録なしだと1ヶ月で550時間、登録をすると1000時間の利用が無料で可能です。
1アプリケーションのみでしたら、24時間×31日=744時間なので、常駐化がFreeプランで可能です。

image.png

拡張機能

Herokuには拡張機能がたくさんあります。→Heroku Add-ons
この拡張機能を使って稼働するスケジュールの設定ができたりと幅広い機能を拡張することができます。
が、すべてクレジットカード情報が必要なので、私は使ってません。
おいおい使っていきたいところ。

Heroku設定

ログイン

まずはここから会員登録(Sign Up)をしてログインしましょう。

アプリケーション作成

ログインできたら、DashboardのNewボタンから新しいアプリケーションを作成します。

image.png

App nameにBotの名前を入力します。
他はデフォルトで大丈夫です。

image.png

作成すると、下のような感じでサーバーにプログラムをpushするまでのコマンドを親切に教えてくれます。
が、この説明は後ほど

image.png

続いてSettingにて環境変数と、言語の設定をします。

環境変数設定場所
image.png
サーバーにpushするので、API_TOKEN等見られたら困る個人情報は、
このように環境変数に設定しておくと便利です。

言語設定場所
image.png
image.png

Heroku設定ファイル作成

今回3つファイルを追加します。
image.png

各々のファイルの中身は以下の通りです。

Procfileには拡張子をつけない点に注意

Procfile
pbot: python run.py

Herokuでデプロイ時に実行するプロセスの定義を記入します。
pbot→起動するときに呼びます(プロセス名の定義)。任意の文字でOK。
python run.py→コマンドプロンプトでbotを起動するときにいつもたたいてるやつ。

requirements.txt
beautifulsoup4==4.6.0
certifi==2018.4.16
chardet==3.0.4
idna==2.6
Pillow==5.0.0
pyocr==0.5.1
requests==2.18.4
six==1.11.0
slackbot==0.5.1
slacker==0.9.60
urllib3==1.22
websocket-client==0.46.0
wincertstore==0.2

上記のは私の例です。Pythonの依存ライブラリの定義を書きます。
以下のコマンドを打つと自動生成。
pip freeze > requirements.txt

runtime.txt
python-3.6.4

自信のpythonのバージョンを記入。

push

まずは、Heroku Cliをインストールします。
インストールできたら、先ほどアプリを作成した際に表示されたDeployページにかかれたコマンドを順番に打っていきます。

Heroku login

自分のメールアドレスとPWを入力

リポジトリの作成

$ cd my-project/
$ git init
$ heroku git:remote -a Bot名


作成したPGをPush

$ git add .
$ git commit -am "make it better"
$ git push heroku master

最後は

heroku ps:scale pbot=1

これで起動します。

常駐化

image.png

普段会社にいる時間しか動かしてないので、PM10:00はこれまで稼働してませんでした。
が、夜も動いています。

やってみて

本当は普段Azure使ってるのでAzureでやりたかったのですが、断念しました。
が、Herokuでも拡張機能がたくさんあるのでこちらのPaaSも今後使いたいなと思いました。
コマンドをうつ手間がなくなって本当に楽です。

参考