~賞味期限管理システム 作りたかった…~【第18週】プログラミング未経験者が独学成果物で「1千イイね」とれるまでリアルタイム実況
■もぐもぐ "タイム(リミット)" を管理したい
カーリング女子の快進撃!
このいい流れに私もあやかりたい…
今回も、もぐもぐタイムが話題になっており、どら焼きと干し芋が注目されているようです。
あー、お腹すいた(執筆時、朝ごはん食べてなかった)
食品には付き物の「賞味期限」。(消費期限はもっと大事…)
美味しいものは、美味しいうちに食べたいです。
そうはいっても、期限が切れそうになる商品も出てしまいますよね。
そういうものは値引きされて、私みたいな低所得者のごちそうになったりするわけです。
SDGsの観点から、最近は食品を無駄にしないようコンビニ各社も取組が強化されています。
知人のお店の賞味期限管理の仕組みをざっくり聞いたので、そこから想像してシステムを再現してみようかと思います。
■現状報告
まずはご覧ください。
裏側(SpreadSheet側)でいろいろさせてます。
今回はリッチメニューも活用(タップすると値が入力される)してみました。
後述しますが、未完です。
(もちろん最適化されてないので、余計なフロー等もあると思います。ご了承ください。)
■Node-RED
■GoogleSpreadsheets
入力値
JAN(抜出/文字列)
⇒日付と:で9桁、これを除いたものをJANコードとして扱う
//=LEFT(B1, LEN(B1)-9)
JAN(数値化)
//=VALUE(B2)
⇒VLOOKUP用に数値化
商品名
⇒JANコードから商品名を検索する。リストにないときは×
//=IFERROR(VLOOKUP(B3,H:J,2,0),"×")
更新前日付
⇒JANコードから現状の期限を検索する。リストにないときは×
//=IFERROR(VLOOKUP(B3,H:J,3,0),"×")
更新後日付(元)
⇒:の右側が8桁のときはその8桁、8桁ではない(入力値が不正)のときは×
//=IF(LEN(RIGHT(B1,LEN(B1)-LEN(LEFT(B1,FIND(":",B1)))))=8,RIGHT(B1,LEN(B1)-LEN(LEFT(B1,FIND(":",B1)))),"×")
更新後日付(文字列)
⇒適正値のとき、日付の8桁に/を入れる
//=IF(B6="×","×",LEFT(B6,4)&"/"&MID(B6,5,2)&"/"&RIGHT(B6,2))
更新後日付(数値化)
⇒数値化
//=VALUE(B7)
エラー判定
⇒ここに×が出るかどうかで条件分岐
//=IFERROR(B4&B6,"××")
本日の作業件数
⇒L列の判定件数
//=COUNTIF(L:L,"期限間近")
★仮入力
⇒LINE入力を一旦ここに入れる。この内容によって条件分岐。
K列・L列
検知パターン
⇒商品によって売れる頻度が違うので、対処し始めるタイミングを○○日前と置いた
判定
⇒初期設定シート内に、本日日付を用意。検知パターンの日数を下回っているときは"期限間近"
//=IF(DAYS(J2,'初期設定'!$C$2)<K2,"期限間近","")
function や change ノードは過去記事を参照して頂ければ、再現可能です。
【第15週】~店内案内BOT~
【第16週】~店内案内BOT ver.2 アップデート~
【第17週】~店内案内BOT ver.3 多言語対応~
どうしてもわからない人はコメントしてください(笑)
■肝心な部分、ブンブン…
更新準備が出来たら、JANコードから現在の期限が入力されている位置を特定し、ここに更新日付を上書きしようとしてました。
ですが、GSheetノードでは、可変位置の指定が出来なかった…
(やれる方法あったらだれか教えて…)
viseo bot maker ってのが出してるAPIでは、出来そうな見た目してるんだけど、公式リファレンスとか見ても読み解けなかった…
■それでもどうにかしたい!(今後の方向性)
・プラン1 「GASでAPIを作ってみる」
よく知らんけど、API作れるならそれでよくね?(暴論)
ただ一方で、これから先に活きてくる知識とは言え、ローコードとは言えない領域に…
・プラン2 「Power Appsに切り替える」
Node-RED×LINEBOT にこだわらなくてもいいよねって話。
知人が作成したアプリ見たときに、「こっちの方がやりたいことできるかも」って思いましたし。
今回、掘り下げて条件分岐考えたことで、移行するにしてもやりやすい。
もしかしたら、アウトプットのためのインプットが必要な時期?
来週もがんばります。