【GAS】Googleスプレッドシートに入力した内容を都度slackに自動通知させる

仕事でGSS(Googleスプレッドシート)で業務の管理をしているんだけど、他の人が更新したタイミングがわからず、大事な情報を自分だけ見損ねていた・・・なんてことがあったんだ

それなら、GSSを更新したら自動でslackに通知してくれるプログラムを作ったら、解消できそう♪
その方法について説明していくよ

このブログを読むとできるようになること

Googleスプレッドシートを更新したら、slackで自動通知を送ることが可能に

開発環境

GoogleAppsScript
Mac

まずはGSSを用意

今回、3店舗あるレストランで、お客様から受けたクレーム(要望)を一括して共有するGSSを作成しました。

D列にクレーム内容、E列をプルダウン式にして通知送付が選択されたらslackに自動通知する仕組みを作ります。

スプレッドシートの名前を試作ということで「試し」にしました。

ダサくてごめん(笑)

Apps Scriptを開く

コードを書く場所を開きます。

拡張機能→Apps Scriptがあるので、クリック

ロジックを整理

今回のロジックとしてはこのような流れです。

A:対象のスプレッドシートを指定
B:どこのセルを入力したら自動通知させるか指定
C:slackに送付するテキストを入力
D:slackのどのチャンネルに自動通知するか指定
E:トリガーを設定

コードを入力(対象のセルを指定)

いよいよコードを入力していきます。

function myFunction() {
  var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシート
  var activeSheet = activeSpreadsheet.getActiveSheet(); // アクティブシート
  if(activeSheet.getName() != "試し"){
    return;
  }
  var activeCell = activeSheet.getActiveCell(); // アクティブセル

  if(activeCell.getColumn() == 5 && activeCell.getValues() == "通知送付"){
    var newInputRow = activeCell.getRow();
    var taskNo = activeSheet.getRange(activeCell.getRow(), 1).getValues();
    var naiyo = activeSheet.getRange(activeCell.getRow(), 4).getValues();
    // 送信するSlackのテキスト
    var slackText = "@here\n" + "\n" +
    "【新たな3PJ共通依頼事項が得意先よりありました】\n" + "\n" +
    "・追加タスク : No" + taskNo + "\n" +
    "・内容 : " + naiyo + "\n" +
    "https://docs.google.com/spreadsheets/d/1_1cJquP02ltWVTdnJj04hXSuet7dgrIHQMkA2Mducio/edit#gid=0&range=C" + newInputRow;
    sendSlack(slackText);
  }
}

getActiveSpreadsheet()でアクティブなスプレッドシートを読み込み、getActiveSheet()で対象のシートを読み込みます。

activeCell.getColumn() == 5 && activeCell.getValues() == "通知送付")では、

5の箇所に左から数えた列番号・通知送付の箇所に、1行目のタイトルを入力します。

"・内容 : " + naiyo +  "\n"

naiyoは変数になっているので、実際は下記のように表示されます

Webhookの設定

Slackへの投稿を行うには、Webhookの設定が必要になってきます。以下のURLから設定をしてください。
https://my.slack.com/services/new/incoming-webhook/

対象のチャンネルを指定するとURLが発行されます。

これは後ほど使うので、消さずに保存しておいてください。

コードを入力(slackとの連携)

function sendSlack(slackText){
  // Step1で取得したWebhook URLを設定
  var webHookUrl = "ここに先ほどコピペしたWebhook URLを記載";
  
  var jsonData =
      {
        "channel": "#gas",   // 通知したいチャンネル 
        'icon_url' : "https://entershare.jp/wp-content/uploads/2017/11/unnamed.png",
        "text" : slackText,
        "link_names" : 1,
        "username" : "3店舗共通依頼事項通知bot"
      };
  
  var payload = JSON.stringify(jsonData);
  
  var options =
      {
        "method" : "post",
        "contentType" : "application/json",
        "payload" : payload,
      };
  
  // リクエスト
  UrlFetchApp.fetch(webHookUrl, options);
}

var webHookUrl という変数に、先ほどコピペしたURLを記載します。

"channel",'icon_url,"username"をそれぞれ指定

トリガーを設定

トリガーをクリックして、右下のトリガー追加

下記のように、変更します。

実行する関数はご自分のものを選択ください

これで完成!
できているでしょうか・・・

No1のタスクのステータス(E列)を通知送付に変更

#gasチャンネルに投稿されている!!
できたーーーー(´▽`)
(画像が表示されないのは、要改善・・・)

実行までの課題

私はGoogle APIがオフになっていたので、一旦作業が止まりました・・・

実行できない人はここを気をつけてみてね!

これで、誰かがいつGSSを更新しても、情報を見損ねる心配がグッと減りました!
活用してみてね♪