はじめに
フリーランスになってから、曜日感覚がずれだし、
ゴミ出しを忘れることが多くなってきました。
「今日燃えるゴミの日だった!!(a.m.11:00)」
「毎回資源ごみの日を忘れ、Amazonの段ボールが物置にたくさん。。」
いや、毎朝確認すれば当たり前に出せるだろと。
ただ自分のような曜日感覚なし+重度のめんどくさがりな人間には
無理な話です。確認行為自体を忘れるのです。
さて、とはいっても家にゴミを置いておきたいわけではないですし、
できることならゴミは常に少ない状態で暮らしたいものです。
そこで今回は、
「ゴミ出し前日に翌日のゴミの種類を通知」
してくれるLINEチャットボットをGASとともに作っていこうと思います。
LINE Developersでアカウント作成
まずは、ゴミ出しをリマインドしてくれるアカウントを作成します。
「LINE Developers」でググれば公式のものが出てくると思います。
念のため、URLを貼っておきます。LINE Developers
上記アクセスできたら、自分のLINEアカウントなどでログインをして、
「コンソール」→「プロバイダー」を開きます。
プロバイダーを作成する必要があるので、「作成ボタン」から
プロバイダー名を適当に決めて作成をします。
プロバイダーが作成できたら、「チャネル設定」→「Messaging API」
を選択し、新規チャネルの作成を行います。
チャネルの作成が完了したら、チャネルの「Messaging API設定」のタブを
開き、QRコードから友達追加、チャネルアクセストークンの発行を行います。
チャネルアクセストークンは後々GASで使用するので、
大切に保管しておいてください。
GAS(GoogleAppsScript)でゴミ出し通知を行う処理を書く準備
ゴミ出しをリマインドしてくれるアカウントができましたら、
いよいよプログラムを書いていきます。
Googleドライブを開き、「+新規」→「その他」→「Google Apps Script」
を選択し、新規ファイルを作成します。ファイル名は自由につけて構いません。
まずはチャネル・ユーザ情報の取得、曜日、曜日毎のゴミの種類を設定します。
// チャネル・ユーザ情報の取得
var CHANNEL_ACCESS_TOKEN = 'チャネルアクセストークン';
var USER_ID = 'ユーザID';
// 曜日の設定
var weekDayList = ["日", "月", "火", "水", "木", "金", "土"];
// 曜日毎ゴミの種類の設定
var garbageCalendar = {
"日" : "",
"月" : "可燃ごみ",
"火1" : "その他プラ",
"火" : "資源ごみ・有害ごみ",
"水" : "リサイクルプラ",
"木" : "可燃ごみ",
"金1" : "大型ごみ(予約制)",
"金" : "不燃ごみ",
"土" : "",
};
CHANNEL_ACCESS_TOKEN、USER_IDはLINE Developersで確認できますので、
参照し、値を貼り付けてください。
次に曜日の設定(weekDayList)についてです。
GASではgetDay()関数で曜日を取得するのですが、
日曜日を基準とした0から始まる数字を返すので、
それに沿った文字列の曜日リストを作成します。
最後に、曜日毎ゴミの種類の設定(garbageCalendar)についてです。
こちらは、weekDayListの値をキーとしてゴミの種類を設定しています。
そのため、キーとなる曜日の箇所と曜日のリストの値は統一させる必要があります。
ちなみに、火曜と金曜には、1とついたもの、ついていないものがありますが、
これは第n週かによって出すゴミの種類が変わるものを想定しています。
詳しくは後述しますが、不要な方は1とついているものは消して構いません。
翌日の曜日を取得して、ゴミ出しのリマインダ関数を作る
まずは曜日に合わせてLINEメッセージを送信するコードを作ります。
function garbageReminder() {
/*
ゴミ出しのリマインダ関数
*/
// 通知タイトルの設定
var message = "【明日のゴミ出し】\n";
// 翌日の曜日を取得
var nextDate = new Date();
nextDate.setDate(nextDate.getDate() + 1);
var nextDateNum = nextDate.getDay();
var weekDay = weekDayList[nextDateNum];
// ゴミの種類を取得
var garbageType = garbageCalendar[weekDay];
if (garbageType != "") {
message += "明日は「${garbageType}」の日です。\n寝る前にゴミを出さないと!".replace('${garbageType}',garbageType);
}else{
message += "明日は「ノーゴミ出しデー」です。"
};
sendToLine(message);
}
① var nextDate = new Date();
new Date()で現在の日時情報をnextDate変数に代入しています。
② nextDate.setDate(nextDate.getDate() + 1);
プログラムは基本的に右から読んでいくのでつまり、
現在の日時情報が入っているnextDateからgetDate()で日だけを取得し、
そこに+1日、つまり翌日をnextDateに代入しています。
③var nextDateNum = nextDate.getDay();
getDay()は曜日を数字で返すので、nextDate(翌日)の曜日を数字で取得し、
nextDateNumに代入しています。
④var weekDay = weekDayList[nextDateNum];
var garbageType = garbageCalendar[weekDay];
曜日の文字列が入った配列から対象の曜日を取得し、
対象の曜日からゴミの種類を取得しています。
⑤ifの処理
ゴミ出しの日には種類とゴミを出す旨の通知をしたいので、
ゴミの種類を取得している変数、garbageTypeの値が空文字でなければ、
なんのゴミの日かのメッセージを定義しています。
空文字であれば、翌日はゴミ出しをしなくていいので、
メッセージはなくてもいいですが、今回は、
「明日は「ノーゴミ出しデー」です。」メッセージを定義しています。
⑥sendToLine(message);
後述しますが、ラインにメッセージを送る関数を定義し、
この関数呼び出しによって、メッセージがラインに送られます。
実際にLINEにメッセージ送る関数を作る
これまでで、翌日の曜日から出すゴミの種類を取得し、
メッセージを作成するところまできました。
では実際にメッセージをLINEで送信する関数を作成しましょう。
function sendToLine(message) {
/*
ラインにメッセージを送信する関数
*/
// パラメータ設定
var url ='https://api.line.me/v2/bot/message/multicast';
var headers = {
'Content-Type':'application/json; charset=UTF-8',
'Authorization':'Bearer ' + CHANNEL_ACCESS_TOKEN
};
var data = {
'to': [USER_ID],
'messages' : [{
'type' : 'text',
'text' : message
}]
};
var options = {
‘method’:’post’,
‘headers’:headers,
‘payload’:JSON.stringify(data)
};
// LINE messanger APIを実行
UrlFetchApp.fetch(url, options);
}
この関数は、LINEにメッセージを送るための、決まり文句のようなものです。
簡単に言えば、LINEに送信するための設定などを行っているのですが、
説明すると長いのと、今回あまり重要ではないので、説明を端折ります。
気になる方は、公式リファレンスをご参照ください。
(本当はめんどくさいのもありますが。)
動作確認をしてみる
さて、ここから現状の動作を確認してみましょう。
そのための準備を、以下の手順で進めます。
①トリガーを追加する
動作するコードにはなったのですが、今のままだとコードが動くきっかけが
ありません。そのため、GASで設定できるトリガーを追加していきます。
「サイドバーの時計マーク」→「トリガーを追加」を開き、
下画像のように設定し、保存してください。
Googleの承認要求などがでますので、許可してください。

今回はすぐに確認を行いたいので時間の間隔を今回1分にしていますが、
自由に変えていただいてもかまいません。
ちなみにサイドバーのトリガーの下にある「実行数」を開くと、
指定した時間毎に関数が実行されているのを確認できます。
ステータスが「完了」となっていると問題なくコードが動いていますが、
エラーが出ている場合、どこかでミスが起きているので、
再度コードの確認をしてみてください。
②GASファイルのデプロイ
「デプロイ」→「新しいデプロイ」を開き、
デプロイの種類を「ウェブアプリ」にします。

設定の説明文を適当に入れて、アクセスできるユーザを「全員」にします。
アクセスできるユーザをデフォルトのまま「自分のみ」にしていると、
うまくLINEと連携できないので注意してください。

デプロイが完了すると、「ウェブアプリ」のURLが発行されますので、
これをコピーしておきます。
そして、LINE Developersの「Messaging API設定」→「Webhook」を有効かし、
「Webhook URL」に先ほどのURLを貼り付けます。
そして、「検証」をクリックし、「成功」とダイアログが出ることを
確認してください。

これでLINEチャットボットからメッセージが来ると思います。
続きは次回の投稿へ
この記事で完結しようとしたのですが、
かなり長くなってきましたので、次回の投稿で続きを書きます。