【GAS活用術①-3】LINEグループへリマインド通知を自動送信・その3
Google Apps Script (GAS)を、もっと身近に、日々の暮らしに。
前回、手順2までご紹介した、「当番や練習日の前日にリマインド通知をLINEグループへ自動で送る方法」の続きです。
前回は手順2としてLINE Notifyで2つのトークン(対象LINEグループのトークンと自分だけに通知するためのトークン)を取得しました。
今回は手順3としてついにGoogle Apps Script (GAS)の話です。
手順3:Google Apps Script(GAS)でfunction(関数)を作成する
まずはじめにGASでどんな関数を作るのか、概要をみていきましょう。
2023/12/29追記:作成する関数を当初4つにしていましたが、3つに減らしました(sendToGroup関数とsendToMe関数を、notifyPlan関数として集約しました)
今回は、3つの関数を作成します。作成した関数に対し、毎日定時に自動実行するトリガーを設定するのは、また後ほど、手順5で行います。
ではでは、実際のGASのコードを見ていきましょう。
function createMsg() {
// 指定のシート上のデータがある範囲の表示値を表形式(正しくは二次元配列)ですべて取得
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("★シート名★");
let table = sheet.getDataRange().getDisplayValues();
//対象の日付(デフォルトでは明日の日付)を取得
let date = new Date(); //現在時刻を取得
date.setDate(date.getDate() +1); //日付を変更(明日なら+1, 明後日なら+2, 昨日なら-1)
let targetDate = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd'); //日付書式を設定
//二次元配列の中で、0番目の列の値の0文字目から10文字分(yyyy/MM/dd)がtargetDateと同じ行を探す
const index = table.findIndex(row => (row[0].slice(0,10) == targetDate));
if (index != -1){ //条件に一致した行があった(indexが-1でない)場合のみ
let target = { //対象の行を連想配列として定義
date: table[index][0], //キー:dateに対象行の0番目の列の値をセット
category: table[index][1], //キー:categoryに対象行の1番目の列の値をセット
plan: table[index][2] //キー:planに対象行の2番目の列の値をセット
};
//LINEに送るメッセージを生成。文字と変数は+で連結。連想配列はtarget.キーで値を返す。
//文字は""で囲む。改行は\n(\(バックスラッシュ)は日本語キーボードでは¥)
const message = "\n明日、" + target.date + "の"
+ target.category + "の予定をお知らせします。\n"
+ target.plan
+ "\nよろしくお願いします!";
//messageをログに出力
console.log(message);
//messageを戻す
return message;
}
}
function notifyPlan(){
//トークンを設定(自分自身の、またはグループのトークンのどちらかをコメントアウト)
const token = "★自分自身のトークンをここに設定★"; //自分自身のトークン
//const token = "★LINEグループのトークンをここに設定★"; //グループあてのトークン
let msg =createMsg(); //createMSG関数の戻り値をmsgに
if (msg != null) { //createMSG関数が値を戻す(送付対象の予定がある)時だけ
sendLine(msg, token); //msgをtoken宛にsendLine関数で送信
}
}
function sendLine(message,token){
//LINEに通知を送る関数sendLine。1つ目の引数(message)が送る内容、2つ目(token)が送り先
let options = {
"method": "post",
"Content-Type" : "application/x-www-form-urlencoded",
"payload": "message=" + message,
"headers":{"Authorization" : "Bearer " + token}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options);
}
初めて見た人にとっては「なんじゃこりゃ」、Excelのマクロの経験がある人は「マクロみたいなもの?」、スペシャリストからみたら「ここのコードがイマイチ」、、等々、いろいろご意見・ご感想はあるかと思いますが、今回は技術的な説明は一旦省いて、先に進みましょう!
では、上記のスクリプトをコピペする気持ちの準備ができたら、その手順に入っていきます。
スプレッドシートからApps Scriptを起動
Googleドライブから手順1で作成した、スプレッドシートを開きます。
メニューバーから、拡張機能 > Apps Script を選択します。
Apps Scriptのスクリプトエディタが表示されました。ファイル:コード.gsに、「function myFunction」が表示されています。
スクリプトをコピぺして一部修正する
「function myFunction ( ) { }」のところに、上書きする形で上記(↑)のコードをコピぺします。コピーする時は、最後の } までしっかりと。
ちなみに、右上のアイコンをクリックするだけで全体をコピーできます。
スクリプトエディタで一旦、「function myFunction ( ) { }」を消してからペースト。
ペースト後、以下の3箇所(★~★までの間)を修正します。
3行目のシートの名前:"★シート名★" の部分を自分のシート名へ変更。
私は「読み聞かせ予定表」というシート名にしたので、
getSheetByName("読み聞かせ予定表"); と変更します。
38行目の自分自身のトークン:"★自分自身のトークンをここに設定★"のところに手順2で取得した自分自身のトークンをペースト
39行目のグループあてのトークン:"★LINEグループのトークンをここに設定★"のところに手順2で取得したLINEグループのトークンをペースト
注:シート名やトークンは文字列になるので、両端を "(ダブルクォーテーション)で囲む必要があります。" "で囲まれた中(★~★までの間)を変更して、" "は消さないようにしてください。
上記の修正をしたら、「無題のプロジェクト」をクリックして、プロジェクト名を変更しておきます。
スクリプトは自動保存ではないので、明示的に保存する必要があります。ツールバーの保存ボタンでプロジェクトを保存します。
注:この保存の時点でエラーになったら、最後の } がないとか、3箇所の修正をする時に” ”を消してしまっているなどの理由が考えられます。
いざ、実行!・・・と、その前に実行権限の確認・承認
エラーなく、プロジェクトの保存ができたら、試しに関数を実行してみましょう。
ツールバーの「デバッグ」と「実行ログ」の間の"createMsg"と書かれた「実行する関数を選択」のプルダウンをクリックしてみると、3つの関数が表示されます。
今、実行したい関数はこの3つの中の、一番上の"createMsg"関数なので、"createMsg"のまま、実行ボタンをクリックします。
何が起きるかと思ったら、、、「承認が必要です」というダイアログが表示されると思います。
実は、初めてGASのスクリプトを実行する際は、スクリプト実行権限の確認・承認を行う必要があります。
初めてだと戸惑いますが、慣れてくると「またか」という感じで、新しいプロジェクトを初めて実行する時、一回だけなので、さくさくっと実行権限を承認しましょう。
ダイアログ上で「権限を確認」をクリック。
Googleにログイン画面で、自分のアカウントを選択。
次の画面で、「詳細」、「[プロジェクト名](安全ではないページ)に移動」を順番にクリックします。
※ここで「安全なページに戻る」と実行権限の承認はできません。最後の画面で「許可」をクリックすることで、実行権限の承認完了です。
今度こそ実行
それでは、実行するのはcreateMsg関数であることを確認して、再度、実行ボタンをクリックしてみましょう!
スクリプトエディタの下に、「実行ログ」が表示され、"お知らせ 実行開始"と"お知らせ 実行完了"と出力されたら、無事、実行されています。
え?LINE、送られてこないけど??と思われた方、それであってます。createMsg関数には、LINEを送る処理は含まれていないので。
この時点では、まず実行時にエラーにならないことを確認してください。実行時のエラーの原因としては、3行目で違うシート名を指定してしまっている、などの理由が考えられます。
とりあえず無事に「実行完了」するのが確認できたら、今回はこの辺で。次回は手順4としてcreateMsg関数がきちんと動くか、動作確認・テストをします。ついにLINEの通知が自分あてに届くところも確認しますよ。
この記事が気に入ったらサポートをしてみませんか?