PythonでSlackのBotを作成する方法を現役エンジニアが解説【初心者向け】

初心者向けにPythonでSlackのBotを作成する方法について現役エンジニアが解説しています。BotとはRobotの略で主に作業を自動化するプログラムの総称になります。slackbotライブラリとPythonを組み合わせてBotを作成してみます。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

PythonでSlackのBotを作成する方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して、初心者向けに解説します。

 

Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まるでしょう。

 

なお本記事は、TechAcademyのオンラインブートキャンプ、Python講座の内容をもとに紹介しています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PythonでSlackのBotを作成する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

Botとは

Botとは、Robotの略で主に作業を自動化するプログラムの総称になります。

主にユーザーからの問いかけに対してプログラムが自動で返信するようなものを指し、身近なBotとしてはiPhoneに搭載されているSiriなどがあります。

 

slackbotライブラリでできること

slackbotライブラリでは、メンションの特定の言葉に反応したり、チャンネルに投稿された言葉に反応して自動メッセージ送信やコマンドを実行することが可能です。

Pythonと組み合わせることで様々なライブラリと連携が可能になりその可能性は無限大に広がります。

 

[PR] Pythonで挫折しない学習方法を動画で公開中

slackbotライブラリをインストールしてみよう

slackbotライブラリは、pipでインストールすることができます。

下記コマンドをターミナルに入力して、slackbotライブラリのインストールが可能です。

pip3 install slackbot

 

シンプルなslackbotを作成してみよう

ここでは、シンプルなSlackBotの作成手順について5つのステップに分けて紹介します。

  1. slack上でBotユーザーを作成
  2. Botをユーザーとして認識させる
  3. Botの初期設定を行う
  4. 簡単なBotをSlackbotで作成
  5. Botを起動して動作を確認

 

1.slackbotを作成する前に、Slack上のBotユーザーを作成しましょう。

こちらから開いたページの”Start Building”をクリックして、アプリ登録ページに移動させます。

slackbotを作成する前に必要なbotユーザーの作成サイト

次の画面で”App Name”と”Development Slack Workspace”を設定して”Create App”をクリックします。

[App Name]

Bot名(チャンネルで表示されるBot名ではないです)

[Development Slack Workspace]

Botを追加するワークスペース

※ワークスペースがない場合は新規でワークスペースを作成してください。

slackbotを作成するために必要なbotユーザーの作成画面

2.作成したBotに権限を与えてユーザーとして認識させましょう。

Botをユーザとして認識させるためには、Botに権限を設定しなければなりません。

以下の画像に示す「permission scope」をクリックします。

slackbotを作成するために必要な権限の選択画面

先ほど作成したBotの権限を設定していきましょう。(今回はAdmin権限で作成します)

以下画像に示すScopes内の”Add an OAuth Scope”をクリックし、権限の設定をしていきます。

slackbotを作成するために必要な権限の選択画面
以下の画像を参考にadminを選択してBotの権限がAdminに設定可能されます。

slackbotを作成するために必要な権限の設定画面

slackbotを作成するために必要な権限でAdminを設定した画面

最初の画面に戻ると”Install App to Workspace”が有効になっているので、クリックしてBotをワークスペースにインストールしましょう。

slackbotを作成するためにワークスペースにBotをインストールする画面

“Install App to Workspace”をクリックすると、アクセス権限リクエストの画面が表示されるので許可するボタンをクリックしてください。

slackbotを作成するために必要な権限のリクエスト画面

次にBot Userの設定画面より”Add Bot User”をクリックします。

slackbotを作成するためのBot Userの設定画面

“Always Show My Bot as Online”をオンにして”Save Changes”をクリックしましょう。

slackbotを作成するためのBot Userの設定の完了

これでBotをユーザーとして、認識しチャンネルに招待できるようになるでしょう。

Botをユーザーとして認識しチャンネルに招待できるようになった画面

 

3.slackbotの初期設定を行います。

任意の場所に”slack_bot”を作成し、下記のようにファイルを配置していきましょう。

slack_bot # プログラムをまとめるディレクトリ。名前はなんでも良い
├─ run.py # このプログラムを実行することで、ボットを起動する
├─ slackbot_settings.py # botに関する設定を書くファイル
└─ plugins # botの機能はこのディレクトリに追加する
├─ __init__.py # モジュールを示すためのファイル。空で良い
└─ my_mention.py # 機能を各ファイル。任意の名前で良い

run.pyとslackbot_settings.pyにそれぞれ以下のコードを入力します。

run.py
# coding: utf-8

from slackbot.bot import Bot

def main():
  bot = Bot()
  bot.run()

if __name__ == "__main__":
  print('start slackbot')
  main()
slackbot_settings.py
# coding: utf-8

# SlackのAPIを利用するためのトークン
# Botの設定ページから「OAuth & Permissions」のページに遷移し、
# 「Bot User OAuth Access Token」をコピーして貼り付ける
API_TOKEN = "xoxb-888180149810-890755151249-gZnaeoo7NwxaHWy8tzCyVQa1"

# このbot宛のメッセージで、どの応答にも当てはまらない場合の応答文字列
DEFAULT_REPLY = "I dont't understand you."

# プラグインスクリプトを置いてあるサブディレクトリ名のリスト
PLUGINS = ['plugins']

これでslackbotを作成する環境が準備できました。

早速、作成したBotを起動してみましょう。

ターミナルで先ほど作成した”slackbot”フォルダへ 移動し、以下のコマンドでBotを起動します。

python run.py

Slack上でBotへのダイレクトメッセージで何か投稿すると、デフォルトの”I dont’t understand you.”が返ってくるでしょう。

slackbotのslack上でBotを起動してダイレクトメッセージを送信した画面

botの参加しているチャンネルの場合は、メンションを付ける必要があります。

slackbotでメンションを付けて投稿した画面

 

4.メンションをつけて時間を尋ねられたら現在の日時を返すBotを作成する

作成した”my mention.py”に以下のコードを入力します。

my mention.py
# coding: utf-8
from slackbot.bot import respond_to # @botname: で反応するデコーダ
from slackbot.bot import listen_to # チャネル内発言で反応するデコーダ
from slackbot.bot import default_reply # 該当する応答がない場合に反応するデコーダ
import datetime
@respond_to('今何時?')
def mention_func(message):
  dt_now = datetime.datetime.now() #現在の日時を取得
  message.reply(dt_now.strftime('%H時%M分') + 'だよ!') # メンションをつけて現在の時刻を投稿
@listen_to('今何時?')
def listen_func(message):
  message.send('時間を知りのですか?') # ただの投稿
  message.reply('メンションをつけて直接聞いてください') # メンション

 

解説

コードの解説をしていきます。

まず、slackbotではメンションをつけて投稿された場合と通常の投稿の場合で動作を分けることができます。

以下のコマンドでそれぞれ設定可能です。

 

# メンションをつけて投稿された指定のキーワードに反応する場合
@respond_to("キーワード")

# 全ての投稿で指定のキーワードに反応する場合
@listen_to("キーワード")

コード8-11行目では、@respond_to(“今何時?”)を使用してメンションをつけて”今何時?”と投稿された場合の処理を設定しています。

今回は現在の時刻を自動返信するのでdatetimeライブラリを使用して現在時刻を返信します。

コード13-16行目では、@listen_to(“今何時?”)でメンションをつけずに”今何時?”と投稿された場合の処理を設定しています。

ここで下記2つの文法に注目してみましょう。

massage.send('')
massage.replay('')

maasage.sendはただの投稿、massage.replayは相手へメンションをつけて返信する形での投稿となります。

 

5.作成したBotを起動して、実際に動作を確認する

作成した設定を反映させたBotを起動して動作を確認してみましょう。

ターミナルで”slackbot”フォルダへ 移動し、以下のコマンドでBotを起動します。

python run.py

作成したBotが参加しているチャンネル上でBotへメンションをつけた場合とつけない場合の投稿で、それぞれ”今何時?”と投稿すると以下のようにBotが返信することが確認できます。

[メンションをつけない場合]

slack上でBotを作成して、メンションを付けずにテストした画面

[メンションをつけた場合]

slack上でBotを作成して、メンションを付けてテストした画面

 

まとめ

今回は、PythonでSlackのBotを作成する方法について紹介しました。

Pythonには豊富なライブラリが存在しています。

作成したBotに様々なライブラリを組み合わせることで、独自のBotを作成する事ができますので是非挑戦してみてください。

 

執筆してくれたメンター

菅繕久(すがよしひこ)

現在はフリーランスのエンジニアをしていてプログラミング歴は8年目になります。

普段は Python、FileMaker等を使って様々な業務で活用できるIoTプロダクトRPAツールを作成しています。

開発実績としては、業務自動化ツール(在庫管理・発注・ファイル操作 etc)、電子カルテシステム、ロボット用プログラムなどがあります。

TechAcademyではPythonコースを担当しております。

 

大石ゆかり

PythonでSlackのBotを作成する方法がよく分かったので良かったです!

田島悠介

ゆかりちゃん、これからも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間で、Pythonを使った人工知能(AI)や機械学習の基礎を習得できる、オンラインブートキャンプを開催しています。

また、現役エンジニアから学べる無料体験も実施しているので、参加してみてください。