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

前回はfunctionオブジェクトについてお話ししました。

今回からやっとブロックの中の関数についてです。

 

まずはスプレッドシートを呼び出す関数

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

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

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

 

前回、functionオブジェクトをふたつ使っているとお話ししましたが、今回からはfunctionオブジェクトのalertDateの中身(ブロック)を見ていきます。

 

SpreadsheetAppオブジェクト

 

alertDateのブロックでは、おおまかにいうと

  1. スプレッドシートの「備品管理」というシートを呼び出し
  2. A列、B列、C列のセルの中身をそれぞれ取得して
  3. 今日の日付も取得
  4. C列の返却予定日が今日の日付と一致していた場合、sendSlackの関数にA列、B列、C列のセルの中身を含むメッセージを送る

という命令を書いています。

 


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を送る
    }
  } 
}

 

今やりたいのは返却予定日になったらSlackにメッセージを投稿するということなので、使いたいのはC列の返却予定日のセルの値とかなんですが、まずスプレッドシートを呼び出さないとセルを取得できないので、スプレッドシートを呼び出しましょう

 

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("備品管理");

 

このふたつは

  1. スプレッドシートアクティブシート(現在のGASを開いたときに使用した元のスプレッドシート)を取得するコードと、
  2. シートを取得するコード

ですね。

 

最初なのでこのまま覚えてしまっていいんですが、もうちょっと詳しく説明します。

 

前回、functionではやりたい処理を全部ひとつのfunctionで書いても、区切って別のfunctionにしてもいいと説明しました。

 

とはいえ、functionの中の一つひとつの処理ではもちろん決まった関数、つまり処理のための決まった命令の書き方を使う必要があります。

 

今回のスプレッドシートを呼び出処理には、SpreadsheetAppという関数を使用します。

そしてさらにいうと、SpreadsheetAppでセルの値を呼び出すには決まった順に処理を行わないとセルの値を呼び出せません

というかどの関数でも上位と下位があるので下位の処理をさせたい場合は上位の処理も呼び出す必要があります…!

 

とりあえず、今はスプレッドシートで何か命令したい場合はSpreadsheetAppが必要なんだってことだけわかっておけば大丈夫です!

 

セルの値を取得するための上位オブジェクト

スプレッドシートの処理ではSpreadsheetAppが必要といいましたが、もちろんSpreadsheetAppだけを宣言しても何もできないので、もっと詳しくGASに命令していきましょう。

 

今やりたいのは、セルの値、例えばC1にある「2025/10/10」という日付を取得したいわけですよね。

 

管理番号、使用者、日付の入った管理表の画像

 

とはいえ、セルの値を取ってこいと命令してもGAS側ではどのセルのことなのか、さらにいえばどのスプレッドシートのどのシートのセルのことなのかわからないので、ちゃんとスプレッドシートやシート、セルを指定してあげる必要があります

 

先ほどお伝えした通り、決まった順に処理を行わないと呼び出せないというのはつまりこのことですね!

 

セルの値を呼び出したい→どのセルから値を呼び出したいのかわからないのでどのセルか範囲を指定したい→どのシートかわからないとセルの範囲が呼び出せないためシートを呼び出したい→どのスプレッドシートかわからないとシートを呼び出せないためスプレッドシートを呼び出したい→スプレッドシートの処理を行うためにはSpreadsheetAppを呼び出す必要がある

 

ということは、GASに命令する順番は

  1. SpreadsheetAppを呼び出す
  2. スプレッドシートを呼び出す
  3. シートを呼び出す
  4. セルの範囲を指定する
  5. セルの値を呼び出す

となるわけですね。

 

数学の証明のように、結論を導き出すために必要な条件をそろえていく感じが近いかなと思います。

目的のものを取得するためには必要な上位オブジェクトをそろえていかないといけないってイメージですね!

 

スプレッドシートの取得

というわけで、まずはgetActiveSpreadsheet()という命令文で、スプレッドシートを呼び出しましょう!

 

getActiveSpreadsheet()のアクティブスプレッドシートが何かというと、現在のGASと紐づいているスプレッドシート、つまりGASを開くために使ったスプレッドシートのことです。

ちょっと意味合いが違うようなのですが、一旦アクティブスプレッドシートはGASに紐づいてるスプレッドシートと覚えてもらえば大丈夫です!

 

このアクティブシートを呼び出したいので、SpreadsheetAppを使って

var ss = SpreadsheetApp.getActiveSpreadsheet();

と書くことで呼び出せます。

 

SpreadsheetAppを呼び出さずに、var ss = getActiveSpreadsheet();と書いてもエラーになるので注意してくださいね!

 

シートの取得

スプレッドシートが呼び出せたので、次は「備品管理」というシートを呼び出します

 

シートを呼び出すためには

getSheetByName("シート名")

の関数を利用します。

 

そのため、

var sheet = ss.getSheetByName("備品管理");

と書くとシートを呼び出すことができます。

ss?SpreadsheetAppじゃないの?という部分は次回説明します…!

 

とりあえず、これで「備品管理」のシートが使えますね!

 

最後の空の()は何?

ちなみに、getActiveSpreadsheet()の最後の()は必要なので書き忘れないよう注意してください

これがないと動きません…。

 

SpreadsheetAppにはないのに何でgetActiveSpreadsheetには空の()がいるの?って感じですよね。

シートの取得と違ってシート名を書いているわけでもないですし…。

 

これは何でgetActiveSpreadsheetでは()が必ずいるかといと、

値を取ってきても書き込む場所がないとその値を記憶することができないから

と理解して大丈夫だと思います。

 

記憶する場所として()を与えてあげている、ということですね。

 

getActiveSpreadsheetの場合、今使っているGASと紐づいてるのでスプレッドシートのURLを指定する必要はないんですが、実際に関数を実行にはURLが必要で、そのURL自体はアクティブスプレッドシートからGASが取ってきてくれるんですけど、URLを記録するところを用意してあげないと、一瞬だけURLを取ってきて終わりになってしまって、最後までURLを使うことができない、だから値をいれる場所である空の()が必要になるわけです。

 

この値を入れる空の()はスプレッドシートに限らず、何かを取ってくるよう命令のときは、毎回ちゃんと値を入れる空の()を用意してあげる必要がある、と覚えてもらえばいいと思います。

ちなみに何かを取ってくる、つまり取得するときはgetからはじまるメソッドを使います。

 

逆にSpreadsheetAppには何で()は必要ないの?って感じですが、SpreadsheetApp自体には値を取ってきたり、値を使ったりするわけではなく、スプレッドシートを動かすためにSpreadsheetAppというAppを呼び出していると考えるといいのかなーと思います。

 

アクティブではない別のスプレッドシートの呼び出し

蛇足ですが、別のスプレッドシートを呼び出したいときはopenByIdメソッドを使います。

openByIdメソッドはスプレッドシートのURLを指定してあげないとどのスプレッドシートを使えば良いのかGAS側が分からなくなるので

var ss = SpreadsheetApp.openById(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx);

のように書きます。

※ xx~の部分はスプレッドシートのURLの【https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit#gid=0】のxxxにしている部分をいれてください。

 

getActiveSpreadsheetと違い()が空じゃないですが、この場合は()の中にURLの値を指定しているのでこれを記憶として最後まで使えるわけですね。

ただopenByIdメソッドは今回は使わないので今すぐ覚えなくて大丈夫です!

 

 

次回はセルの値の取得の前に、よくわからないけど毎回つけているvar(変数)についてです。

 

前回

GAS(Google Apps Script)でコードを実行する方法

コードの細かい説明はいらないので、コードの実行の仕方だけ知りたい人もいますよね

なので、今回もさくっと実行の仕方だけ説明します!

 

Google Apps Scriptでコードを保存・実行する

 

コードの保存

Google Apps Scriptのエディタ(コードを書く最初に開くページ)はスプレッドシートなどとは違い、自動で保存してくれません。

最新のコードを実行するには、実行前にまずは保存をしましょう!

 

プロッピーディスクのマークを押すと保存ができます。

 

 

コードの実行

では、書いたコードを実行していきましょう!

 

「実行」を行う際、function名が実行したいfunction名になっているかを確認してください。

1回の実行でfunctionオブジェクトはひとつしか選べないので、ふたつ以上のfunctionオブジェクトを書いている場合、ほかのfunctionを呼び出しているfunction名をちゃんと選んでくださいね。

 

コードの実行前に

Slackと連動したコードの場合、SlackAppやライブラリの設定や、tokenのスクリプトプロパティへの保存が終わっていることを前提としています。

まだの人はこちらの記事を確認してくださいね。

function名の確認

とくにGASで期限をスプレッドシートからSlackに通知する【その4】 - TAKANASHI'S BLOGよりコードをコピペしている人は、function名がちゃんと「alertDate」になっているか確認してください。

ふたつあるfunctionのうち、function alertDate()function sendSlack(text)を呼び出しているので、function alertDate()を実行することでfunction sendSlack(text)の内容も実行できますが、function sendSlack(text)にはfunction alertDate()を呼び出す関数をいれていないため、function sendSlack(text)を実行してもfunction sendSlack(text)に書いた内容にしか実行できません

つまりfunction名が「sendSlack(text)」になっていると、実行を押してもfunction alertDate()で書いたスプレッドシートを取得したり、メッセージを習得したりといった関数が実行されないんですね…!

 

function名が正しいことを確認したら、「実行」を押してみましょう!

 

アクセス権限の承認

初めて実行をした場合、スプレッドシートなどの自分のデータを使う場合、データのアクセス権限の承認を求められます。

 

スプレッドシートのデータを使うことに問題なければ「権限の確認」をクリックしてください。

 

次に、スプレッドシートなどの権限を承認したいデータを持っているアカウントを選択します。

 

最後に、GASを使ってスプレッドシートのデータを参照や編集、新しいシート、スプレッドシートの作成や削除ができるので、問題ないか聞かれています。

 

GASによってスプレッドシートを自動で操作させたいので、このまま「許可」を押しましょう。

 

すると実行結果を知らせてくれます。

なお、コードが正しく書けていない場合、ここでエラーになり実行が中止されます…!

 

実行完了し、ちゃんとコード内容が実行されていればこれで全て完了です。

お疲れ様でした!

 

とはいえ、このままだと実行したいときは自分で「実行」ボタンを押さないとコードが実行されません。

たとえば毎日朝自動で実行させたい場合、その設定も行う必要があります。

 

簡単なのでそちらもさくっとやっちゃいましょう!

 

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

前回はライブラリの設定を行いました。

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

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

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

 

今回はfunctionオブジェクトについてです。

関数とは

コードでよくみるfunction(関数)、でも関数ってなんなのかよくわからないですよね…。

関数について辞書をみてみるとこうあります。

 

与えられた文字や数値に対し、定められた処理を行って結果を返す機能のこと。表計算ソフトやデータベースソフト、プログラミング言語などで利用される。関数ごとにさまざまな処理が割り当てられており、たとえば、表計算ソフトのExcelで「SUM」という関数を用いると、指定した範囲の合計が求められる。

関数 - 意味・説明・解説 : ASCII.jpデジタル用語辞典

 

わかるようなわからないような感じですが、ExcelスプレッドシートSUM関数のように「合計しろ」という命令に、「合計」で返ってくる一連の処理 のことのようです。

 

しかも、Excelなどでもそうですが、COUNTIF関数とSUM関数を組み合わせて命令できるように、 GASでも複数の命令を組み合わせてしてもいいし、さらにいうと複数の命令をどこで区切るかも自由に決めていい わけです。

 

じゃあその区切り方をどうするかというと、functionオブジェクト、つまり

function 関数名(){ // 処理 }

の処理の部分に何の処理をいれるか自分で決めてコードを書くということです。

 

初心者がわかりやすい感覚として書いていることなので、ちゃんとした説明はほかの方のものを見てほしいですが…!

 

functionオブジェクトの書き方

前回載せたコードでは、functionオブジェクトをfunction sendSlackfunction alertDateのふたつを使用しています。

(オブジェクトというまたわからない用語が出てきてますが、とりあえずfunction { からはじめって } で終わるひとかたまりと思ってください)

 

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を送る
    }
  } 
}

 

これは私がふたつにわけたいと思ってわけているだけで、ひとつにすることもできます。

 


function alertDate() {

  var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); //  トークンを取得
  var channel_id = PropertiesService.getScriptProperties().getProperty('channel_id'); //  チャンネルIDを取得

  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 url = "https://slack.com/api/chat.postMessage"; // slackに投稿するメソッドの呼び出し

   // 投稿内容
   var payload = {
    "token" : token,
    "channel" : channel_id,
    "text" : "今日が返却予定です\n>>>管理番号:" + number + "\n使用者:" + person + "\n返却予定日:" + formatClosingDay; // 通知内容
    };
  
   var params = {
    "method" : "post",
    "payload" : payload
   };

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

} } }

 

つまりひとつのfunctionでどこまで処理を行わせるか自分で決めていいということですね!

ローカル変数やグローバル変数などの兼ね合いで区切り方の規則性はなくはないようですが…。

 

ではなぜfunctionオブジェクトをわけるかというと、 長いコードを書くときにわけた方が分かりやすく、また同じ処理をさせたいときに簡単にできるからなど、 いろいろ都合がいいからのようなんですが、初心者からするとfunctionオブジェクトがふたつあるときは じゃあどうやったらふたつ実行できるの?ってところがわかりにくい と思うので、とりあえず動かしたい!ってことであれば、最初のうちはもう無理やりでもひとつのfunctionオブジェクトに全部書いちゃってもいいかなーと思います。

 

最初のうちはそんなに長いコード書くこともないと思いますので…。

(ちなみにふたつの関数をどうやって実行するかはそのうち後述します!)

 

functionオブジェクトの名前のつけ方

functionオブジェクトは関数なので、関数名の規則に従って先頭小文字のキャメルケースで書くようです。

 

キャメルケースとは、プログラミングなどで英語の複合語やフレーズ(句)、文を一語に繋げて表記する際に、各構成語の先頭を大文字にする方式。語の途中に大文字が出現する様をラクダ(camel)のこぶに例えた表現で、 “JavaScript” や “PlayStation” などの表記がこれに当たる。

キャメルケースとは 【プログラミング】 - 意味をわかりやすく - IT用語辞典 e-Words

 

今回は日付をアラートしたいので"alert date"を使ってalertDateにしています。

 

とりあえず初めて書くときにわかりにくい部分を説明しましたが、なんとなくfunctionオブジェクトについてわかったでしょうか?

とにかくfunctionオブジェクトに処理したいことを書いていくって形がわかれば大丈夫だと思います!

 

次はfunctionオブジェクトの中に書いてある関数について説明します!

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

前回はSlackAppでbotの設定を行いました。

コードを書く前に、botがちゃんと設定できてるかさくっと試すことができるので、今回はその方法についてです。

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

自分がコードを書くときにどこでつまずいてるかわからなくて困ったので、botの設定はちゃんとできてるのかテストしてみると、つまずいてる部分がわかりやすくなるかなーと思いました。

なので、一度ちゃんとbotの設定が試したみたい人やコード実装したものの動かずどこかでつまずいているのかわからない初心者向けの話になります。

 

いいからとりあえず実装を試したい!って人は飛ばしてもらって大丈夫です!

 

SlackAppのメソッドテスターを使ってみる

SlackAppはメソッドが実際にどう動作するのかをテストできるよう、テスターが用意されています。

今回はbotからメッセージ投稿を行いたいので、chat.postMessageのメソッドを使用します。

 

まず、chat.postMessage method | Slack にアクセスし、テスターをクリックします。

 

 

ここでtokenとチャンネルIDの部分を入力することで、コードを書かずにbotから指定のチャンネルに投稿がテストできるわけですね。

 

では実際にテスターでSlackにメッセージを投稿してみましょう!

 

テスターに必須要素を入力する

 

テスターのRequired(必須)とある部分は必ず入力が必要な部分です。

tokenとchannelは必須となっているため、入力していきましょう。

 

tokenは自分の作成したSlackAppのbot tokenをコピペしましょう。

 

 

bot tokenの場所がわからない

以前の記事に記載しているので確認してみてください!

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

 

チャンネルIDについても投稿したいチャンネルのURLからコピペしてください。

 

チャンネルIDがわからない

以前の記事で書いていますので確認してみてください!

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

 

また、今回はSlackにメッセージを投稿したいので、textを書きます。

 

 

最後に、Test methodをクリックすると、メッセージがチャンネルに投稿されたかと思います。

 

これでbotの設定は問題ないことが分かりましたね!

 

もしbotからメッセージが投稿できていない場合、チャンネルIDや tokenを見直してください。

 

それでもできない場合はbotのscopeが間違えている可能性が高いです。

chat:write」になっているか確認してみてください。

scopeの設定の詳細はこちらの記事に書いています。

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

 

投稿したいチャンネルの範囲とtokenがあっているか確認してみてください。

 

まずbotからメッセージを投稿できるよう試してみてくださいね!

 

メソッドの必須要素について

chat.postMethodのテスターでは、tokenとチャンネルIDをセットしました。

 

この必須要素はメソッドによっては違います

 

botに操作させたいほかのメソッドを試したり、tokenやチャンネルIDを入力していない場合のエラーを試したり、コードを書く前やコードがうまくいかない場合に試せるので、ぜひ活用してみてください。

 

以上でbotの設定は問題ないことは確認できたので、次回からはGASの設定とコードを書いていきます。

 

 

前回

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で投稿できるようになりました。

 

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

 

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

 

前回

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

前回はSlackAppの設定を行いました。

 

今回はGAS(Google Apps Script)の設定についてです。

目次

  1. Apps Scriptを開いてみよう
  2. tokenを設定する
  3. Slackのチャンネルもスクリプトプロパティで設定する
この記事はどんな人向け?

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

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

Apps Scriotを開いてみよう

 

まずはスプレッドシートを開きます。

 

ツールバーの「拡張機能」をクリックして、Apps Script」を開きます

 

 

このようにApps Scriptが開けたと思います。

 

 

これでコードを書くことができますね!

 

tokenを設定する

次に、前回SlackAppsでscopeを設定した際、コピーしておいたtokenを設定しましょう。

コード自体に書くこともできますが、あまり見られたくないものなので、スクリプトプロパティに書くといいです。

 

そのため、プロジェクトの設定をクリックします。

 

 

下部にスクリプトプロパティとあると思います。

スクリプトプロパティの追加」をクリックすると、このように「プロパティ」「値」を設定できるようになります。

 

 

コピーしておいたtokenは「値」にいれます。

プロパティはなんでも大丈夫ですが、今回は「SLACK_ACCESS_TOKEN」とします。

 

プロパティはコードに使うものなので、わかりやすい名前にするといいと思います。

 

記入したら、「スクリプトプロパティを保存」をクリックしましょう。

これでコード内でSlackAppで設定したbotを使用できるようになしました!

 

Slackのチャンネルもスクリプトプロパティで設定する

Slackのチャンネルもあまり見られたくないものなので、ついでにbotで投稿したいチャンネルも同じようにスクリプトプロパティで設定しましょう。

 

コードに書くチャンネルはSlackのチャンネル名は変更する場合もあると思うので、チャンネルIDを設定するといいと思います。

 

SlackAppで使用するチャンネルIDは、SlackのチャンネルにアクセスしたときのURLの「C」から始まる最終部になります。

 

 

tokenのようにチャンネルIDを「値」に、プロパティはこちらもなんでも大丈夫ですが、今回は「channel_id」としておきます。

 

ちなみに、上記の画像ではURLが「https://app.slack.com/client/ワークスペース名/チャンネルID」になっていますが

https://ワークスペース名.slack.com/messages/チャンネルID」の場合もあるようです。

 

これでコードを書くための準備が完了しました!

 

次回はいよいよコードを書きましょう!

前回

 

 

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

前回はSlackAppを作成しました。

 

今回はSlackAppの設定についてです。

前回作成したSlackAppの設定をさっそくやっていきましょう。

 

目次

  1. SlackAppの設定
  2. bot投稿までの流れ
  3. App(アプリ)の作成

 

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

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

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

 

Scopesの設定

SlackAppでは、動かすために権限を与える必要があります。

 

権限を与えるには、「OAuth & Permissions」の「Scopes」の設定を行います。

 

OAuth & Permissions」をクリックしてください。

 

 

OAuth & Permissionsのページの少し下のほうへ行くと「Scopes」とあると思います。

 

 

ここに必要な権限を追加していきます。

 

今回はbotでSlackに通知させたいので、Bot Token Scopes」に
chat:write」を追加(Add an OAuth Scope)
しましょう。

 

 

 

これでSlackAppのbotがメッセージを投稿することができるようになりました!!

 

ちなみに、「Scope」と「Bot token」について詳しく知りたい方はこちらを参考にしてみてください。

gasbeginner.hatenablog.com

 

次はGAS(Google Apps Script)を設定していきます。

 

そのために、OAuth & PermissionsにあるBot User OAuth Tokenをコピーしておいてください。

 

 

 

 

前回