この記事は、Wano Group Advent Calendar 2021 の記事です。
Slack ワークフローとは?
Slackが用意している機能で、メッセージに対するリアクション等をフックにして、特定のアクションを実行することができるものです。
アプリを作って、連携することもできますが、今回は、Slack Workflow Builderというのを使って、かんたんに済ましてみます。
やりたいこと
コードレビューの依頼をSlackでやっているのですが、いくつか問題がありました。
- 依頼が流れていってしまう
- GitLabで一覧できるけど、修正したあとの再レビューとかも必要なので、イマイチ。
- 要はレビューする人のターンなのか、レビューされた人のターンなのかパット見わからない
どんなふうに実現するか
下記のリアクションを使います。
- でレビューする意思表示
- … コメントあり。依頼者にDMで連絡がいく
- … 要修正。依頼者にDMで連絡がいく
- … 修正完了の意思表示
- で承認済み。依頼者にDMで連絡
のような感じです。
Workflow Builderでワークフローを作る
Slack のメッセージ欄で、/workflow
と打つとworkflow builder
の選択肢が出てくるので、クリックして、右上の、Create
をクリックすると、下記が開きます。
レビューする意思表示のワークフローを作る
タイトルに適当に「レビュアーが意思表示」とか入れて、Next
します。
次のステップで、何をフックにするかを選びます。今回は、Emoji reaction
を選びます。
チャンネルを選んで、リアクションをAdd Reaction
で選びます。
こんな感じですね。
Next
すると、画面が変わり、以降のステップを登録していきます。
Add Step
をクリックすると、色々選べます。
今回は、Add a spreadsheet row
を選ぶと、下記の画面になり、
Search by name
で保存したいスプレッドシートを選ぶと、さらにスプレッドシートのシートの選択、カラムの選択というふうに進みます。
テキストエリアに文字を書くこともできますが、今回は、右下にある、insert a variable
を使います。
ここで選べるのは、こんな感じです。
- 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
- 依頼者
- 最初にリアクションした人
- 最後にリアクションした人
- ステータス
- 依頼日
- メモ
されたタイミングでは、上記のカラムには、下記のように変数を当てます。
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
を選びます。
これで、一つ目のワークフローが完了です。
最後に、Publish
すると、ワークフローが使えるようになります。
レビューを承認したというワークフローを作る
また、最初の画面から、Create
で別のワークフローを作ります。
「レビューを承認」とか適当な名前を入れ、Emoji reaction
を選んで、リアクションをしていするところまでは同じです(いや、後もだいたい同じなんですが)。
次に、Add Step
で、Update a spreadsheet row
を選びます。
Choose a column to search
に Slack URL
を選び、Link to message reacted on
を選びます。
そして、Update these columns
に、更新するカラムと変数を設定していきます。
column | variable |
---|---|
最後にリアクションした人 | Person who reacted |
ステータス | 承認されました |
みたいな感じですね。
同様に他のワークフローも作る
承認と同じ方法で、各ワークフローを作っていきます。
後は、スプレッドシートで自分用のフィルタを用意して、最初にリアクションした人
が自分のものが、自分担当のレビューで、ステータスを見れば、修正が必要な状態なのかとか、修正が終わっている状態なのかとかが、わかるようになります。
問題点
が2回リアクションされると、2行できてしまう...ので、これは、運用で回避しましょう(リアクションがすでについてたら、リアクションはしないでね、とみんなに周知しておく)
で、そんなことより、もっと問題点としてあるのが、Slackのワークフローの機能とスプレッドシートの連携が若干バグっているところがありまして...。
Link to message reacted on
が、たまに、リアクションしたメッセージではなくて、リアクションしたメッセージのスレッド内へのリンクになるときがあるので、 でリアクションしたときに入るSlack URLと、別のリアクションをしたときのSlack URLが異なってしまい、行を探せないので、更新に失敗する...ということがたまにあります。
バグ報告したのですが、すぐに治す気配はなさそうです。
多分、自分でアプリ書いたほうが速い、と思いつつまだ書いてません(時々手動でステータスを更新している...)。
終わり
というわけで、イマイチな結果になってしまいましたが、使える場面はあると思います。
ぜひ、使ってみてください。