Slackの次世代プラットフォームがオープンベータになったので、GASで稼働しているBOTを移植してみる。その1(環境準備)

Slackの次世代プラットフォームが2022年9月下旬にオープンベータのステータスになりました。
有料ワークスペースでの利用が可能となったので、GASで稼働している簡単なBOTを移植してみます。
本記事ではその記録をまとめていきます。

記事の執筆時点で、移植は8割程度完了しています。
ただ、調べながら作業をしていたために内容が行ったり来たりしており、そのまま記事に起こすと読みにくいため、
テーマごとに整理して記事をアップしていきたいと思います。

- 予定
    - 開発環境準備(Hello World動かしてみる)　←イマココ
    - 次世代プラットフォームの特徴
    - 移植するBOTについて
    - 実際に移植した結果
    - 移植した感想と疑問点

では、早速、開発環境の準備とHello Worldをやってみましょう。
記事執筆のために使用しているOSはWindows11なので、LinuxやMacユーザの方は適宜公式サイトの案内に従ってください。

# Step1. Slack CLIのインストール
[Slackの次世代プラットフォーム](https://api.slack.com/future)には、丁寧な[Quickstart](https://api.slack.com/future/quickstart)が用意されています。
それに従って進めていくことで、ローカルでの開発環境の準備から、簡単なSlackアプリのデプロイまでを経験することができます。

最初の一歩は、Slack CLIのインストールです。プロジェクトの作成から、デプロイまでこのCLIを使って行います。
LinuxやMacにはインストーラが用意されているのようなのですが、Windowsはマニュアルインストールするよう書かれているので、
そちらに従って進めていきます。

1\. [gitが依存関係にあるので、インストールを行う](https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
2\. [Denoのインストールを行う](https://deno.land/)
3\. DenoがインストールされてPATHが通っているか確認する
```
> deno --version
deno 1.26.* (release, x86_64-pc-windows-msvc)
v8 10.*
typescript 4.*
```
4\. [Slack CLIのインストールを行う](https://api.slack.com/future/tools/cli)
5\. Slack CLIがインストールされてPATHが通っているか確認する
```
> slack version
Using slack v1.14.0
```
6\. 他の依存関係が問題ないかチェックする(errorが出た場合は、内容に従って解決してください)
```
> slack doctor
```
7\. (任意) [VSCodeのDeno拡張をインストール](https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno)

# Step2. CLIの認証
開発環境のコマンドプロンプトから、以下のコマンドを実行する。
```
> slack login
```
下記のような出力がされるため、その文字列をコピーし、開発に使用するSlackワークスペースのチャンネルかDMに入力し、送信を行う。
```
  /slackauthticket ABC123defABC123defABC123defABC123defXYZ
```
アクセス許可フローが開始されるので、フローに従い許可を行う。
許可が完了したら、以下のようにコマンドを確認し、対象のワークスペースとの紐付けが行えたことを確認する。(対象のワークスペースのリストに[ACTIVE]が付いている)
```
> slack auth list

[ACTIVE] myworkspace (Team ID: T1TK12345)
User ID: U1234567
Last update: 2022-05-24 12:00:00 Z

To change your active workspace authorization run slack login
>
```
# Step3. Slack appを作成する
次のコマンドを実行して、プロジェクトテンプレートを作成する。
デフォルトで選択されている「Hello World」テンプレートを選択します。
`slack create [appName]`
```
> slack create 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 starter project
  A, well.. blank project
```
# Step4. Slack appの実行トリガーを作成する
Step3. で作成されたプロジェクトディレクトリに入る。
```
> cd hello-world 
```
次回以降の記事で詳細は説明しますが、アプリは以下の３つの要素で構成されています。
- Functions: 関数単位のビジネスロジック
- Workflows: Functionsの関数を処理の流れに沿って配置したもの
- Triggers: Workflowを呼び出すもの

Hello Worldテンプレートにはこれらが一式用意されています。

まず、アプリを試す前に、Triggerを作成する必要があります。
以下のコマンドを実行すると、アプリの選択が表示されます。
開発中のワークスペースの後に(dev)がついているアプリを選択します。
```
> 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
```
コマンドの実行に成功すると、以下のような出力がされます。
```
📚 App Manifest
   Created app manifest for "my-app (dev)" in "myworkspace" workspace

🏠 Workspace Install
   Installed "my-app (dev)" app to "myworkspace" workspace
   Finished in 1.5s

⚡ Trigger created
   Trigger ID:   Ft0123ABC456
   Trigger Type: shortcut
   Trigger Name: Send a greeting
   Shortcut URL: https://slack.com/shortcuts/Ft0123ABC456/XYZ123... // このURLを手元に控えておく
```
出力されたTreggerの「Shortcut URL」を手元に控えておきます。

# Step5. ローカル開発モードでアプリを実行する
`slack run`コマンドを実行すると、ローカルでサーバが起動して、ワークスペースの開発アプリに変更点が同期されます。
開発中のワークスペースを選択します。
```
> slack run

? Choose a workspace  [Use arrows to move, type to filter]
   Workspace: myworkspace        Team ID: T123456789
   App ID: N/A   Status: Installed
```

ここで、Step.4 で手元に控えたShortcut URLをSlackワークスペースのパブリックチャンネルに投稿します。
投稿したチャンネルに、ショートカットが「実行」ボタン付きで表示されます。

実行ボタンを選択して、表示されたモーダルで、ユーザー、チャンネルを選択し、挨拶文を入力します。
送信ボタンを選択すると、指定したチャンネルに挨拶が表示されるはずです。

ローカルサーバーを停止させるには、Ctrl+cで停止することができます。


# まとめ
今回は、Slack次世代プラットフォームの開発環境を整備し、Hello Worldを実行するまでを紹介しました。
ここまで進めることで、ローカル環境でSlackアプリを開発して、テスト、デプロイまですることができるようになります。

次回は、Slack次世代プラットフォームの特徴をまとめたいと思います。