本記事の概要
- SlackAPIにて、ワークスペースに新規Appを登録した
- ロリポップのエコノミープランに申し込んだ
- Appの設定画面から、新規コマンドを登録した
- ロリポップのサーバー上に、Slackコマンドの処理部分となるCGIスクリプトをアップロードした
新規Appの登録
Slackで自作コマンドを利用するには、まずワークスペース上にAppを登録する必要がある。
はじめに、Slackのワークスペースにログインした状態でSlack API上のCreate an appをクリックする。選択画面では“From scratch”を選択する。
次に、Appの名前を入力する。Appを追加したいワークスペースを選択したのち、“Create App”をクリックする。
ロリポップのエコノミープラン契約
Slackで自作コマンドを利用する際、(当然ではあるが)その内部処理は勝手に済まされるわけではない。そこで、コマンドの受付・実行を担うサーバーを自分で用意する必要がある。
とはいえ、コマンド実行にかかる計算量は小さいものだ。そのためだけに大掛かりなレンタルサーバーを契約する必要は全くなく、小規模なレンタルサーバーで事足りる。ここでは、ロリポップのエコノミープランを利用する。
【PR】ロリポップ!の申し込みページはこちら↓まず、ロリポップのホームページから「エコノミープラン」を選択する。
次に、初期ドメイン(ログイン時、Slackコマンド登録時に必要)およびパスワード、連絡先メールアドレスを入力する。
続いて電話番号による認証を行った後、契約情報を入力し申し込みを完了する。契約期間が36か月の場合月額99円、それ以外は月額198円となる(2023年11月現在)。
コマンドの登録
Slack APIにて、Appの設定画面左側から“Features>Slash Commands”を選択する。
次に、”Create New Command”を選択する。
続いて、コマンド名・Request URL・説明欄を入力し、“Save”をクリックする。ここでは、Request URLを「初期ドメイン/コマンド名.cgi」の形にしておく。
最後に、“Settings>Basic Information”に戻り、“Install to WorkSpace”をクリックする。
以下の権限リクエスト画面が出てきた場合「許可する」をクリックする。
上記の手順が終わると、チャンネルにAppが追加されていることがわかる。
CGIスクリプトのアップロード
ここまでの手順により、Slackのワークスペース上で自作コマンドが認識されるようになっている。
しかし現段階で実行すると“dispatch_failed”エラーが吐かれることだろう。
なぜコマンドの実行が失敗してしまうのだろうか?それは、コマンドの内部処理をまだ記述していないからである。簡潔に後の手順を説明すると、CGIスクリプトを作成し、レンタルサーバーにアップロードしなければならない。
CGIスクリプト1を作成しよう。まず、先ほど登録したロリポップのユーザーページにログインし、画面左側の「サーバーの管理・設定>ロリポップ!FTP」をクリックする。
すると、Web版FTPツール「ロリポップ!FTP」の画面が開くので「新規ファイル作成」のアイコンをクリックする。
編集画面が出てくるので、試しに以下のように入力してみよう2。
#!/usr/local/bin/python3.7
# 2023年11月現在、ロリポップエコノミープランのPythonバージョンは3.7
import cgi
# Slackコマンドで引数指定がある場合form['text']に格納されている
form = cgi.FieldStorage()
text = ''
if 'text' in form: text = form['text'].value
else: text='None'
# 出力部分
# ヘッダ
print("Content-Type: text/html; charset=utf-8");
# ヘッダと出力内容は空行で区切る
print("")
# 出力内容
print("[Test] Input: " + text)
ファイル名は「コマンド名.cgi」、文字コードはUTF-8、ファイルの属性は700とする。入力完了後、「保存する」をクリックする。
ここまでの手順で、サーバーにCGIスクリプトをアップロードできた。
Slackのワークスペース上でコマンドを入力してみると、以下のように正常に動作することがわかる。
おわりに
Slackの自作コマンドは、意外と簡単かつ安価に実装することができる。ただし、出力結果のフォーマット辺りを凝ろうとすると3もう少し込み入ったことになる。時間があれば、別記事で詳しく説明したい。