HapInS Developers Blog

HapInSが提供するエンジニアリングの情報サイト

【ほぼノーコード】AppSheetでローリングストック忘れがち問題を解決してみた【備えあれば憂いなし】

お世話になっております。サンシャインです。

HapInSアドベントカレンダー2024、12日目です。

blog.hapins.net

昨年のアドカレで、この記事を読んで「こういうのを自分で作ってみたい!」と思ったので、Tryしてみました。

本記事は、弊社googlechatのShare-Techチャンネルのこのコメントに強くインスピレーションを受けています!

作ったもの

最近、災害に備えて防災備蓄をそろえているので、それを管理してみることにしました。 バーコードで簡単に商品を登録できるので、アプリは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(内部的なもので、自分で設定するものとは別!)が必要です。

公式アカウントを作成したLINE Divelopersの画面で、Your user IDが確認できます。

ライブラリ

今回はこちらのライブラリを使用させていただきました。

スプレッドシートを検索するのは、コードで書くとめんどくさい&分かりづらいので、とてもおすすめです。

初めて使ってみましたが、簡単に検索出来て、感動しました。

github.com

DIYって、良いですよね!

勉強も大切ですが、目的を達成するためにあれこれするのって、エンジニアっぽくていいですよね!

弊社、家計簿とか作っている人もいて、とても刺激になります。

また何か作ります!