Slackワークフローを使ってみた

この記事は、[Wano Group Advent Calendar 2021](https://qiita.com/advent-calendar/2021/wano-group) の記事です。

# Slack ワークフローとは？

Slackが用意している機能で、メッセージに対するリアクション等をフックにして、特定のアクションを実行することができるものです。

アプリを作って、連携することもできますが、今回は、Slack Workflow Builderというのを使って、かんたんに済ましてみます。

## やりたいこと

コードレビューの依頼をSlackでやっているのですが、いくつか問題がありました。

* 依頼が流れていってしまう
* GitLabで一覧できるけど、修正したあとの再レビューとかも必要なので、イマイチ。
    * 要はレビューする人のターンなのか、レビューされた人のターンなのかパット見わからない

# どんなふうに実現するか

下記のリアクションを使います。

* :eyes: でレビューする意思表示
* :speech_balloon:  … コメントあり。依頼者にDMで連絡がいく
* :exclamation:  … 要修正。依頼者にDMで連絡がいく
* :hammer_and_wrench:  … 修正完了の意思表示
* :+1: で承認済み。依頼者にDMで連絡

のような感じです。

## Workflow Builderでワークフローを作る

Slack のメッセージ欄で、`/workflow` と打つと`workflow builder`の選択肢が出てくるので、クリックして、右上の、`Create` をクリックすると、下記が開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/3e1b166c-89e9-2424-3955-daa9b3021030.png)

## レビューする意思表示のワークフローを作る

タイトルに適当に「レビュアーが意思表示」とか入れて、`Next`します。

次のステップで、何をフックにするかを選びます。今回は、`Emoji reaction` を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/4e3caf47-b671-8250-df8a-85f01755fd23.png)

チャンネルを選んで、リアクションを`Add Reaction` で選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/4c92f2a3-4b49-bdc1-8119-7b0cec295b48.png)

こんな感じですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/fa0ce62c-660a-b1a8-420c-adc48eca47bc.png)

`Next` すると、画面が変わり、以降のステップを登録していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/43d08473-ce49-babb-ce13-47bdb1e99f07.png)

`Add Step` をクリックすると、色々選べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/656b63d4-34ab-cd4a-6577-00a5b34e07cc.png)

今回は、`Add a spreadsheet row` を選ぶと、下記の画面になり、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/b026a382-757f-2c7a-ca12-6e63f11a7de7.png)

`Search by name` で保存したいスプレッドシートを選ぶと、さらにスプレッドシートのシートの選択、カラムの選択というふうに進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/b3a13624-a835-187d-f345-68b7b056c66f.png)

テキストエリアに文字を書くこともできますが、今回は、右下にある、`insert a variable` を使います。

ここで選べるのは、こんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/3b98e7b0-5a2c-2c07-ba65-25b772ae565c.png)

* Channel reaction was used in ... リアクションされたチャンネル
* Person who reacted ... リアクションした人
* Reaction added ... 追加されたリアクション
* Link to message reacted on ... リアクションをつけたメッセージ
* Person who sent original message ... オリジナルのメッセージを書いた人
* Time when workflow started ... ワークフローが始まった時間

という感じですね。今回のシートでは、以下のカラムを用意します。

* Slack URL
* 依頼者
* 最初にリアクションした人
* 最後にリアクションした人
* ステータス
* 依頼日
* メモ

:eyes: されたタイミングでは、上記のカラムには、下記のように変数を当てます。

| column | variable |
| ------ | -------- |
| Slack URL | Link to message reacted on |
| 依頼者 | Person who sent original message |
| 最初にリアクションした人 | Person who reacted |
| 最後にリアクションした人 | Person who reacted |
| ステータス | レビューする意思表示がされました |
| 依頼日 | TIme when workflow started |

レビュワーがついたよということを連絡するために、さらに`Add Step`し、`Send a message` を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/83bb6305-aa6e-4701-9652-201d5b5c26a1.png)

これで、一つ目のワークフローが完了です。

最後に、`Publish` すると、ワークフローが使えるようになります。

## レビューを承認したというワークフローを作る

また、最初の画面から、`Create` で別のワークフローを作ります。

「レビューを承認」とか適当な名前を入れ、`Emoji reaction` を選んで、リアクションをしていするところまでは同じです（いや、後もだいたい同じなんですが)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/e25331bc-b435-48b0-930d-a657c4d6dd98.png)

次に、`Add Step` で、`Update a spreadsheet row` を選びます。

`Choose a column to search` に `Slack URL` を選び、`Link to message reacted on` を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11040/4099d973-a605-f824-0364-758527ed3f85.png)

そして、`Update these columns` に、更新するカラムと変数を設定していきます。

| column | variable |
| ------ | -------- |
| 最後にリアクションした人 | Person who reacted |
| ステータス | 承認されました |

みたいな感じですね。

## 同様に他のワークフローも作る

承認と同じ方法で、各ワークフローを作っていきます。

後は、スプレッドシートで自分用のフィルタを用意して、`最初にリアクションした人`が自分のものが、自分担当のレビューで、ステータスを見れば、修正が必要な状態なのかとか、修正が終わっている状態なのかとかが、わかるようになります。

## 問題点

:eyes: が2回リアクションされると、2行できてしまう...ので、これは、運用で回避しましょう(リアクションがすでについてたら、:eyes:リアクションはしないでね、とみんなに周知しておく)

で、そんなことより、もっと問題点としてあるのが、Slackのワークフローの機能とスプレッドシートの連携が若干バグっているところがありまして...。
`Link to message reacted on` が、たまに、リアクションしたメッセージではなくて、リアクションしたメッセージのスレッド内へのリンクになるときがあるので、:eyes: でリアクションしたときに入るSlack URLと、別のリアクションをしたときのSlack URLが異なってしまい、行を探せないので、更新に失敗する...ということがたまにあります。

バグ報告したのですが、すぐに治す気配はなさそうです。

多分、自分でアプリ書いたほうが速い、と思いつつまだ書いてません(時々手動でステータスを更新している...)。

## 終わり

というわけで、イマイチな結果になってしまいましたが、使える場面はあると思います。
ぜひ、使ってみてください。