備蓄品リストの賞味期限をチェックし、過ぎていればメールで通知してくれるGoogle Apps Scriptです。非常食は期限が長く、管理を忘れがちなので作ってみました。
備蓄品をGoogleスプレッドシートで管理していれば使用できます。
列の並びが違ったらカスタマイズをお願いします。
サンプルとして、適当な備蓄品リストを作りました。
執筆時点ではビスケット(2030/1/1)以外が期限切れになっています。
次に、コードを少し書き換えます。事前設定エリアの「スプレッドシートのURL」、「シート名」、「通知先メールアドレス」をご自身の環境に合わせて書き換えてください。
このアプリは時間ベースのトリガーで発動させるので、getActiveSpreadsheet()やgetActiveSheet()では取得できないので、ファイルやシートを明示的に指定します。
書き換えて保存したら、関数「onOpen」を一度実行して権限の承認をしてください。
実際はトリガーで実行しますが、一度確認のため手動で実行してみます。
上のメニューにある「スクリプト実行」から「備蓄品の消費期限切れを通知する」を実行します。
事前準備で指定したメールアドレスに、期限切れのリストが届けば成功です。
動作確認もうまくいったので、トリガーで定期的に実行しましょう。
備蓄品は期限も長く月に1度チェックすれば十分ということで、下記のようなトリガーを設定しました。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00069/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
// UIの取得
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('備蓄品の消費期限切れを通知する', 'check_stockpile_expiration_date');
// メニューを画面に追加する
menu.addToUi();
}
function check_stockpile_expiration_date() {
// ########## 事前設定エリアここから ##########
// 備蓄品のデータが書き込まれているスプレッドシートのURLをセットしてください
const spreadsheet_url = 'https://docs.google.com/spreadsheets/d/********************************'
// 備蓄品データが書き込まれているシート名をセットしてください
const sheet_name = '備蓄品リスト';
// 通知先のメールアドレスをセットしてください
const mail_to = 'ここにメールアドレス';
// ########## 事前設定エリアここまで ##########
// スプレッドシートを取得
const ss = SpreadsheetApp.openByUrl(spreadsheet_url);
// シートを取得
const sheet = ss.getSheetByName(sheet_name);
// 書き込まれているデータを取得する
const values = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
// 本日の日付を取得する
const date_today = new Date();
// 期限切れの備蓄品を一旦格納する配列を宣言
const items = [];
// シートのデータを1行ずつ処理する。1行目は項目名のため開始値は1とする
for (let i = 1; i < values.length; i++) {
// A列: 品目
// B列: 数量
// C列: 単位
// D列: 保存場所
// E列: 賞味期限
// 賞味期限を判定する。超過していればメール送信用の文章を組み立てる
if (values[i][4] < date_today) {
let item = values[i][0];
let quantity = values[i][1];
let unit = values[i][2];
let location = values[i][3];
let expire_date = Utilities.formatDate(values[i][4], 'JST', 'yyyy/MM/dd');
items.push('[' + item + '] ' + quantity + unit + '(' + location + ') 期限:' + expire_date);
}
}
// メール本文を作成する
let mail_body = '以下の備蓄品の賞味期限が切れています!\n\n';
mail_body += items.join('\n');
mail_body += '\n\n【備蓄品リスト】\n'
mail_body += ss.getUrl();
// メール送信を実行する
GmailApp.sendEmail(mail_to, '備蓄品アラート', mail_body);
}