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](https://qiita-image-store.s3.amazonaws.com/0/201826/43d82d67-2524-855a-4ec7-822b86a31409.png)

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

# Heroku設定
## ログイン
まずは[ここ](https://id.heroku.com/login)から会員登録(Sign Up)をしてログインしましょう。

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/201826/e8dd2004-52e5-5a8f-5908-10b38a0e8e9a.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/201826/6ad83009-b5e4-d74f-0838-6d22db49d8ed.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/201826/66aca56a-4e51-b770-89b7-e640f2aae1a5.png)

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

環境変数設定場所
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201826/6b712267-c75f-c421-d904-115cb2c92479.png)
サーバーにpushするので、API_TOKEN等見られたら困る個人情報は、
このように環境変数に設定しておくと便利です。

言語設定場所
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201826/beec27fe-72d8-3937-326b-dca401ab3adb.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201826/aba6ffc7-16c4-6803-dc23-688d893399d6.png)

## Heroku設定ファイル作成
今回3つファイルを追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201826/555079d4-73a5-f33b-1288-bf3f427b3d2e.png)

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

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

```:Procfile
pbot: python run.py
```

Herokuでデプロイ時に実行するプロセスの定義を記入します。
pbot→起動するときに呼びます(プロセス名の定義)。任意の文字でＯＫ。
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](https://qiita-image-store.s3.amazonaws.com/0/201826/c3aee1a4-0e68-3c60-1ed2-1de78fcedfdd.png)

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


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

# 参考

- [【5分でわかる】herokuとは？概要や特徴をわかりやすく解説](https://www.sejuku.net/blog/7858)
- [【HEROKUとは】これを読めばOK!デプロイの仕方まで徹底解説](https://tech-camp.in/note/technology/16108/)
- [Python × Herokuで作る 雑談slack bot](https://www.slideshare.net/dcubeio/python-heroku-slack-bot)