
お世話になっております。サンシャインです。
HapInSアドベントカレンダー2024、12日目です。
昨年のアドカレで、この記事を読んで「こういうのを自分で作ってみたい!」と思ったので、Tryしてみました。

作ったもの
最近、災害に備えて防災備蓄をそろえているので、それを管理してみることにしました。 バーコードで簡単に商品を登録できるので、アプリはAppSheetで作ることに。
防災備蓄は賞味期限が長すぎて忘れそうなので、賞味期限のタイミングでLINE通知が飛ぶようにしました。


通知部分の作成
作成の注意点として、LINE Notifyは来年3月にサ終してしまうので、公式アカウントを自分で用意する必要がありました。
https://notify-bot.line.me/closing-announce
ソースコード
Google Apps Scriptで作成しました。
const LINE_URL_PUSH = "https://api.line.me/v2/bot/message/push";
// スクリプトプロパティを取得
const scriptProperties = PropertiesService.getScriptProperties();
const MY_LINE_USER_ID = scriptProperties.getProperty('MY_LINE_USER_ID');
const ACCESS_TOKEN = scriptProperties.getProperty('ACCESS_TOKEN');
const SPREAD_SHEET_ID = scriptProperties.getProperty('SPREAD_SHEET_ID');
function notification() {
// 明日を取得
let baseDate = new Date();
baseDate.setDate(baseDate.getDate() + 1);
// deadLine < baseDate を取得
const findResult = getNames(baseDate);
// LINE通知
findResult.forEach(function(key){
const postData = {
"to": MY_LINE_USER_ID,
"messages": [
{
"type": "text",
"text": key.name + "の期限が切れそうだよ",
}
]
};
const headers = {
"Content-Type": "application/json",
'Authorization': 'Bearer ' + ACCESS_TOKEN,
};
const options = {
"method": "post",
"headers": headers,
"payload": JSON.stringify(postData)
};
//PUSH送信
UrlFetchApp.fetch(LINE_URL_PUSH, options);
});
}
function getNames(baseDate){
const sql = SpreadsheetSQL.SQL(SPREAD_SHEET_ID, "Inventory");
sql.select(["name"]);
sql.where(
[
"deadLine", //カラム名
"<", //関係子
baseDate //値
]
);
return sql.get();
}
トリガーの設定
トリガーは以下のように設定しました。
が、月1チェックとかで十分な気がします。

スクリプトプロパティの設定
APIキーなどは隠したいのでスクリプトプロパティに設定しました。

ここで、自分のLINEのユーザーID(内部的なもので、自分で設定するものとは別!)が必要です。

ライブラリ
今回はこちらのライブラリを使用させていただきました。
スプレッドシートを検索するのは、コードで書くとめんどくさい&分かりづらいので、とてもおすすめです。
初めて使ってみましたが、簡単に検索出来て、感動しました。
DIYって、良いですよね!
勉強も大切ですが、目的を達成するためにあれこれするのって、エンジニアっぽくていいですよね!
弊社、家計簿とか作っている人もいて、とても刺激になります。
また何か作ります!