🌟

slackの新platformを試してみたよ

2022/10/27に公開

どうもばやしです。ちょっと前にslackの新しいplatformが発表されましたね。
https://api.slack.com/future

社内のslack用にアプリを作ろうと考えていたのですが、以下の悩みを抱えてました。

  • bolt使うべきか否か
  • 実行環境どうしよう lambda? GAS?

そんな折「そういえばslackの新しいplatformの発表どっかで見たな」ということを思い出したので、調査がてらbotを作っていきます。

特徴

slackが用意したcloud上で動く

GASで疎通確認したりLambdaを用意したりするのが無くなったのはスーパーありがたいですね。

開発体験が良い

CLIが用意されており、slack runで開発用に起動出来たり、slack deployでslack上のplatformに一発でデプロイできたり、bot scopeをmanifestファイルで管理できたりと今までのslackアプリ作成のイケていなかったところが払拭されております。
ローカルで動かすためにngrokを使っていたころにはもう戻れません。
またDenoで書くらしいです。開発体験や速度周りに関しては実感できるほど使ってはないのですが、深淵なるnode_modulesディレクトリが作成されないのは本当に嬉しいですね。

モジュールを組み合わせて動かす

コンポーネントの種類として functions/triggers/workflow/datastoreがあり、それらを組み合わせて作ります。(今回はdatastoreは使っていないため割愛)

functions

特定の入力を受けて特定の出力を返すモジュール。ビジネスロジックみたいな感じ?
slack側が用意してくれているbuilt in functionと自分で用意する custom functionがある

workflows

functionをどう組み合わせるのかを書くところです。a functionの出力をb functionの入力にして〜みたいな感じですね。

triggers

どういう契機でどのworkflowを動かすかを定義する場所です。
triggerには以下の4つの種類があります。個人的にここが一番理解しづらかったです。

Link Triggers
トリガーに関連付けられた特別な ショートカットURL をクリックすると発火します。

Scheduled Triggers
定期実行です。cronみたいなやつですね。

Event Triggers
誰かがchannelに入ったや、botがメンションされた、誰かがメンションした、などのイベントに応じて発火します。

Webhook Triggers
Webhookで発火します。

manifestで色々定義できる

botの名前を決めたり、アイコンを設定したり、scopeを設定できます。個人的にはこのscopeを設定できるのが超ありがたいですね。管理画面でscopeポチポチしていたのから解放されました。
これが

こう

botScopes: [
  "chat:write",
  "chat:write.public",
  "commands"
],

実際に動かすまで

公式チュートリアルをやっていきます

環境

Mac OS 12.5.1

1. slack cliをインストール

curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash

2. CLIを認証

slack login

上記コマンドをターミナルで打つと認証用のコマンドが表示される

/slackauthticket ABC123defABC123defABC123defABC123defXYZ

表示されたコマンドをslackのチャンネルかDMで送ると認証が成功する

slack auth list

で認証情報が表示されたら成功

3. slackアプリを作成する

slack create <your-app-name>

上記コマンドを入力するとテンプレートを選択できる

? Select a template to build from:
> Hello World A simple workflow that sends a greeting
  Scaffolded project A solid foundation to start building upon 
  Blank starter project A, well.. blank project

今回はHello Worldで

4. triggerを作成する

ここが個人的な混乱ポイントで、slackアプリを作成するだけだとtriggerは作成されていない。
自分でtriggerファイルを作成し、それをslackアプリに登録する作業が必要。
今回はテンプレートから作成したため、triggerファイルは既に存在している。

slack trigger create --trigger-def "triggers/greeting_trigger.ts"

本番アプリに登録するか、開発用アプリに登録するかを聞かれるため開発用アプリを選択

? Choose an app [Use arrows to move, type to filter]
  my-app 
    App ID: N/A Status: Not installed
    Workspace: myworkspace Team ID: T123456789 
    
> my-app (dev) 
    App ID: N/A Status: Not installed
    Workspace: myworkspace Team ID: T123456789

5. 開発用に実行する

slack run

これで開発用アプリがローカルで実行されます。

以上、チュートリアルでした。開発体験凄い良いですね。

Discussion