Denoで動くSlack bot開発を試す
Slack releases platform open beta powered by Deno
2022/09/21にSlackの公式ブログでDenoを使ったSlack platformのオープンベータがリリースされていました
javascriptランタイムとして最速を目指すDenoで動くなんてワクワクしちゃいますが、個人的にはDenoだろうがSlack botのインフラができたことが嬉しいです
以前のSlack bot開発
これまでの自前Slack bot開発といえば頑張ってインフラを用意しつつSlack APIを使うか?Boltを使うか?という流れだったと思います
筆者はインフラをAWS CDKのNodejsFunctionをつかってAPI Gateway / Lambdaを用意しつつ、SQSを使っていい感じにtimeoutしないように作っていました
Node.jsで開発するのであればBolt一択な気がするので、快適に開発していました
以前のSlack bot開発の課題
上記のように開発していましたが本番環境に都度デプロイして動作確認しており、その点に大きな課題がありました
- ローカル開発で動作確認は難しい
- dev環境を用意するのもめんどい
- workspace分けるか
- Appを分けるか
Denoで動くSlack platformは何が嬉しい
cliを使ってAppの作成や設定をシームレスに行う開発体験も然ることながら、上記で上げた開発用のappを分離してローカル開発がしやすいことが嬉しいです
デプロイも早く、カジュアルなツール作成だからこそ早く実装できる全体の体験は大きい喜びを感じます
Slack botでHello Worldを試してみる
ここからは公式がドキュメントにしているQuickstartをなぞっていきます
:::alert
2022/09/30時点の情報であり、オープンβなので情報が変わる可能性があります
:::
slack cliのインストール
現状はMac or Linuxのみで自動インストールをサポートしています
※ Windowsはマニュアルインストールのみです
$ curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
実行結果
👋 Starting to download and install the Slack CLI and its dependencies...
Finding the latest Slack CLI release version
📦 Installing the Slack CLI
Downloading the Slack CLI: https://downloads.slack-edge.com/slack-cli/slack_cli_1.12.0_macOS_64-bit.tar.gz
######################################################################## 100.0%
Extracting the Slack CLI: /Users/**********/.slack/bin/slack
Adding a symbolic link /usr/local/bin/slack to /Users/***********/.slack/bin/slack
Installer doesn't have write access to /usr/local/bin to create a symbolic link. Script will try with sudo privileges
Password:
✨ Slack CLI was installed successfully
📦 Checking dependency: Deno
Installing Deno using Homebrew...
==> Downloading https://ghcr.io/v2/homebrew/core/deno/manifests/1.25.1
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/deno/blobs/sha256:e6f8488d83850
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh
######################################################################## 100.0%
==> Pouring deno--1.25.1.arm64_monterey.bottle.tar.gz
🍺 /opt/homebrew/Cellar/deno/1.25.1: 10 files, 77.4MB
==> Running brew cleanup deno
...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see man brew
).
✨ Deno is installed and ready!
📄 Use of the Slack CLI should comply with the Slack API Terms of Service:
✨ You're all set! Next, authorize your CLI in your workspace with slack login
Slack CliでWorkspaceにログインする
cliでログインします
$ slack login
上記コマンドを実行すると認証チケットのショートカットコマンド
が発行されるので今回実行したいワークスペースの適当なチャンネルかDMのメッセージ入力部に貼り付けて送信します
📋 Run the following slash command in any Slack channel or DM
The command will open a prompt detailing the user permissions for you to approve
/slackauthticket {*********************}
送信するとslack botから以下のような返答が来ます
cliを実行しているターミナルに戻ると認証が完了した旨のテキストと.slack/credentials.json
が作成されたことが確認できます
認証完了結果
📋 Run the following slash command in any Slack channel or DM
The command will open a prompt detailing the user permissions for you to approve
/slackauthticket ZjYzZ***************************
✅ You've successfully authenticated! 🎉
Authorization data was saved to /Users/*********/.slack/credentials.json
💡 Run slack create my-app to create a new app, or slack help for details on available commands
これでログインできたようです
アプリ作成できる状態か以下のコマンドで確認します
$ slack auth list
実行結果
ACTIVE {workspace_name} (Team ID: T******)
User ID: U*********
Last update: 2022-09-30 08:50:57 +09:00
To change your active workspace authorization run slack login
Slack Appを作成する
$ slack create my-deno-app
実行するとどのテンプレートを利用するか選択できるので、今回はHello Worldを選択します
? 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 project
A, well.. blank project
To see all available samples, visit github.com/slack-samples.
実行結果
? Select a template to build from: Hello World
Creating new Slack app at /Users//my-deno-app
Enter passphrase for key '/Users//.ssh/id_rsa':
📦 Installed project dependencies
✨ my-deno-app successfully created
🧭 Explore your project's README.md for documentation and code samples, and at any time run slack help to display a list of available commands
🧑🚀 Follow the steps below to try out your new project
1️⃣ Change into your project directory with: cd my-deno-app
2️⃣ Develop locally and see changes in real-time with: slack run
3️⃣ When you're ready to deploy for production use: slack deploy
🔔 If you leave the workspace, you won’t be able to manage any apps you’ve deployed to it. Apps you deploy will belong to the workspace even if you leave the workspace
これでベースのアプリケーションが作成されます
Slack Appのトリガーを作成する
アプリケーションを動作させるためのトリガーを作成します
$ cd my-deno-app
$ slack trigger create --trigger-def "triggers/greeting_trigger.ts"
すると、本番/開発を選択するような状態になります
まずは開発用を選択しましょう
? Choose an app [Use arrows to move, type to filter]
my-deno-app
App ID: N/A Status: Not installed
Workspace: {workspace_name} Team ID: T*********
> my-deno-app (dev)
App ID: N/A Status: Not installed
Workspace: {workspace_name} Team ID: T*********
選択結果
? Choose an app my-deno-app (dev)
App ID: N/A Status: Not installed
Workspace: {workspace_name} Team ID: T**************
📚 App Manifest
Created app manifest for "my-deno-app (dev)" in "{workspace_name}" workspace
🏠 Workspace Install
Installed "my-deno-app (dev)" app to "{workspace_name}" workspace
Finished in 1.3s
⚡ Trigger created
Trigger ID: Ft***********
Trigger Type: shortcut
Trigger Name: Send a greeting
URL: https://slack.com/shortcuts/Ft********/d35*****************
選択後に出てくるURL
を手元に控えておきます
Slack Appをテスト動作させる
先程控えておいたURLをSlackのpublicチャンネルに投稿します
するとpreviewでアプリウィンドウが展開されます
previewでもボタンは発火するので押下するとモーダルが立ち上がります
適当に入力して送信します
botからメッセージが来たら成功です
まとめ
今回はhello worldに限ってSlack Appの動作確認しましたが、他のテンプレートも有用な物が多く業務で使うカジュアルなアプリケーションの開発ではcliを使った流れが快適すぎて「これがデファクトだろ!」という気持ちになりました
データストア系を使ったアプリを試して記事にしたいのでそれはまた明日の自分に期待したいと思います…
Discussion