icon
icon

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と組み合わせることで様々なライブラリと連携が可能になりその可能性は無限大に広がります。

 

[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を作成して、メンションを付けてテストした画面

 

コラム

コスパとタイパ、両方結果的に良くなる良くなる学び方とは?

「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
もちろん、時間も費用もかかることは間違いありません。
ただ 結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。

コスパ・タイパ最適化の参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

  • ・困ったときに、質問や相談できる相手がいるため挫折しなかった
  • ・プロとして必要なスキルのみを深く学べたので無駄がなかった
  • ・副業案件の提供と納品までのサポートがあったので目的を達成できた

安価・短期間で広く浅く学んでも意味がありません。 本当に自分の目的が達成できるか、それが重要です。
自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に 無料相談 に参加してみませんか?

カウンセラー・現役のプロへ、何でも気軽に無料相談可能。 30分か60分お好きな時間が選べて、かつ3回まで すべて無料で ご利用できます。
無理な勧誘は一切ない ので、お気軽にご参加ください。

今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

まとめ

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

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

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

 

執筆してくれたメンター

菅繕久(すがよしひこ)

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

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

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

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

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

 

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

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

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する