クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

業務効率化には強化された Slack のワークフローがオススメ

はじめに

こんにちは。家にいる時間が長くなってからジャンキーなベジタリアン料理が趣味になっている大浦です。(おからこんにゃくのカルビ丼おいしいですよ!) ここ最近 Slack のワークフローのステップにアプリが追加されたことにより非常に便利になったので、そのひとつの例を書いていきたいと思います。ワークフローについては去年末に「Slack ワークフローをさわってみた」という記事を投稿してますので参考にしてみてください。

本記事で扱うアプリのステップ

Google Sheets for Workflow Builder https://slack.com/app-pages/google-sheets

Google スプレッドシートの行の追加に Slack が使えるようになって業務効率化が捗ります。🎉

Add information from Slack… https://slack.com/apps/A01AWGA48G6-google-sheets-for-workflow-builder

何に使える?

下記のような 頻度は低いがそれでも一定発生する業務 に向いているでしょう。

  • 相談窓口
  • 稼働報告/管理
  • 従業員の体調報告/管理
  • 定期的なミーティングやイベントのフィードバックの収集

逆に、頻度が極端に低くかったり高かったりする業務だと、Slacck ワークフローは使わず、直接スプレッドシートに書き込んだり、専用のUIを設けたりしたほうがよいと考えます。当人のコンテキストスイッチの負荷が目安というところで、なかなか塩梅が難しいところですね。

具体的な例

実現したいこと

フリーランスで勤怠のシステムを導入していないが、以下を記録したい。

  • 業務開始と終了の時間
  • 作業予定
  • 作業実績

必要なもの

手順

シートの作成

Google スプレットシート上のシートは 2つ用意します。

「raw」シート: Slack からのデータの受け皿

重要: ヘッダー行を追加しましょう。Google Sheets for Workflow Builder で紐付けのキーとなります。

「view」シート: rawシートで収集したデータの整形後の参照用

ワークフローの作成

2パターンのワークフロー(稼働開始ワークフローと稼働終了ワークフロー)を作成し、Google Sheets for Workflow Builder を利用してシート raw にデータを流し込みます。

稼働開始のワークフロー

ワークフロービルダーを立ち上げましょう。

最初にワークフローの名前をつけます。

今回はショートカットをトリガーとしたいので ショートカット を選択します。

稼働開始のショートカットが表示されるチャンネルと表示される名称を設定します。

ステップを追加 していきましょう。

稼働報告のためのフォームを追加します。

フォームに表示されるタイトルや項目の設定をします。

更にフォーム入力後の ステップを追加 します。

ここでいよいよ Add a spreadsheet row の追加です。

ログイン中の Google アカウントに紐付いたスプレッドシートAdd 先として選択できるので、指定します。

スプレッドシートのカラムとフォームに入力した内容の紐付け等を行います。

これで 公開する を実行すると有効化されます。

Slack のこういう演出良いですよね。

稼働終了のワークフロー

基本的な手順は稼働開始のワークフローと変わらないですが、フォームの作成画面と Add a spreadsheet rowスクリーンショットだけ参考までに載せておきます。

実行してみる

一度動作確認をします。 指定したチャンネルのショートカットに現れました。

選択すると作成したフォームが現れます。

登録するとスプレッドシートに反映されます。

が、ご覧の通り TimeStampDate が空です。

タイムスタンプと日付が自動で登録されるようにする

ここは Google App Script を使います。

スクリプト エディタの画面を開きます。

コード.gs を以下の内容で上書きします。

function addTimeStampAndDate() {
  const rawSheet        = 'raw';
  const headerRow       = 1;
  const timeStampColumn = 1;
  const dateColumn      = 2;
  const typeColumn      = 3;

  const sheet = SpreadsheetApp.getActiveSheet();
  const sheetName = sheet.getName();

  if (sheetName !== rawSheet) return;

  const range = sheet.getActiveRange();
  const col   = range.getColumn();
  const row   = range.getRow();

  if (row === headerRow) return;

  const currentDate = new Date();
  const timeStamp   = Utilities.formatDate(currentDate, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
  const date        = Utilities.formatDate(currentDate, 'Asia/Tokyo', 'yyyy/MM/dd');

  const timeStampCell = sheet.getRange(row, timeStampColumn);
  const dateCell      = sheet.getRange(row, dateColumn);
  const typeCell      = sheet.getRange(row, typeColumn);

  if (typeCell.isBlank()) return;

  if(timeStampCell.isBlank()) timeStampCell.setValue(timeStamp);
  if(dateCell.isBlank()) dateCell.setValue(date);
}

上書きしたら保存します。

次に、作成したスクリプトが、稼働開始の行が追加されたタイミングで発火するようにトリガーを作成します。

トリガーを追加 しましょう。

以下のような設定にします。

再び実行してみる

ワークフローを実行すると、以下のようにタイムスタンプと日付が埋まっていることが確認できます。

view をつくる

本記事はワークフローの紹介をメインとしたいためこちらの詳細は省かせていただきますが、方法としては Spreadsheet の関数を駆使する方法と、GASを使ってセルを埋めていく方法、またそれの組み合わせが考えられます。

最後に

今回は取り上げていませんが、Google sheets のステップには行の追加の他にも行の選択や更新、削除もありますので必要に応じて導入するのも良さそうです。また、公式のアプリのステップ一覧のページ「Turn routine tasks into automated workflows」をのぞいてみると Datadog や Zapier など、有名どころもあります。さらには独自の Slack アプリを作成してワークフローのステップとしての機能をもたすこともできる1 ので内製の業務システムの一部として活用することもできそうですね。 この非常に強力なワークフローのアプリのステップの機能、みなさんも周りの業務でどういう活用ができそうか是非検討してみてください。

We Are Hiring!

クラウドワークスでは働き方の変革に挑戦するエンジニアを募集しています!

Python エンジニア枠もありますのでご興味ある方はお気軽にお声がけください!

www.wantedly.com www.wantedly.com www.wantedly.com

© 2016 CrowdWorks, Inc., All rights reserved.