PythonでSlackのBotを作成する方法を現役エンジニアが解説【初心者向け】
初心者向けにPythonでSlackのBotを作成する方法について現役エンジニアが解説しています。BotとはRobotの略で主に作業を自動化するプログラムの総称になります。slackbotライブラリとPythonを組み合わせてBotを作成してみます。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
PythonでSlackのBotを作成する方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して、初心者向けに解説します。
Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まるでしょう。
なお本記事は、TechAcademyのオンラインブートキャンプ、Python講座の内容をもとに紹介しています。
今回は、Pythonに関する内容だね!
どういう内容でしょうか?
PythonでSlackのBotを作成する方法について詳しく説明していくね!
お願いします!
Botとは
Botとは、Robotの略で主に作業を自動化するプログラムの総称になります。
主にユーザーからの問いかけに対してプログラムが自動で返信するようなものを指し、身近なBotとしてはiPhoneに搭載されているSiriなどがあります。
slackbotライブラリでできること
slackbotライブラリでは、メンションの特定の言葉に反応したり、チャンネルに投稿された言葉に反応して自動メッセージ送信やコマンドを実行することが可能です。
Pythonと組み合わせることで様々なライブラリと連携が可能になりその可能性は無限大に広がります。
slackbotライブラリをインストールしてみよう
slackbotライブラリは、pipでインストールすることができます。
下記コマンドをターミナルに入力して、slackbotライブラリのインストールが可能です。
pip3 install slackbot
シンプルなslackbotを作成してみよう
ここでは、シンプルなSlackBotの作成手順について5つのステップに分けて紹介します。
- slack上でBotユーザーを作成
- Botをユーザーとして認識させる
- Botの初期設定を行う
- 簡単なBotをSlackbotで作成
- Botを起動して動作を確認
1.slackbotを作成する前に、Slack上のBotユーザーを作成しましょう。
こちらから開いたページの”Start Building”をクリックして、アプリ登録ページに移動させます。
次の画面で”App Name”と”Development Slack Workspace”を設定して”Create App”をクリックします。
[App Name]
Bot名(チャンネルで表示されるBot名ではないです)
[Development Slack Workspace]
Botを追加するワークスペース
※ワークスペースがない場合は新規でワークスペースを作成してください。
2.作成したBotに権限を与えてユーザーとして認識させましょう。
Botをユーザとして認識させるためには、Botに権限を設定しなければなりません。
以下の画像に示す「permission scope」をクリックします。
先ほど作成したBotの権限を設定していきましょう。(今回はAdmin権限で作成します)
以下画像に示すScopes内の”Add an OAuth Scope”をクリックし、権限の設定をしていきます。
以下の画像を参考にadminを選択してBotの権限がAdminに設定可能されます。
最初の画面に戻ると”Install App to Workspace”が有効になっているので、クリックしてBotをワークスペースにインストールしましょう。
“Install App to Workspace”をクリックすると、アクセス権限リクエストの画面が表示されるので許可するボタンをクリックしてください。
次にBot Userの設定画面より”Add Bot User”をクリックします。
“Always Show My Bot as Online”をオンにして”Save Changes”をクリックしましょう。
これで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.”が返ってくるでしょう。
botの参加しているチャンネルの場合は、メンションを付ける必要があります。
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が返信することが確認できます。
[メンションをつけない場合]
[メンションをつけた場合]
まとめ
今回は、PythonでSlackのBotを作成する方法について紹介しました。
Pythonには豊富なライブラリが存在しています。
作成したBotに様々なライブラリを組み合わせることで、独自のBotを作成する事ができますので是非挑戦してみてください。
執筆してくれたメンター
菅繕久(すがよしひこ)
現在はフリーランスのエンジニアをしていてプログラミング歴は8年目になります。 普段は Python、FileMaker等を使って様々な業務で活用できるIoTプロダクトRPAツールを作成しています。 開発実績としては、業務自動化ツール(在庫管理・発注・ファイル操作 etc)、電子カルテシステム、ロボット用プログラムなどがあります。 TechAcademyではPythonコースを担当しております。 |
PythonでSlackのBotを作成する方法がよく分かったので良かったです!
ゆかりちゃん、これからも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でも、Pythonを使った人工知能(AI)や機械学習の基礎を習得できる、オンラインブートキャンプを開催しています。
また、現役エンジニアから学べる無料体験も実施しているので、参加してみてください。