GMO DevelopersDay
GMO DevelopersDay
2024.11.29Fri - 11.30Sat YouTube Live
イベント開催まであと6

【Slackボット】hubotからslack Boltへの移行をしてみる

本記事では、Slackのボット機能について紹介します。
ボットはSlackへの通知やファイル投稿、メンバー管理などができ、業務効率化に役立ちます。
最新のフレームワークであるSlack Boltを導入することで、Pythonでの開発が可能であり、
サポート/ドキュメントも充実しています。
具体的な導入方法については、下記内容をご確認ください。

ボット機能使ってますか?

お久しぶりです。中村です。
皆さんはSlackでボット機能使ってますか?

BOT機能は、一般ユーザーが発言したかのようにBOTがSlackへ通知を行ってくれる機能です。
通知を送る以外にも許可する権限によってはファイル投稿やメンバー管理なども行えます。

こちらを用いることで、時間がかかるタスクの開始/終了の通知が出来たり、
定常業務の効率化を行うことが出来ます。

数年前に作ったhubot

チーム内では数年前にhubotという、botの作成/動作のフレームワークを導入しました。
こちらはGitHub社開発したもので、Slack以外のチャットツールにも対応しています。

◆hubot公式リンク
https://hubot.github.com/

こちらを導入することにより、よく利用する情報についてはSlackで確認が完結するようにしています。
例えばですが、Slack内の特定チャンネルで【check ホスト名】のような発言を行うと、
BOT側でそのホストに関連する情報の取得を行い、まとめて通知するといったことを行っています。

そろそろ移行しておきたい

そんなhubot環境を作ったのですが、
hubotから別のフレームワークへの移行を考えています。
理由は何個かあるのですが、大きな理由は下記です。

・CoffeeScriptベースであること(チーム内に慣れているメンバーが少ない)
・Hubot本体の開発があまり活発ではない(2019/04/17リリースの3.3.2が最新)

今回は移行先として【Slack Bolt】を使用します。

そもそもSlack Boltとは

Slack公式が提供しているSlackアプリ開発フレームワークです。
現在下記のSDKがサポートされています。

JavaScript
・java
・python

◆Slack 公式ページ
https://api.slack.com/lang/ja-jp

導入によるメリット

今回の導入によるメリットは下記です。
ソースコードの管理を特定個人のみに依存するのは健全ではないので、
チーム内全体で管理を行いたいのが狙いです。

・pythonベースでの開発が可能であること(チーム内になれているメンバーが多い)
・Slack公式開発のため、サポート/ドキュメントが豊富

実際にやってみましょう

実際に移行をしてみます。
作業時は下記の入門ガイドを参照しています

◆Slack Bolt(python)入門ガイド
https://slack.dev/bolt-python/ja-jp/tutorial/getting-started

新しいSlackアプリの作成

まずは下記リンクからSlackアプリの作成を行います。
https://api.slack.com/apps/new

文章でも記載しますが、詳細はgif画像を御覧ください。

・[Create New App] をクリック
・[From scratch] をクリック
・アプリケーション名を入力
・どのワークスペースに追加を行うかを選択

App-Level Tokenの発行

Boltの実行に必要な【 App-Level Token 】の発行を行います。
【xapp-】から始まる文字列が App-Level Token になります
こちらは後ほど使用するのでどこかにメモをしておいてください。

ソケットモードの有効化

今回はお手軽にテストをしたいため、ソケットモードを有効にします。
本来はイベントが起こった際にHTTPリクエスト先を設定する必要がありますが、
ソケットモードを有効にすることで、設定不要で機能検証を行うことが出来ます。

もっと詳しく知りたい方は下記の公式ドキュメントを御覧ください。
https://api.slack.com/apis/connections/socket

イベントサブスクリプションの有効化

実行中のスクリプトにリクエストが来るようにイベントサブスクリプションを有効にします。
今回は下記3つのイベントに反応できるように追加を行います。

message.channelspublicチャンネルに新規の発言があった時
message.groups ……privateチャンネルに新規の発言があった時
app_mention
………….bot宛にメンションの発言があった時

Slackアプリへチャンネル書込権限の付与

現状だとチャンネルに書き込む権限が付与されていないので追加を行います。

chat:write …自分の参加済みチャンネルに発言する

管理者へインストールリクエストを送信

Workspaceの管理者が自分でない場合は、管理者へのインストールリクエストが必要になります。
インストールリクエストは下記のように申請できます。

インストールリクエストが承認されると、WorkspaceにBOTが追加され、
また【OAuth Token】が発行されます(※OAuth & Permissionsページ内で確認可能です)

【xoxb-】から始まる文字列が OAuth Token になります
こちらは後ほど使用するのでどこかにメモをしておいてください。

BOTをチャンネルへの追加

Slackからチャンネル設定を開き、
インテグレーションタブからアプリを追加します。

Boltの実行(python)

下記のコードを実行します。
実行中にチャンネル内で冒頭に【hi】という発言あった場合にBOTが返事をしてくれます。

これで大まかな形ができました。
後はこちらの形に沿って、hubotで動いていた処理を再現すれば移行は完了です。

#必要なライブラリをインポート
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

#[OAuth Token] と [App-Level Token]を記載する
SLACK_BOT_TOKEN="xoxb-****************"
SLACK_APP_TOKEN="xapp-****************************************"

#[OAuth Token]読み込み
app = App(token=SLACK_BOT_TOKEN)

#反応する発言内容を記載する
@app.message("^hi")
def message_hello(message, say):
#発言のあったチャンネルへメッセージを送信する
say(f"hello <@{message['user']}>!")

#アプリの起動
if name == "main":
SocketModeHandler(app,SLACK_APP_TOKEN).start()

所感

Slackアプリの設定が手間ではありますが、それさえ終われば移行は楽にできそうです。
反応が返ってくるためには、コードを常に動かしておく必要があるのでVPSなどの環境があると非常に便利です。

自分のPCを24時間使うのはちょっと…と思う方はConoHa VPSを使っていただければ幸いです!

画像に alt 属性が指定されていません。ファイル名: og.png


ブログの著者欄

中村 槙吾

GMOインターネットグループ株式会社

2017年よりGMOインターネットグループにて運用保守業務に従事。 H/W保守や障害対応などの傍らで、運用効率化の取り組みを行う。

採用情報

関連記事

KEYWORD

採用情報

SNS FOLLOW

GMOインターネットグループのSNSをフォローして最新情報をチェック