📊

Slack Workflow と Google Spreadsheet を合わせると超絶便利な件

2021/12/24に公開

※この記事は、CyberAgent PTA Advent Calendar 2021の24日目の記事です。

株式会社AbemaTV ビジネス開発本部 で広告システムのエンジニアをしています @shunta-furukawaです。

今日はクリスマスイブですね。メリークリスマスイブ!!
昨年に続き今年もクリスマスイブに記事を書かせていただきます!

昨年はYAML+Mustache+go-generate で go の メタプログラミング をするということで、コーディングの効率化について書きました。

今日は自動化大好きな自分から、 Slack Workflow を Google Spreadsheet を使って 100倍便利にできる小技についてご紹介できればと思います。

Slack Workflow について

Slack には Slack Workflow という機能があるのをご存知でしょうか?

Slack Workflow とは、自動化されたタスクまたはプロセスをまとめたものです。コーディングの必要はなく、SlackのUIからポチポチつくることができます。

例えば、

  • 新しくチャンネルに参加した人に、そのチャンネルに関する説明を自動で流したい。
  • 「わからない」リアクションをしたら、自分宛にメンションを飛ばして問い合わせに気づかせる
  • 毎朝、日報を書くためのアクションを起動するメッセージを投稿する

など、作業の効率化に役立つ用途が考えられます。

Slack Workflow を作ってみよう

簡単な Workflow を作りながら Slack Workflow ができることを見ていきたいと思います。

左上のワークスペースメニューから 「Tool > Workflow Builder」と選んで...

Workflow の一覧が出てくるので Create を押すと作ることができます!

名前を決めて次を押すと...

まずは、ワークフローの始め方を選ぶような UI が出てきます。 作成するワークフローの実行されるトリガーを選択します。 トリガーの種類は以下の通りです。

名前 意味 説明
Shortcut ショートカット チャンネルの入力欄横にあるショートカットアイコンから実行できます
New channel member 新規チャンネルメンバー チャンネルに新しい人が入ってきた時に実行されます
Emoji Reaction 絵文字リアクション 特定の絵文字でリアクションされた時に実行します
Scheduled date & time スケジュール日時 実行する日時を指定します

次にそれぞれのトリガーの設定を終えると、 ワークフローのステップの設定ができるようになります。

「Add Step」 というボタンを押すと、直前のトリガーを受けてどのような種類のステップを実行するかを選択できます。

今回は説明用に、チャンネルないでABEMAくんのスタンプを押すと特定のメッセージが飛ぶように設定してみます。

「Send Message」 で 特定のチャンネルにメッセージを送ることができます。

メッセージを決めて、「Save」を押すと完了です。

完了したあとに、「Publish」を押すと利用が開始できます。

デフォルトのステップで出来ること

Workflow 自体は便利なのですが、 Slack デフォルトで提供されている ステップの種類は 2種類 しかありません。

名前 意味 説明
Send a message メッセージを送る チャンネル内で決まったメッセージを送ることができます
Send a form フォームを送る 特定の入力フォームを表示させ、ユーザに値を入力させることができます

これだけだと、なかなかプログラマティックな機能の実現には至らず、 Slack Bot を作ろうか... という話になってしまうのではないでしょうか(実際自分の第一印象もそうでした。)

第三者提供ステップ

先の項で説明した通り、デフォルトのステップでは Workflow を組む上で物足りなさがあります。
そこで、Slack の Workflow では 第三者が提供しているステップが存在します。

Slack App Directory では第三者が提供している ステップを確認できます。

その中でも Google Sheets for Workflow Builder は汎用性が高く、シンプルに高機能なWorkflow を実現できるのでその活用方法を紹介します。

Google Sheets for Workflow Builder

Google Sheets for Workflow Builder とは?

Google Sheets for Workflow Builder は Google Spreadsheet との Slack の正式なワークフロー向け連携機能です。

このステップを使うと、例えば以下のような高度な機能のワークフローを作れます

  • ショートカットから実行できる計算機
  • 日次で事業上の指標をSlackに投稿してくれるリマインダ
  • 「翻訳」スタンプを押した投稿を自動で翻訳して再投稿
  • 質問表への投稿 および編集
  • .... などなど

今回はこの中から、簡易的な計算機の作り方を紹介します。

Google Sheets for Workflow Builder でできること

google Sheets for Workflow Builderは以下の機能を提供しています。

ステップ名 意味 説明
Add a spreadsheet row スプレッドシートの行を追加 入力内容に応じて、行の追加を行います
Select a spreadsheet row スプレッドシートの行を選択 特定列をキーにして、その行の内容を取得します
Delete a spreadsheet row スプレッドシートの行を削除 特定列をキーにして、特定の行の削除を行います
Update a spreadsheet row スプレッドシートの行を更新 特定列をキーにして、特定の行の更新を行います

今回の計算機ワークフローでは、この中でも

  • Add a spreadsheet row
  • Select a spreadsheet row

を使って、計算機を実現します。

Google Sheets を組み合わせて 計算機を作ってみる

(作りたい)計算機の振る舞いについて

まずは、作成する計算機の挙動について説明します。

チャンネル内のショートカットから、「簡単な計算をする」というメニューが出てきます。

選択をすると、フォームが出て計算式の入力すると...

計算した答えを返してくれます。 こんな計算機を作っていきます。

全体の流れ

まずは全体の流れです。完成したワークフローは以下のようになります。

ステップ名 説明
Starts from "簡単な計算をする" shortcut in #チャンネル名 #チャンネル名 というチャンネルからショートカットで起動します。
Open a form 計算式を入力させて変数として格納しておきます。
Add a spreadsheet row Open a form で入力された計算式をスプレッドシートに入れます
Select a spreadsheet row 書き込まれた行の計算された値を参照して 変数として持ちます
Send a message to #チャンネル名 入力された式と計算された値とメッセージとして書き込みます

これらの中で、Spreadsheet に関連する ステップについて深掘って見ていきます。

スプレッドシートの構成

ワークフローの中では、スプレッドシートとやりとりをしています。
ワークフローからスプレッドシートへアクセスする場合、1行目が自動でカラム名として認識されます
そのため、ワークフローから使われる前提でスプレッドシートを準備する必要があります。

今回の計算機で使用するスプレッドシートは以下のような構成になっています。

カラム名 説明
FORMULA 計算式を入力します。(後ほどの検索キーにもなります)
EVAL 計算式の結果が入ります。スプレッドシートの関数形式で書き込み、結果を表示します。

スプレッドシートへの行追加

初めにフォームから計算式を受け取ったあと、今準備したスプレッドシートに結果を入力します。

カラム名 入力内容
FORMULA 計算式
EVAL =計算式

EVAL列 に 計算式の前に = を入れた値をいれてあげることで、追記された スプレッドシート側で計算式が評価され EVAL列 に計算された結果の値が入ってきます入ってきます。

スプレッドシートから計算結果を取得

行追加によって計算された結果を今度は Slack に書き込むために改めて取得していきます。

カラム名 説明 入力内容
Choose a column to search 検索キーとして用いるカラム FORMULA
Define a cell value to find 検索キーのカラムで探す値 はじめに入力された計算式

はじめに入力された計算式 2*2 は スプレッドシートの FORMULA 列にそのまま入力されているので、
検索する場合は 逆に FORMULA 列に 2*2 が入力されている行を取得するとほしい結果を得ることができます。

なお、この段階では まだ取得した行のどの列を用いるかなどは選ぶ必要はなく、
後続のステップで変数という形で参照することが可能です。

計算結果の表示

取得した結果は次のステップの Send a Message にて、 変数を参照すると 「Select a Spreadsheet row」 の項目から EVAL列の値として取得可能です。

これにより、2*2 の結果である 4 という文字をメッセージに動的に組み込むことが出来ます。

これで、計算機の完成です!

まとめ

Slack Workflow と Google Spreadsheet を組み合わせることによって、より Slack Workflow が便利になることを紹介しました!

今回は説明のため、単純なワークフローかつ計算も単純なものでしたが

例えば、

  • スプレッドシート側で 外部サイトをインポートし、検索できるようにする
  • =GOOGLETRANSLATE() 関数を書き込むことで、翻訳した結果を返す
    など、スプレッドシートが高機能な分、応用方法も無限に思いつくのではないでしょうか。

Slack は今や仕事に欠かせないツールになってきていますので
Slack をもっともっと便利にできると幸せになるかもしれません!

それでは良いクリスマスを!

Discussion