Slack Bot開発入門【第2回】Google Colabで作るソケットモード対応おうむ返しBot

## シリーズ紹介
この記事は、 **Slack Bot開発入門シリーズ（全3回）** の第2回です。Slackのソケットモードを活用し、Google Colabを使って手軽にBotを開発する方法をステップごとに解説します。シリーズの各回の内容は以下の通りです。

- **第1回:** [ソケットモード対応のSlackアプリの作成と基本設定](https://qiita.com/sprout/items/dc52001e971cb00fbb25)
- **第2回:** Google Colabを使ったおうむ返しBotの実装方法（本記事）
- **第3回:** Geminiを搭載したチャットボットの開発

第2回では、Google Colabを利用してソケットモード対応のおうむ返しBotを実装し、Slack上で動作確認する方法を解説します。

---

## 前提条件
この記事を進める前に、以下が準備できていることを確認してください。

- **Slackアプリの作成とソケットモードの設定が完了していること**  
  （未完了の場合は、第1回の記事を参照してください）
- **Googleアカウントを持っていること**  
  （Google Colabを使用するため）

---

## 1. Google Colabのセットアップ

### 1.1 新しいノートブックの作成
1. [Google Colab](https://colab.research.google.com/)にアクセスし、新しいノートブックを作成します

### 1.2 環境変数の設定
Slack APIトークンをGoogle Colab上で安全に使用するため、環境変数を設定します。
1. 左サイドメニューから **「鍵アイコン（シークレット）」**　をクリックします
2. **「新しいシークレットを追加」** をクリックして、以下のキーと値を入力します
   - **キー:** `SLACK_BOT_TOKEN`  
     **値:** `xoxb-あなたのBotToken`
   
   - **キー:** `SLACK_APP_TOKEN`  
     **値:** `xapp-あなたのAppToken`

![スクリーンショット 2025-01-29 22.28.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/0ae515f9-297f-670c-52a4-baacf69d7d55.png)
![スクリーンショット 2025-01-29 22.31.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/a77ba6c6-150f-342e-58ab-668f25b99a86.png)
![スクリーンショット 2025-01-29 22.34.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/f9219cf7-d763-ce1d-83f7-23a972eb3450.png)

### 1.3 必要なライブラリのインストール
`slack_bolt`ライブラリをインストールします。
`slack_bolt`は、Slackアプリケーションを簡単に構築するためのPythonフレームワークです。

```bash
!pip install slack_bolt
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/e8aef83e-72b8-252c-c6d1-517c7bef8c3c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/887514e4-2ad2-22f6-b026-926ad131889d.png)

---

## 2. おうむ返しBotの実装

### 2.1 コードの記載
以下のコードをGoogle Colabに記載して実行します。

```python
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
from google.colab import userdata

# Slackアプリを初期化
app = App(token=userdata.get("SLACK_BOT_TOKEN"))

# メンションイベントをキャッチしてオウム返し
@app.event("app_mention")
def echo_message(event, say):
    say(event["text"])

# ソケットモードでアプリを起動
if __name__ == "__main__":
    SocketModeHandler(app, userdata.get("SLACK_APP_TOKEN")).start()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/d0f8db3a-d438-8648-c194-013f789eef80.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/e2616200-dbc4-ea93-df82-1b03b376193a.png)

### 2.2 コードの説明
- シークレットキーには以下のコードでアクセスできます
```bash
from google.colab import userdata
userdata.get('secretName')
```
- `App`: Slackアプリを初期化
- `@app.event("app_mention")`: メンションイベントを検知して応答
- `say(event["text"])`: 受け取ったメッセージをそのまま返す
- `SocketModeHandler`: ソケットモードを使用してアプリを実行

#### eventの中身について
`event`はSlackから送信されるイベントデータで、メンションやメッセージに関する情報が含まれています。主なフィールドは以下の通りです。

| フィールド | 説明 |
|------------|------|
| `type`     | イベントの種類（例: `app_mention`） |
| `user`     | メッセージを送信したユーザーのID |
| `text`     | メッセージの本文 |
| `ts`       | メッセージのタイムスタンプ |
| `channel`  | メッセージが投稿されたチャンネルのID |

---

## 4. 動作確認

SlackでBotをメンションして、正しくオウム返しされるか確認します。

1. SlackでBotが参加しているチャンネルにメンションします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/1e5ab0e3-a260-e0c5-ce06-5a21287a3393.png)
2. メッセージがそのまま返答されれば成功です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/17894b79-c216-a6c1-1f1c-e6b7b7bce0db.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/19956a76-e192-f90f-bed3-e781e08bd249.png)

## 5. 実行の停止

Botの実行を停止するには、Google Colabの停止ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3885493/e81fc753-5e91-64e8-e4b2-0cc50afdb635.png)

## おわりに
これでGoogle Colabを利用したソケットモード対応のおうむ返しBotの実装が完了しました。次回は、Slack BotにGeminiを搭載する方法を解説します。