LoginSignup
12
13

More than 1 year has passed since last update.

ノーコードで簡単!超絶強化されたSlackのワークフローでSpreadsheetと連携して業務効率化した話

Last updated at Posted at 2021-05-10

Slackのワークフローが2020年10月頃に超絶強化されて、Appとの連携ができるようになりました!
スクリーンショット 2021-05-03 21.22.55.png
特にスプレッドシートとの連携(Google Sheets for Workflow Builder)が激アツで、今までだとできなかった or できてもかなり実装が複雑になっていた自動化が簡単にできて超便利です!

この機能でどんなものを作ったのか、どう作るのかを解説します
通常のワークフローでは使えない、日付を扱うための実用的な裏技も紹介してますので、ぜひ最後まで読んでいってください :bow:

:warning:(2021/06/07 追記)
Updateをかけることで、関数が固定される裏技ですが、できなくなってしまいました。
対応策↓
selectで持ってこれる値は文字列になっています。
関数を入れているセルに対してselectをかけて
持ってきた値でセルを再度更新(update)をしてあげることで、同じことができます。

今までどんなものを作った?

  • 出退勤システム
    • 出退勤時間のログをスプレッドシートに記録する
  • QAシステム
    • Slack上で行われる質問&回答をスプレッドシートと連携して管理する
  • 休憩宣言システム
    • 1時間の休憩を取得する際に、戻り時間をSlackに通知する。
  • MeetURL作成システム
    • GoogleMeetのURLを生成してSlackに送信する

一つ一つ解説します!

出退勤システム

▼作ったワークフロー
image.png

  1. 入力用のフォームを開く
  2. フォームの入力内容でスプレッドシートに行を追加(Add row)
  3. 内容を固定するため行を更新(Update row)
  4. 内容をSlackに送信

と処理します。

▼出力先のスプレッドシート
image.png

入力用のフォームを開く

「区分」で出勤 or 退勤 を選ばせて
「備考」でその日の作業詳細や「早退します」などの、出退勤の関連情報を入力してもらいます。
一日の予定を出勤の備考にいれても良いかもしれないですね。

▼画面表示
image.png

フォームの入力内容でスプレッドシートに行を追加(Add row)

▼ステップ詳細
image.png

日付はスプレッドシートのNOW関数をValueに指定します。
このままだとNOW関数が入力されているだけなので、現在時刻に合わせて内容が1秒1秒変わるセルになってしまいますよね。
ここで、「内容を固定するため行を更新(Update row)」というステップが必要になります。
その更新対象の列を特定させるために、名前のValueの頭に「※」を入れて目印にします。

内容を固定するため行を更新(Update row)

▼ステップ詳細

目印(「※」がついた名前)がひっかかるように検索します。(複数当てはまる場合は最初に引っかかった行が更新されるので注意です)
image.png
そして、目印「※」を削除して更新します。

一見意味のない更新に見えますが、この空更新を挟むことでセルの入力内容が固定されます。
セルの中身には、「NOW関数」ではなく、この更新が行われた時点での日付・時刻が入力されている状態になります。
(2021月5月時点での裏技です。バグかもしれないので修正されるかもしれません)

▼ログが追加されたスプレッドシート
image.png

内容をSlackに送信

▼ステップ詳細
image.png

以下のように表示されます。
▼出勤時
image.png

▼退勤時
image.png

パッと見でBot投稿とわかるようになっていると良いです。

アイコンを設定するのもおすすめです。
自分は↓のサイトでアイコンを作成してます。

運用

出退勤時にフォームを起動して入力するだけです。
image.png

自分の名前でフィルターをかけて一日ごとに何してたかを管理できます。
image.png

VLOOKUPで整形するのもおすすめです。休憩時間込みで実働時間が集計できるので重宝してます
image.png

QAシステム

▼作ったワークフロー
image.png
image.png

▼出力先のスプレッドシート
image.png

  1. 質問用のフォームを開く
  2. フォームの入力内容でスプレッドシートに行を追加
  3. QAのNOを参照
  4. 目印にしていた質問者を修正
  5. 内容をSlackに送信&回答用のフォームを開く
  6. 回答内容でスプレッドシートを更新
  7. 回答日時を固定
  8. 回答内容をSlackに送信

と処理します。

質問用のフォームを開く

「質問内容」を入力します。
運用によっては「カテゴリー」や「優先度」などの項目を足すのも良いですね。

フォームの入力内容でスプレッドシートに行を追加

▼ステップ詳細
image.png
image.png

NOに =ROW()-1と入れることで、QAごとのNOを採番します。
回答日も「出退勤システム」と同じ要領で入れます。
ステータスも「質問中」に更新しましょう。(ソートに使えます)
質問者に「※」を入れて、更新対象の列の目印にします。

QAのNOを参照

▼ステップ詳細
image.png
参照をするときは、関数(=ROW()-1)でなく、実際にセルに表示されている値を取得する仕様です。(値の固定はされません。)
QAのNOを取得しておくことで、目印の「※」が無くても列を特定・更新できます。
(「※」だと、同じ質問者が2つ投稿した場合にQAが特定できなくなってしまいます…)

目印にしていた質問者を修正

▼ステップ詳細
image.png
NOが取得できたので、さっそくNOをキーに質問者欄の目印を削除しましょう。
このときに、NOと回答時間が固定されます。

内容をSlackに送信&回答用のフォームを開く

▼ステップ詳細
image.png
Slackに質問が投稿されたことを通知します。
ここで、「メッセージを送信」ではなく「フォームを送信」にするのがミソです。
(「メッセージを送信」でメッセージの中にボタンを入れる→ボタンを押したらフォーム送信もアリですが、工程は少ないほうがいいですよね)
質問に対する回答を入力してもらいます。

▼以下のように表示されます
image.png

回答内容でスプレッドシートを更新

▼ステップ詳細
image.png
image.png

NOをキーにスプレッドを更新します。
回答日時にNOW関数を使いましょう。
ステータスも「回答済」に更新します。

回答日時を固定

▼ステップ詳細
image.png
NOを空更新して、回答日時のNOW関数を固定します。
ここで更新するカラムはなんでも良いです!

回答内容をSlackに送信

▼ステップ詳細
image.png

最後に、回答内容をSlackに送信します
▼以下のように表示されます
image.png

絵文字を利用して、QとAの見栄えを良くしています。
絵文字を作成するときは、こちらのサイトが便利です。

▼ログが追加されたスプレッドシート
image.png

運用

質問者は、ショートカットを起動して質問するだけ。
回答者は、答えられそうな質問に対して回答するだけです。
双方向的なやり取りも、簡単に実装できます。

ログがスプレッドシートに残るので、あとから「質問中」のみでソートしたり、
CSVやEXCELで吐き出したりすることもできますよね。

同じようなことをスプレッドシート単体でやっていたり、Googleフォームでやっているようなら
このやり方に変えることをオススメします!

休憩宣言システム

▼作ったワークフロー
image.png

スプレッドの関数を使うことで、1時間後の時刻を通知できます!
シンプルな作りでとても便利ですし、応用も効きやすいテクニックです。

  1. 行を参照
  2. Slackに通知

行を参照

スプレッドシートに、前もって
現在時刻と1時間後の時刻を表す関数、参照するときのキー値を入力しておきます

現在時刻 : =NOW()
1時間後の時刻 : =NOW() + 1/24

image.png

hint列のキー値を元に参照します。
image.png

Slackに通知

▼ステップ詳細
image.png

▼表示されるメッセージ
image.png

運用

休憩に入る前にワークフローを起動するだけです。
何時から連絡がつくのかパット見でわかるので良いですね。

休憩時間終了を示す、戻りましたボタンを付けたりしても良いかもしれませんね。

MeetURL作成システム

ワークフローとスプレッドシートのみの連携でも、たくさんの使い方があるのですが
GAS」と併用することで更に幅が広がります!
▼作ったワークフロー
image.png

  1. 行追加(トリガー)
  2. MeetURL取得
  3. Slackに通知
  4. トリガーで追加した行の削除

と処理します。

▼事前に作成しておくスプレッドシート
image.png
B2のセルに参照用の値を入力しておいてください。

▼作ったGAS

// @ts-nocheck
function getMeetUrl() {
  const calendarId = 'primary'; // 一時的にイベントを作成するカレンダーのID。わからない人はこのままでOK
  const dt = new Date(); // 日付は適当に設定
  const date = dt.getFullYear() + '-' + (dt.getMonth() + 1) + '-' + dt.getDate();
  const requestId = Math.random().toString(32).substring(2); // 適当な文字列を作る
  const response = Calendar.Events.insert({
    summary: "temp_event",
    singleEvents: true,
    allDayEvent: true,
    start: {
      date,
    },
    end: {
      date,
    },
    conferenceData: {
      createRequest: {
        requestId,
        conferenceSolutionKey: {
          type: "hangoutsMeet"
        },
      }
    }
  },calendarId, { conferenceDataVersion: 1 })

  Calendar.Events.remove(calendarId, response.id)

  if (response.conferenceData.createRequest.status.statusCode === "success") {
    const meetUrl = response.conferenceData.entryPoints[0].uri
    SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A2").setValue(meetUrl)
  }
}

実行されると、A2のセルにMeetのURLが自動生成されるというプログラムです。
参考元 : https://qiita.com/sskmy1024y/items/0ec5b61a7cfeb8563576

こちらのGASのトリガーを「スプレッドシート変更時」に設定します。
image.png

行追加(トリガー)

▼ステップ詳細
image.png
スプレッドに行を追加して、GASのトリガーを発動させます。
中身はどんなものでも構わないです。

MeetURL取得

▼ステップ詳細
image.png

GASが発動し、新しいMeetのURLがスプレッドのA2セルに生成されているはずです。
あらかじめスプレッドシートに記載しておいた、B2のセルをキーに参照します

Slackに通知

▼ステップ詳細
image.png

取得したMeetのURLをSlackに通知します

トリガーで追加した行の削除

▼ステップ詳細
image.png
スプレッドに列が追加され続けて重くなることを防ぐため、追加した行を削除します。

運用

弊社もテレワークが主となり、Meetを多用しています。
Meetを生成するためのチャンネルでショートカットを起動し、突発的な会議や、ちょっとした口頭確認を行っています。

リアクション(絵文字)でワークフロー起動するようにしても良いかもしれません。

あとがき

ワークフローの強化によってSlackの可能性がぐっと広がったと思います!
ノーコードで実装できるので、敷居も低くてノンプログラマーの方でも扱えるのがとても良いです。

良き業務効率化ライフを!

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13