Slack App を Socket Mode でつくって Heroku で動かす
2021-01-31 時点での記録。
ごあいさつ
Slack App の Socket Mode ってやつに興味があって試してみた。
- Intro to Socket Mode | Slack
- Socket to me. Build custom Slack integrations… | by Jim Ray | Slack Platform Blog | Jan, 2021 | Medium
- Slack ソケットモードの最も簡単な始め方 - Qiita
ほいで、ちょっと欲張る気持ちがあって、同じように興味があった Slack Workflow に自作の Step を追加するのも試してみた。二兎を追うが二兎とも得るぞ!
- Workflow Builder: Steps from apps | Slack
- A step in the right direction. Introducing a new way to extend your… | by Adam Marinelli | Slack Platform Blog | Medium
- Slackのworkflowでgithubにissueを作成する独自stepを追加する
できあがったものは Heroku で動かせるとぼくにとっては楽なので、開発環境である手元の macOS と本番環境となる Heroku の両方でいい感じに動くアプリケーションを目指して作業を進めた。調べてみると、Slack が提供している Bolt という JavaScript のフレームワークを使うのが簡単そうだったので、ついでに Bolt の使い方も覚えることにした。三兎を追って三兎を得る作戦。心配。
できあがったサンプル
「GitHub の指定のリポジトリに Issue を立てる」という Slack Workflow の Step を実装した。 https://github.com/june29/slack-workflow-creating-github-issue-sample
- Workflow Builder に自作の Step が登録されていて選択できる様子
- おつかれシャワーへのおたよりを投稿するフォームを開き、それを GitHub の Issue に起こすという Workflow の例
- フォームに入力された内容を変数として使いながら、Issue のタイトルと概要文を組み立てることができる
- 実際に Workflow を起動してフォームに情報を入力して Submit すると
- このように Issue が作成される
作業メモ
- Socket Mode は本当に楽
- Heroku も WebSocket に対応している
- なので、特になにも考えなくてもデプロイしたら動く
- WebSockets on Heroku | Heroku Dev Center
- ただ、Heroku で「これは Web Server です」と認識されると、起動から 60 秒以内に環境変数 PORT で指定される番号のポートを listen しないと
R10 - Boot timeoutというエラーが発生してアプリケーションが終了してしまう - 今回のサンプル実装では Procfile で「これは websocket のプロセスですよ〜」と明示してやった
- フレームワークの Bolt はよくできていて、ドキュメントも充実しているし、Slack と連携するなにかをつくるときはこれを活用していくと捗ると思う
- Slack とのやりとりの部分はフレームワークにおまかせして、実現したい処理に集中できると感じた