2022/04/16に更新

【GASで防災】備蓄品の賞味期限切れを通知する

スプレッドシート業務改善

備蓄品リストの賞味期限をチェックし、過ぎていればメールで通知してくれるGoogle Apps Scriptです。非常食は期限が長く、管理を忘れがちなので作ってみました。

こんな悩みを解決します


  • 災害に備えて備蓄しているが、賞味期限の管理がめんどくさい。

用意するもの


備蓄品をGoogleスプレッドシートで管理していれば使用できます。
列の並びが違ったらカスタマイズをお願いします。

このスクリプトで出来ること


  • 賞味期限が切れた備蓄品を、メールで通知することができます。
  • トリガーで実行することで、任意の間隔でチェックすることが可能です。

使い方


1.事前準備

サンプルとして、適当な備蓄品リストを作りました。
執筆時点ではビスケット(2030/1/1)以外が期限切れになっています。

次に、コードを少し書き換えます。事前設定エリアの「スプレッドシートのURL」、「シート名」、「通知先メールアドレス」をご自身の環境に合わせて書き換えてください。
このアプリは時間ベースのトリガーで発動させるので、getActiveSpreadsheet()やgetActiveSheet()では取得できないので、ファイルやシートを明示的に指定します。

書き換えて保存したら、関数「onOpen」を一度実行して権限の承認をしてください。

2.動作確認

実際はトリガーで実行しますが、一度確認のため手動で実行してみます。
上のメニューにある「スクリプト実行」から「備蓄品の消費期限切れを通知する」を実行します。

事前準備で指定したメールアドレスに、期限切れのリストが届けば成功です。

3.トリガーの設定

動作確認もうまくいったので、トリガーで定期的に実行しましょう。
備蓄品は期限も長く月に1度チェックすれば十分ということで、下記のようなトリガーを設定しました。

  • 実行する関数: check_stockpile_expiration_date
  • 実行するデプロイ: HEAD
  • イベントのソース: 時間主導型
  • 時間ベースのトリガーのタイプ: 月ベースのタイマー
  • 日を選択: 1日
  • 時間を選択: 午後8時〜9時

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * 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);

}

関連するアプリ


関連するアプリはまだありません

タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp