Slackにスプレッドシートの変更がある度に内容を通知する方法

Googleスプレッドシートでチームの管理表を作っていて、その内容をSlackに送って通知を受け取りたいと思ったことはありませんか?
 

今回は、GoogleAppScriptを使ってSlackに変更内容を通知する方法を、画面キャプチャ付きで説明します。
 


Slackへスプレッドシートの変更を通知するにはGoogleAppScriptが必要

スプレッドシートの変更をSlackへ通知するには、GoogleAppScriptを介する必要があります。
 

Slackにメッセージを送るため、Slack側の準備としてWebhookを受け取れるようにしましょう。
 

前準備として、Slack側のWebhookを作成する方法とGoogleAppScriptの起動方法を解説します。
 

Slack側の準備

まずはWebhookを作成するところから始めましょう。
 

Slack画面左上の下三角をクリックするとメニューが表示されますので下の方にある「Slackをカスタマイズ」をクリックします。
 

 

すると、以下のような画面が開くので、左メニューにある「APP管理」を開いてください。
 

 

Appの管理画面が開くので「Incoming WebHooks」という文字列で検索し、「着信 Web フック」が出てきたら選択します。
 

 

アイコン下の「設定を追加」をクリックしましょう。
 

 

表示された画面の「チャンネルへの投稿」でコンボボックスから、メッセージを送りたいチャンネルを選択して、「着信Webフックインテグレーションの追加」を行います。
 

 

次に画面が表示されるため、必要に応じて、説明ラベルや名前、アイコンをカスタマイズしましょう。今回は、名前を「test_webhook」にしました。
 

 

「説明ラベル」上部にある「Webhook URL」は覚えておきましょう。このURLを使って、GoogleAppScriptからSlackにアクセスします。
 

 

ここまでで、Slack側の準備は完了です。
 

GoogleAppScriptの画面を開く

次に、GoogleAppScriptの画面を開きます。
 

適当な場所にGoogleSpreadSheet(以降スプレッドシート)を作成して、テスト用のデータを以下のように入力します。
 

 

スプレッドシートの「ツール」メニューから「スクリプトディタ」を開きましょう。
 

 

ここまでで、スクリプトを作成する画面までたどり着きました。続けて、スクリプトを実際に作ってみましょう。
 

GoogleAppScriptでスクリプト作成

GoogleAppScriptにてスクリプトを作成する方法を説明します。
 

スプレッドシートが変更されたら値を取得するよう設定

スプレッドシートが変更されたらスクリプトが起動するように設定するのは、スクリプトエディタから可能です。
 

「編集」メニューの中にある「現在のプロジェクトのトリガー」を選びましょう。
 

 

「確認」ボタンを押して先に進みます。
 

 

すると、ダイアログがでてくるので、そこで以下のように設定してください。これで、指定した関数が、スプレッドシートの変更に反応して起動します。
 

 

ここまで終わったら、スクリプトを作成しましょう。
 

まず、スプレッドシートの値を取得します。今回は、「仕事の進捗」が変更されたら通知するメソッド「createSendMessage」を作りました。
 

変更されたセルがD列=「仕事の進捗」なら、その行のデータを返すという仕様です。
 

function createSendMessage(){
var time = new Date();
var month = time.getMonth() + 1;
var day = time.getDate();
var today = month + “月” + day + “日”
var postText;

var notifySheet = SpreadsheetApp.getActiveSpreadsheet();

//アクティブセルを取得する
var myCell = notifySheet.getActiveCell();

//アクティブセルがD列の場合(仕事の進捗)のみ通知する
if(myCell.getColumn() == 4){
var rowNum = myCell.getRow();
this.postText =
“(” + today + “)ステータスの変更がありました\n” +
“仕事名  :” + notifySheet.getRange(“B” + rowNum).getValue() + “\n” +
“仕事量  :” + notifySheet.getRange(“C” + rowNum).getValue() + “\n” +
“仕事の進捗:” + notifySheet.getRange(“D” + rowNum).getValue() + “\n” +
“作業者  :” + notifySheet.getRange(“E” + rowNum).getValue() + “\n”;
}
}

 

Slack側に取得した値を送る

次に、Slack側に取得した値を送るための関数「postSlack」を作成します。
 

以下の太字の部分は、それぞれWebhookURLとメッセージを送りたいチャンネル名に変更してください。
 

function postSlack(text){
var url = “Webhook URL”;
var options = {
“method” : “POST”,
“headers”: {“Content-type”: “application/json”},
“payload” : JSON.stringify({
  “channel” : “Slackのチャンネル名(DMの場合は@を忘れないこと)”,
  “text” : text,
  })
};
UrlFetchApp.fetch(url, options);
}

 

完成したスクリプト

以下、完成形のスクリプトです。
 

var postText;

/*
** GoogleSpreadSheetの変更をSlackに通知する関数
*/
function postSheetChange(){

//自作の関数:slackに通知する文字列を作成
createSendMessage();
//slackに通知する文字列を設定
var postText = this.postText;
//自作の関数: textをslackに通知する関数を呼び出す
postSlack(postText)
}

/*
** textをslackに通知する
*/
function postSlack(text){
var url = “Webhook URL”;
var options = {
“method” : “POST”,
“headers”: {“Content-type”: “application/json”},
“payload” : JSON.stringify({
“channel” : “Slackのチャンネル名(DMの場合は@を忘れないこと)”,
“text” : text,
})
};
UrlFetchApp.fetch(url, options);
}

/*
** Slackに返す文字列を生成
*/
function createSendMessage(){
var time = new Date();
var month = time.getMonth() + 1;
var day = time.getDate();
var today = month + “月” + day + “日”
var postText;

var notifySheet = SpreadsheetApp.getActiveSpreadsheet();

//アクティブセルを取得する
var myCell = notifySheet.getActiveCell();
//アクティブセルがD列の場合(仕事の進捗)のみ通知する
if(myCell.getColumn() == 4){
var rowNum = myCell.getRow();
this.postText =
“(” + today + “)ステータスの変更がありました\n” +
“仕事名  :” + notifySheet.getRange(“B” + rowNum).getValue() + “\n” +
“仕事量  :” + notifySheet.getRange(“C” + rowNum).getValue() + “\n” +
“仕事の進捗:” + notifySheet.getRange(“D” + rowNum).getValue() + “\n” +
“作業者  :” + notifySheet.getRange(“E” + rowNum).getValue() + “\n”;
}
}

 

作成したスクリプトが機能しているかを確認

見出し②で作成したスクリプトが機能しているかどうかを確認してみましょう。
 

作成したスプレッドシートのD列を変更してみてください。初めて動かしたときには、このようなダイアログが出ます。
 

 

ここでは、順番に赤く示したところをクリックしていけば、無事にスクリプトが動くようになります。
 

 


 


 


 


 

ここまでの手順は、スクリプトを最初に動かすときのみ必要です。ここまで進むと、Slackに通知が入ることが確認できます。
 


 

このように表示されていたら成功です!
 

お疲れ様でした。
 

まとめ

このように、GoogleAppScriptが使えるようになると、Slackがさらに使いやすくなります。
 

スプレッドシートを進捗管理表としてよく使うという方は、ぜひこのスクリプトを活用してみてくださいね。

Slack連携でさらに業務効率化へ

クラウド受付システムRECEPTIONISTは、Slackを介してお客様の来訪を担当者に直接お知らせします。これまでの取次業務がなくなり、無駄な時間をカットすることで仕事にもっと集中できます。

詳細を見る!

Slack integration
スラック連携

NEW
新着記事