皆さんはSlackを使用していますか?Slackは、チーム内のコミュニケーションを円滑にするためのビジネスチャットツールです。リアルタイムのメッセージの送信、ファイル共有、そしてさまざまなサービスとの連携が可能なサービスで、ビジネスの世界でもよく使用されるツールなのではないでしょうか。ただのツールとして使用するだけではもったいないような可能性を秘めたツールです。今回はPythonを使ってSlackにメッセージを送信や取得をする方法について解説してみようと思います。この機能は無料ユーザーでも使用可能です。
【目次】
前提条件
今回はSlackを使用するので、ユーザー登録に関しては事前に行ってください。また、Pythonのインストール方法や基本的な知識があることが前提となります。今回使用するPythonのバージョンは3.10を想定しています。実行時にpython3やpip3としている場合には読み替えてください。
開発の事前準備
1)仮想環境を準備
ライブラリをインストールをするので、開発用の仮想環境を準備して、切り替えます。
$ python -m venv slackbot
$ source ./slackbot/bin/activate
(slackbot)$
これでslackbotという名前の仮想環境に切り替えました。プロンプトの前に仮想環境名が入っていれば成功です。もし、開発作業を終えて仮想環境を終了させるには以下のコマンドを実行してください。
(slackbot)$ deactivate $
2)ライブラリのインストール
Pythonからslackの機能を使用するライブラリをインストールします。更に今回は環境変数の設定を.envファイルに格納して使用するpython-dotenvもインストールしておきます。
(slack)$ pip install slack_sdk (slack)$ pip install python-dotenv
これで使用するライブラリのインストールは完了しました。
※以前はslackclientというライブラリがありましたが、slack-sdk の旧バージョンにあたるため、こちらを使用してください。
3)Slackの設定
開発する準備ができたので、これからはSlack側の設定を行っていきます。大きく分けて以下の2つの作業があります。
- Slackアプリの作成
- APIトークンの取得
①Slackアプリの作成
まず、Slackアプリの作成を行います。WebブラウザでSlack API のアプリケーション管理ページにアクセスします。
Slack API: Applications | Slack
【Create an App】ボタンをクリックします。
Create an appのダイアログが表示され【From scratch】をクリックします。
Name app & choose workspacenoダイアログが表示され、【AppName】(アプリ名)を入力し、【Pick a workspace to develop your app in】には使用するワークスペースを選択します。このプルダウンに表示されない場合には、あらためてワークスペースにログインしてください。今回は【AppName】にはsample_bot、【ワークスペース】はSlackのユーザー名と同じものueponxとしました。作成後はワークスペース設定は変更できないので、変更する場合には削除して、再作成を行ってください。
入力が終わったら、【Create App】ボタンをクリックします。
クリックするとアプリの設定画面に切り替わります。
画面左側のメニューから【OAuth & Permissions】を選択します。
【Scopes】の項目までスクロールして、【Bot Token Scopes】の項目の【Add an OAuth Scope】ボタンをクリックします。ここで、アプリに必要な権限を付与します。このアプリではワークスペースへの書き込みを行うのでchat:write(メッセージの送信)を設定します。
つづいて画面左側のメニューから【App Home】を選択します。
【App Home】から【Your App’s Presence in Slack】の項目の【Edit】ボタンをクリックして、【Display Name】と【Default Username】を設定します。この値がアプリ(bot)の名前となります。設定したら【Save】ボタンをクリックして保存します。
再度、画面左側のメニューから【OAuth & Permissions】を選択します。【OAuth Tokens for Your Workspace】の項目にある【Install to Workspace】ボタンをクリックし、アプリをインストールします。
②APIトークンの取得
ボタンをクリックすると、確認画面が表示されるので【許可する】ボタンをクリックします。
クリック後に【OAuth Tokens for Your Workspace】の項目に【Bot User OAuth Token】としてAPIトークン(xoxbから始まる文字列)が表示されます。この情報はSlackへアクセスする際に必要となる情報なのでメモを取っておきます。また、公開しないように注意してください。
これでSlackアプリの設定も完了しました。
あとはSlackの画面で書き込みを行うチャンネルにアプリ(bot)を追加します。
あとはPythonのコードを書いてSlackの書き込み処理を実装します。
Pythonコードの作成
メッセージの書き込みを行うプログラム
今回はAPIキーや書き込み指定するチャンネルは.envファイルに格納しておき、実行時に環境変数として参照する仕組みにしています。ここでいうチャンネルIDとは#generalといった#から始まる文字列ではなく、チャンネル詳細から参照できる11桁の文字列になります。チャンネルを右クリックして表示される【チャンネル詳細を表示する】から確認してください。
ファイルは以下のような配置にしてください。
$ tree -a . ├── .env └── notify_slack.py 0 directories, 2 files
.envファイルの内容
# 以下の値は例のため、必ず変更してください # SlackのAPIトークン SLACK_API_BOT_TOKEN=xoxb-your-slack-bot-token # メッセージを送信するSlackチャンネルID SLACK_CHANNEL=SLACK_CHANNEL=C0123456789
notify_slack.pyの内容
import os from slack_sdk import WebClient from slack_sdk.errors import SlackApiError from dotenv import load_dotenv # .envファイルから環境変数をロード load_dotenv(verbose=True) # Slack APIトークンとチャンネル名をから取得 slack_token = os.getenv("SLACK_API_BOT_TOKEN") slack_channel = os.getenv("SLACK_CHANNEL") # Slackクライアントを初期化 client = WebClient(token=slack_token) def send_slack_message(): try: # Slackに送信するメッセージの内容 blocks = [ { "type": "section", "text": { "type": "mrkdwn", "text": "Pythonからの書き込み! <http://example.com|リンク> :bow:", }, }, ] # メッセージをSlackに送信 response = client.chat_postMessage( channel=slack_channel, text="pythonからSlackへ通知", blocks=blocks ) except SlackApiError as e: # Slack APIエラーが発生した場合の処理 # 例えば、'invalid_auth' や 'channel_not_found' など assert False, f"Error sending message: {e.response['error']}" def main(): # Slackへの書き込み send_slack_message() if __name__ == "__main__": main()
このプログラムを実行することで、PythonのコードからSlackのチャンネルに書き込みを行うことができます。
実行結果
以下のように実行を行います。
$ python notify_slack.py
実行後にSlackのチャンネルに以下のようにメッセージが追加されます。
書き込みはテキストのほかリンクや絵文字を指定可能です。
画像のリンクを使用して画像を貼り付けるプログラム
メッセージの書き込みはテキストだけでなく、画像のURLを指定して貼り付けることもできます。その場合にはソースコード内の関数send_slack_message()のblocksのデータを以下のように変更します。
# Slackに画像を送信する blocks = [ { "type": "image", "title": { "type": "plain_text", "text": "アイコン画像です :wave:" }, "block_id": "icon01", "image_url": "https://i.gyazo.com/b0a6ec763d95affc7cdf0a712d10d462.png", "alt_text": "サンプル画像." } ]
応用例
今回はSlackのチャンネルへの書き込み機能をとりあげましたが、使用しているslack_sdkライブラリを使えば、チャンネルの情報を取得を行うといった機能もあります。Botの機能の権限追加はScope画面から行えます。
例えば、あるチャンネルの書き込みを抽出して自動的にまとめたり、バックアップすることや、定期的にニュースサイトのRSSを参照してチャンネルに書き込みをするといった処理も可能になります。
おわりに
Slackは単なるチャットツールではなく、うまく使用することで組織のパワーアップさせることのできるコラボレーションツールにもなります。みなさんも、活用をしてみてはいかがでしょうか。
参考リンク
Slackのページ…Slack はニーズに応えるプロダクティビティプラットフォーム
Slack Appsのページ…Slack API: Applications | Slack
Slack_SDKのドキュメントページ…Python Slack SDK | Python Slack SDK
chat.postMessageの説明ページ…chat.postMessage method | Slack
Reference: blocksの説明ページ…Reference: blocks | Slack
(文:うえぽん)
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら