GASで期限をスプレッドシートからSlackに通知する【その4】

今回はいよいよコードを書いていきます。

この記事はどんな人向け?

GAS初心者がスプレッドシートをもとにbotで期限をSlack通知した際、ここが困ったなーという部分が結構あったので、そのあたりを軸にまとめてみました。

そのため、同じく初心者で困っている人向けの記事です。

 

どういった通知をしたいか

 

まず、どういったスプレッドシートの表の期限をbotで通知させたいかですが、

私が作りたかったものは以下のような備品の返却予定日でした。

 

 

利用者のいない備品があったり、返却予定日が未定な状態の人がいたりという表から

返却予定日のあるものだけ、返却予定日になったら

管理番号と使用者をbotでSlackに通知させたいというものでした。

 

上記のような表を通知するには空白をスキップさせるためのIF関数が発生するので

初心者が一気にやるにはあまり向いていないかなと思います。

(私自身がどこでつまずいたのかわからない状態に陥ったので・・)

 

そのため、一旦返却予定日(期限)に空白がない場合を想定したコードを組んでみるといいと思います!

 

期限の決まった備品やタスクを通知させる

以下の表の返却予定日になったら、「管理番号」と「使用者」をSlackに通知するようにコードを書いていきます。

 

 

「管理番号」や「使用者」には、「タスク」と「担当者」など別の項目をいれても大丈夫です!

 

コードにしか用はない方もいると思うので、さくっとまずはコードだけ載せちゃいますね。

 


function sendSlack(text) {

    var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); //  トークンを取得
    var channel_id = PropertiesService.getScriptProperties().getProperty('channel_id'); //  チャンネルIDを取得
    var url = "https://slack.com/api/chat.postMessage"; // slackに投稿するメソッドの呼び出し

   // 投稿内容
   var payload = {
    "token" : token,
    "channel" : channel_id,
    "text" : text
   };
  
   var params = {
    "method" : "post",
    "payload" : payload
   };

  // Slackに投稿する
  UrlFetchApp.fetch(url, params);
}

function alertDate() {

  var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブシート取得 
  var sheet = ss.getSheetByName("備品管理"); // シートを指定

  
  // ループ数定義 
  var firstRow = 2; // スプレッドシートの2行目から
  var lastRow = sheet.getLastRow(); // 最終行を習得

  // アラート対象日フォーマット
  var date = new Date(); // 日付を習得
  var remindDate = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd'); // 今日の日付を文字列に

  for(var i = firstRow; i <= lastRow; i++) {
    // 各項目取得
    var number = sheet.getRange('A' + i).getValue();
    var person = sheet.getRange('B' + i).getValue();
    var closingDay = sheet.getRange('C' + i).getValue();

    var formatClosingDay = Utilities.formatDate(closingDay, 'JST', 'yyyy/MM/dd'); // C列の返却予定日を文字列に

     // アラート内容
    if (formatClosingDay === remindDate){ // remindDateとformatClosingDayが一致するなら

    var text = "今日が返却予定です\n>>>管理番号:" + number + "\n使用者:" + person + "\n返却予定日:" + formatClosingDay; // 通知内容

    sendSlack(text); // sendSlack関数にtextを送る
    }
  } 
}

 

コードはこちらの方を参考にさせていただきました

Google Apps ScriptからSlackにリマインド通知を送る – NoCodeFreaks

 

ライブラリを設定する

コードだけ見ている人にも必ずやってほしいのですが

今回書いているコードはライブラリによって簡略化しています。

 

ライブラリとは、自分の書いた関数をスクリプトにすることで

さらにみんなに公開してくれているものを今回は使用します。

 

スクリプトは前回設定しましたが、ライブラリで公開されているものは

tokenやチャンネルIDなどのような文字列ではなく、関数をスクリプトにしてくれています。

GASで期限をスプレッドシートからSlackに通知する【その3】 - TAKANASHI'S BLOG

 

今回はSlackAppさんのライブラリを使用したコードになるので

SlackAppというライブラリを読み込まないとbotが投稿できません。

 

github.com

 

なので、さっそくライブラリを追加しましょう!

 

ライブラリを追加するためには、ライブラリの「+」の部分をクリックします。

 

スクリプトIDを入力し、SlackAppというライブラリを検索します。

 

スクリプトID:1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq

 

 

 

検索出来たら、追加をクリックしてライブラリを追加してください。

 

バージョンは22が最新のようなので、22のままで大丈夫です。

 

これでfunctionを実行すればSlackに期限をbotで投稿できるようになりました。

 

次回からはコードの詳しい内容を見ていきます!

 

コードの説明はいらん!実行を試させろ!って人はこちらをどうぞ!

 

前回