→「いとをかし.net」とは?/お問い合わせ←

【GASコピペでOK】スプレッドシートで在庫管理!一定数下回ったらslackに通知する

GAS-slack

今回ご紹介するのは「Googleスプレッドシートで在庫管理をするとき、残り在庫数が一定数以下になったらslackに通知する」という、けっこう需要があるはずのGASです。コピペでできるので、初心者の方でも大丈夫です。

なお、今回記事を書かせていただくにあたり、下記2サイト様で公開されているコードを大変参考とさせていただきました。ぜひ併せてご覧になっていただく事をオススメします。

 

さて、本題に戻ります。
ここでは以下の表をGoogleスプレッドシートで用意します。

▼こちらの表を参考にどうぞ。(編集はできないですがコピペはできるので、ご自身のシートにペタっとしてみて下さい。なお、下記シートへのアクセスは匿名になりますのでご安心下さい。)
https://docs.google.com/spreadsheets/d/1R5a-LNUY9jl2HrTTvavR24B5AUl9o6WAx-l113cRkuQ/edit?usp=sharing

GAS0

\今回使用する表/

表の説明
  • A列に商品名を記載
  • I列に「入荷数」(100個としています)
  • B~H列には、日ごとの出荷数を記入する
  • J列には、「=I2-(SUM(B2:H2))」という具合で数式を入れており、日ごとの出荷数を記入すると、J列に「残り在庫数」が算出されるようにしています。
    例えばB2セルに「20」と入れると、J列の残り在庫数は「80」になります。

今回のゴール

以下の条件のとき、slack通知をするようにします。

  • 「商品A」の「残り在庫数」が50個を下回ったとき
  • 「商品B」の「残り在庫数」が30個を下回ったとき
  • 「商品C」の「残り在庫数」が70個を下回ったとき

商品ごとに発注の目安がバラバラである、というパターンですね。

コピペでOK!今回使用するスクリプト

とりあえず今回使用するコードのすべてを先出ししておきます。↓
(コメントアウトでメモを多めに残しています。うるさかったらすみません)

function sendSlack() {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //アクティブシート
var sheet = activeSpreadsheet.getActiveSheet(); //アクティブブック
var editedCellRow = sheet.getActiveCell().getRow(); // アクティブセル(つまり在庫が入力されたセル)が何行目にあるかを取得しています
var enterZaiko = sheet.getActiveCell().getValue(); //「enterZaiko」とは、入力した値です。つまり、ここで言う在庫の出荷数ですね。
var afterZaiko = sheet.getRange(editedCellRow,10).getValue(); //「afterZaiko」は、「enterzaiko」入力後のJ列の「残り在庫数」の合計の事です。
var beforeZaiko = afterZaiko + enterZaiko //入力した値(enterZaiko)と、残り在庫数(afterZaiko)を足し合わせることで、在庫数を入力する前の在庫数を求めています。


//webhock URL
let postUrl = "" /**ここだけは自分で記入してね!*/ //webhock URLを""の中にコピペしてください。
let userName = "在庫数お知らせbot" // Slackに通知する時の名前になります。好きに変えてOKです
let icon = ":shopping_trolley:" // 表示されるアイコン。slackで使える絵文字全般を、ここでアイコンとして使用できます
var shohinName = sheet.getRange(editedCellRow,1).getValue(); //商品名ごとに条件分岐させていきます


if(shohinName == "商品A"){
var kizyunchi = 50 //商品Aは、50個を下回ったらslack通知したいので、基準値を50とする
}else if(shohinName == "商品B"){
var kizyunchi = 30 //商品Bは、30個を下回ったらslack通知したいので、基準値を30とする
}else if(shohinName == "商品C"){
var kizyunchi = 70 //商品Cは、70個を下回ったらslack通知したいので、基準値を70とする
}


if(beforeZaiko > kizyunchi && afterZaiko <= kizyunchi){ // 「beforeZaiko > kizyunchi」のif条件を付けていないと、スプレッドシートを編集するたび、在庫数が基準値を下回っている限り延々とslackが飛んできてしまいます。そこで「入力前の在庫数が基準値を上回っていない限りslackを飛ばさない」と条件付けすることで、「基準値を下回ったその瞬間だけslackを飛ばす」というルールにしています。
var slackText = `${shohinName}が残り${afterZaiko}個になりました。下記シートから発注を掛けて下さい!\nURL:「ここに発注書のURLなどを入れると便利です」` //slackのテキスト内容を定めています。
let jsonData = {
"username" : userName,
"icon_emoji" : icon,
"text" : slackText
}
let payload = JSON.stringify(jsonData)
let options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options); //ここでslack通知をしています。
}
else{
}
}

「 /**ここは自分で記入してね!*/」と書いてある場所だけは、自分でURLを調べて入力して頂く必要がありますが、それ以外はとりあえず上記を丸々コピペすればOKです。
(調べ方は後述しますが、slackの「Incoming Webhook 」というものを使用します)

また、

いとう

そもそもこのコード、どこに貼り付けていいのか分からない

という方も大丈夫です。そのあたりも含めて解説していきます。

手順0.表を作る

こちらの表をコピーして、ご自身のスプレッドシートにペーストし、表を用意してください。
(リンク先の表は編集できないので、みなさんのシートにコピペしていただく必要があります。なお、下記シートへのアクセスは匿名になりますのでご安心下さい。)
https://docs.google.com/spreadsheets/d/1R5a-LNUY9jl2HrTTvavR24B5AUl9o6WAx-l113cRkuQ/edit?usp=sharing

GAS0

また地味に重要なのですが、「J2」セルには「=I2-(SUM(B2:H2))」と入力してください。
同様に「J3」セルには「=I3-(SUM(B3:H3))」、「J4」セルには「=I4-(SUM(B4:H4))」と入力してください。

これで表の準備はOKです。

手順1.コードをコピペする

※コードをコピペする場所など既にご存じの方は、ここの章は飛ばして下さい。

 

1.まずスプレットシートの「拡張機能」から、「Apps Script」をクリックします。

GAS1


2.すると早速「スクリプトを書いてください!」と言わんばかりの画面が出てきます。

GAS2

3.すでに記入されている「function~~」などの文字は全て削除し、まっさらにした状態で、先ほどのコードを全てペーストします。

GAS3

\先ほどのコードをすべてペースト/


4.ついでに、プロジェクト名やファイル名も適当に変えておきます(必須ではないです)

GA4


5.ここまで済んだら「保存」をしておきます

GAS5

\ctrl + Sのショートカットでも保存できます/


6.「保存」が終わったら、適当に「デバック」をクリックします

GAS6


7.「承認が必要です」などと表示されるので、「権限を確認」をクリックします

GAS8


8.今使ってるGoogleアカウントをクリックします

GAS9


9.なにやら物騒な画面が出てきますが、「詳細」をクリックしまして、

GAS9


10.「slack通知テスト(安全ではないページ)に移動」をクリックしまして、

GAS10


11.こちらの画面で「許可」をクリックしまして、

GAS11


12.これでようやく、さっきコピペしたコードが実行可能になります。

手順2.「Incoming Webhook」のURLを取得して、上記コードの該当箇所に貼っつける

やる事はいたってシンプルです。
Qiita様のこちらの記事がとても分かりやすいので、ここで詳しく解説するのもアレですが一応解説をば。

1.slackにログインした状態で、以下のURLにログインします

https://my.slack.com/services/new/incoming-webhook/

 

2.こんな感じの画面になるので、ページを下にスクロールしていきます。

GAS20

 

3.「チャンネルへの投稿」というところがあります。
slack通知させたいチャンネルまたは個人を選び、「Incoming Webhookインテグレーションの追加」をクリック

GAS21

 

4.「Webhook URL」が表示されるので、これをコピーします。

GAS23

 

5.コピーした「Webhook URL」を、先ほど貼り付けたコードの「let postUrl = “” /**ここだけは自分で記入してね!*/」にペーストします。
※「Webhook URL」は、””の中にペーストしてください。

ここまででスクリプトは完成しました。もうコードに触ることはありませんのでご安心下さい。

手順3:「トリガーの設定をする」

今回やるのは「在庫表が一定数下回った”とき”、slack通知する」ですので、スプレッドシートの在庫数に変動があったときに上記のコードが実行するようにします。

とは言っても、すごーく簡単なので大丈夫です。(40秒くらいで終わります)

1. Apps Scriptの画面の左側のメニューから、時計みたいなアイコンをクリックします。

GAS12

 

2.画面の右下にある「トリガーを追加」をクリックします。
GAS13

3.何やらズラッと出てきますが、以下のように設定してください。

GAS14

  • 実行する関数を選択」→今回はそのままで大丈夫です。
  • 実行するデプロイを選択」→これもそのままでOKです。
  • イベントのソースを選択」→「スプレッドシートから」でOKです
  • イベントの種類を選択」→「変更時」に変更します

上記が完了したら、「保存」をクリックします

 

ここまでで、全ての設定はおしまいです。お疲れ様でした。

実際にslackが通知されるか確認しましょう!

いよいよslackに通知されるかどうか確認する段階です。

さて、在庫表をもう一度見てみましょう。

GAS0

おさらいですが、今回は上記の表にて、以下3パターンの場合にslack通知が来るようにしています。

  1. 「商品A」の「残り在庫数」が50個を下回ったとき
  2. 「商品B」の「残り在庫数」が30個を下回ったとき
  3. 「商品C」の「残り在庫数」が70個を下回ったとき

 

それぞれ条件を満たすように、適当に数字を入れてみましょう。
例えば1/1に「60個」、出荷したとしましょう。
60と記入します。

GAS24

\「60」と入力/

すると、在庫数は残り「40個」となります。

GAS25

\「商品A」の残り在庫数が50個を下回りました/

そしてslackを確認すると、無事こんな具合でslackの通知が届きました!

GAS26

\slackで通知が来ました!/

ちなみにここのslackのテキスト内容は、以下のスクリプトで設定しています。

var slackText = `${shohinName}が残り${afterZaiko}個になりました。下記シートから発注を掛けて下さい!\nURL:「ここに発注書のURLなどを入れると便利です」`

適宜、お好きなように編集してみて下さい。

 

ちなみに「ここに発注書のURLなどを入れると便利です」というのは、発注書もスプレッドシート等でフォーマットを作っておけば、このslackメッセージから発注書フォーマットに直接アクセスし、すぐ作業ができるからですね。

さらに、少し工夫してスクリプトを組めるようになれば「発注書をPDFにしてGメールで相手に送信する」という事も出来てしまいます。ここまでやれば、作業効率が上がるのは間違いないですね。

 

そんな具合で、ぜひ発展させていってみて下さい!

最後に

筆者が「GAS」というものを初めて知ったとき、最初にやりたかった事がこのような在庫表のslack通知でした。
必死にググってもそれっぽい記事がヒットしなかったので、「なければ自分で作ればいいのよ!」の精神でこの記事を公開しました。

 

おそらくプログラミング経験者の方々からすると、今回ご紹介したコードは拙いものだと思いますが、何かのご参考になればうれしいです!それでは、ありがとうございましたー

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA