初心者がPythonでSlackbotを作ってみた！2 〜Slackbot起動編〜

:::note warn
この記事はプログラミングを始めて5ヶ月の初心者が書いています。間違い等あるかもしれません:bow_tone1:
:::
#目的
Slackで動くBotを作成する:robot::zap:
（Botの機能の実装に関しては次回以降）
前回の記事は[こちら](https://qiita.com/hayahaya2/items/0787225d9fa66dbcdf4f)。
#対象読者
とりあえずSlackで動くBotを作ってみたい人！

#方法
###・ 作業ディレクトリ（作業場所）の作成
 1 ターミナルでBot制作に使う新しいディレクトリを作成する。

```
$ mkdir bolt-app
$ cd bolt-app
``` 

 2 Python仮想環境を使いたい場合は、以下のコマンドを実行する。（私はしませんでしたが…:mask:）

```
$ python3 -m venv .venv
$ source .venv/bin/activate
```

###・ テキストエディターで行う準備
1. VSC（Visual Studio Code）を開き、`bolt-app` ディレクトリを開く。
![vsc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/1bff9edb-a5c6-268e-eddb-81ea74eb3426.png)
1. ファイル追加ボタンをクリックする。
![vsc２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/568c0148-478c-512b-8356-7f5818488b7e.png)
1. 「.env」ファイルと「app.py」ファイルを作成する。
※.envファイルは環境変数を指定し、app.pyはBotの中身を作成するためのファイル。
![vsc３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/594ebbf7-979a-4396-5eca-c3471475cd94.png)

###・ 「.env」ファイルに環境変数を指定する。
SLACK_BOT_TOKEN変数に「xoxb-」ではじまるボットトークンを、SLACK_APP_TOKEN変数に「xapp-」ではじまるアプリレベルトークンを代入し、SLCK_BOT_TOKENとSLACK_APP_TOKENを定義する。
![env.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/3a90ce23-8681-0109-d7e7-48aab46570a0.png)

###・ 「app.py」ファイルにBotを起動させるためのコードを書く。
1 ターミナル上で環境変数を扱うためのライブラリ `python-dotenv` をインストールする。

```
$ pip install python-dotenv
```
もしくは

```
$ pip3 install python-dotenv
```

2 環境変数を扱うためのライブラリをimportする。

```python:app.py
#環境変数を扱うためのライブラリ
import os
from dotenv import load_dotenv
```
3 「.env」で定義した環境変数を使えるようにする。

```python:app.py
#「.env」で定義した環境変数を使えるようにする。
load_dotenv()
```

ここまででこんな感じ
![app1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/901638a9-5b2f-e4b8-330f-099c789a1aee.png)

4 Botを作るのに必要な `slack_bolt` パッケージのインストールを行う。

```
$ pip install slack_bolt
```
もしくは

```
$ pip3 install slack_bolt
```

5 Botを動かすためのライブラリをimportする。

```python:app.py
#Botを動かすためのライブラリ
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
```

6 環境変数を指定し、アプリを起動させるコードを作る

:::note info
環境変数の指定の仕方： os.environ['変数名']
※os.environ.get('変数名')でもできるかも:rolling_eyes:
:::

```python:app.py
#アプリの初期化
app = App(token=os.environ['SLACK_BOT_TOKEN'])

#アプリの起動
if __name__ == '__main__':
    SocketModeHandler(app, os.environ['SLACK_APP_TOKEN']).start()
```
※何でこう書くか？は私もあまりわかっていませんので、よくわかんなくてもこう書けばアプリ（Bot）が動くんだ！と理解しておけばOKです:ok_woman_tone1:

ここまででこんな感じ
![app2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/b87eddf6-24cf-a220-b497-fdd0099e9eea.png)

###・ アプリ（Bot）を起動させてみよう！
ターミナルで、以下のコマンドを入力する。

```
$ python3 app.py
```
> :zap: Bolt app is running!

と正常にアプリ（Bot）が動作すればおしまいです！おめでとうございます:blush:

###・エラーの対処
次のような長いエラーが出てきたら…
> Failed to send a request to Slack API server
>
> urllib.error.URLError:
> urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)

私も詳しいことはわからないのですが、SSL認証がうまくいっていないらしい。
私の場合は以下のようにしたら解決しました。

:::note warn
このやり方が良いやり方なのかはよくわかりませんので注意 :warning: 
実行される場合は自己責任でお願いします:bow_tone1:
:::

1 ターミナルで、 `certifi` をインストールする。

```
$ pip install certifi
``` 
もしくは

```
$ pip3 install certifi
```

2 ターミナルで以下のコマンドを入力し、出力結果をコピーする。

```
$ python3 -m certifi
```

>  〜 site-packages/certifi/cacert.pem ←こんな感じのものが出力されるのでコピーする。

3 「.env」ファイルを開き、SSL_CERT_FILE変数に、2でコピーしたものをペースト（引用符のつけ忘れに注意）・代入し、SSL_CERT_FILEを定義する。
![error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/20c8c4bb-01b6-e87e-2c4d-39b239eab2b3.png)

これでもう1度、以下のコマンドを実行すると、

```
$ python3 app.py
```

> :zap: Bolt app is running!

と正常にアプリ（Bot）が動作するはずです！おめでとうございます:blush:

#最後に
お疲れ様でした！以上で、Botの初期設定は終わりです:grin:
次回は、Slackbotの機能部分を制作していきます:sunglasses:

#参考

https://slack.dev/bolt-python/ja-jp/tutorial/getting-started

https://pypi.org/project/certifi/

#関連
https://qiita.com/hayahaya2/items/0787225d9fa66dbcdf4f