notebook

都内でWEB系エンジニアやってます。

Slack Workflow Builderでルーレットを作ってみる

モブプロで順番決めるとき、LT会で発表担当をメンバーの中からランダムで選ぶときなど、特定のメンバーの中から誰かをピックしたい、もしくは順番を決めたいというようなケースはよくあると思う

そういうのをSlackのworkflowで作ってみた

流れはほぼ同じだが用途が違うため2つWorkflowを作った

  • 複数メンバーの中からランダムで1人選ぶ
  • 複数メンバーからランダムで順番を決める

仕組みと流れ

  • スプレッドシート連携でデータを記録
  • スプレッドシート連携で特定行を取り出す
  • ワークフロー実行チャンネルでPost

イメージ

複数メンバーの中からランダムで1人選ぶ

複数メンバーからランダムで順番を決める

スプレッドシート連携

あらかじめ設定した内容にしたがい、スプレッドシートの操作を行える

Slack Workflow Builderとの連携では次の操作を行える

  • 行の操作
    • 追加
    • 削除
    • 更新
    • 選択

選択というのは、SQLでいうWHERE A ="hoge"というような取得の方法

GUI上でどのカラムがどの値のレコードというのを指定する

更新、削除については、選択を行い対象レコードを絞ったうえで更新、削除を行う

スプレッドシートの中身

今回はスプレッドシートでごにょごにょやっているので中身を説明する

メンバーの一覧シート

listシートはただのリスト

ランダムな値を設定するシート

name列の値はimportrangelistシートから読み込んでいる

RANDARRAYでメンバー分の数だけランダム数値をセット

target列はランダム数値のリストから一番値が高い行のみTRUEとなるような式

ソート部分

sorted列はランダム数値を含めたメンバーのリストをランダム値でソート(昇順)

ソートしたリストから順番に結合して1セルにまとめる式

ワークフローの全体感

準備が終わったのでワークフローの設定を説明する

2つとも設定はほとんど同じで、行の特定の設定とPostする変数が違うのみ

前項で紹介した同じスプレッドシートを参照している

  • 複数メンバーの中からランダムで1人選ぶワークフロー

  • 複数メンバーからランダムで順番を決めるワークフロー

スプレッドシートへの書き込み

スプレッドシートで使われているランダム関数は、スプレッドシートが再計算されるたびに新しい値を生成する(セルを編集したり、スプレッドシートを開いたりするたび)

ワークフロー経由の場合この操作をしないとランダムな値が変わらなかったため何かしら更新をする必要があった

スプレッドシートはこんな感じで、レコードが追加される

スプレッドシートからの読み込み

  • 複数メンバーの中からランダムで1人選ぶワークフローの場合

設定そのまま、例のスクショだとハイライト部分が読まれる

  • 複数メンバーからランダムで順番を決めるワークフローの場合

設定そのまま、例のスクショだとハイライト部分が読まれる

seq列が1の行(毎度同じ行)を取得してその行のlist列の値を使う

おわり

SlackのWorkflow Builderを活用して、リストの中からランダムでひとつピックアップしたりリストを出力したりできるようにしてみた

適当にターミナルでワンライナーでも書けるじゃんって話もあるがこれはこれで面白かった

SlackのWorkflow Builderはスプレッドシート連携とスプレッドシート内の工夫で結構な範囲のことはできるんじゃないかなと感じた

まぁ、もう少し複雑になったりしてきたらJavaScript書かせてくれ…という気持ちもあるw