はじめに
私はスーパーマーケットの惣菜部門で勤務しています。
日々の業務の中で、
- 発注数の入力ミス
- 在庫不足
- 発注しすぎによるロス
- 特売日や棚卸し前後の発注調整
など、発注に関する悩みがありました。
特に忙しい時間帯になると、
「7個のつもりが70個発注してしまった」
というようなヒューマンエラーも起こり得ます。
そこで、身近な業務課題を少しでも改善できないかと思い、GoogleスプレッドシートとGoogle Apps Script(GAS)を使って、発注サポートシステムのプロトタイプを作成しました。
なぜGASを選んだのか
今回使用した技術は、
- Googleスプレッドシート
- Google Apps Script(GAS)
です。
普段から店舗でExcelやスプレッドシートを使用する機会が多く、
- 特別なソフトが不要
- ブラウザだけで利用できる
- 他の人と共有しやすい
- 少しずつ改善しやすい
という点から、周囲を巻き込みながら改善できると思い、この技術を選びました。
課題
惣菜部門では、
- 発注数の入力ミス
- 在庫不足
- 在庫の持ちすぎ
- 適正在庫との差の計算
- 発注日時の記録
など、経験に頼る部分が多くありました。
また、忙しい時間帯には確認漏れも発生しやすく、
「人の判断を補助する仕組みがあればよいのでは?」
と考えたことが今回のきっかけです。
プロトタイプについて
GoogleスプレッドシートとGoogle Apps Scriptを利用して、発注サポートシステムを作成しました。
項目
| 列 | 内容 |
|---|---|
| A | 商品名 |
| B | 現在在庫 |
| C | 発注予定数 |
| D | 前回発注数 |
| E | 適正在庫 |
| F | 警告 |
| G | コメント |
| H | 特売日 |
| I | 棚卸し前 |
| J | 棚卸し後 |
| K | 推奨発注数 |
| L | 発注済み |
| M | 発注日時 |
| N | 納品予定日 |
実装した機能
発注数多すぎ警告
前回発注数の3倍以上の場合、
⚠発注数多すぎ
と表示します。
在庫不足警告
現在在庫+発注予定数が適正在庫に届かない場合、
在庫不足
と表示します。
在庫過多警告
在庫を持ちすぎている場合、
在庫過多
と表示します。
推奨発注数自動計算
以下の計算式で推奨発注数を表示します。
適正在庫-現在在庫
発注済みチェック機能
チェックボックスを押すと、
- 発注日時を記録
- 前回発注数を保存
- 納品予定日を自動計算
できるようにしました。
制作過程
最初は多くの機能を追加しようと考えていました。
しかし、
- 機能が多すぎる
- 現場で使いづらくなる
- メンテナンスが難しくなる
という問題もあると感じました。
そこで、
「まずは必要最低限の機能を作り、実際に使ってもらいながら改善する」
という方針にしました。
プロトタイプの動作画面
これに対してGASで実行を入れると。。。
こうなります!!
- 発注サポート画面
- 警告表示
- 推奨発注数表示
- 発注済みチェック画面
など
発注済みチェック機能
発注済みにチェックを入れると、
- 発注日時を記録
- 納品予定日を自動計算
- チェックを自動解除
する仕組みです。
コードを見る
(コード)
発注済みチェック機能(Google Apps Script)
/**
* 発注済みチェック時
*/
function onEdit(e) {
// Apps Script画面から実行した場合の対策
if (!e) return;
const sheet = e.source.getActiveSheet();
const row = e.range.getRow();
const col = e.range.getColumn();
// 1行目は無視
if (row === 1) return;
// J列(発注済み)
if (col === 10 && e.value === "TRUE") {
// 現在日時
const now = new Date();
// K列(発注日時)
sheet.getRange(row, 11).setValue(now);
// 14時ルール
let addDays = 2;
if (now.getHours() >= 14) {
addDays = 3;
}
// 納品予定日作成
const deliveryDate = new Date(now);
deliveryDate.setDate(deliveryDate.getDate() + addDays);
// L列(納品予定日)
sheet.getRange(row, 12).setValue(deliveryDate);
// チェックを外す
sheet.getRange(row, 10).setValue(false);
}
}
制作中に苦労したこと
Google Apps Scriptの開発では、
SyntaxError: Unexpected token '}'
などの構文エラーが発生し、思うように動かないこともありました。
また、
「機能を増やしすぎると逆に使いにくくなる」
ということも実感しました。
試行錯誤を繰り返しながら、シンプルで使いやすいプロトタイプを目指しました。
今後の予定
今回作成したプロトタイプは、まずは必要最低限の機能に絞っています。
今後は、
- 特売日の補正
- 曜日による発注量補正
- 入荷処理の自動化
- 発注履歴管理
などにも挑戦してみたいと思っています。
想定利用シーン
想定利用者
惣菜部門の発注担当者
利用タイミング
毎日の発注作業時
利用目的
- 発注数の入力ミス防止
- 在庫不足防止
- 在庫過多防止
- 発注判断の補助
利用イメージ
発注担当者が発注前にシステムを実行し、警告や推奨発注数を確認することで、ヒューマンエラーの削減を目指しています。
例えば、
- 「7個のつもりが70個発注してしまう」
- 在庫不足で商品が作れなくなる
- 発注しすぎて原材料が余る
といったミスの予防を目的としています。
使用してもらった方
惣菜部門のチーフ
ヒアリングでいただいたフィードバック
今回、惣菜部門のチーフへアイデアを説明したところ、以下のような意見をいただきました。
① 在庫は0に近い方が理想ではないか
現在のプロトタイプでは「適正在庫」を基準にしていますが、惣菜部門では在庫を持ちすぎること自体がロスにつながるため、在庫削減の視点も必要であると感じました。
② 誰が・いつ・どのように使うのかを明確にする必要がある
便利な機能であっても、利用する場面や価値が明確でなければ定着しにくいという意見をいただきました。
今回のフィードバックを通じて、システムの機能だけでなく、運用方法や現場への定着も重要であることを学びました。
フィードバックから得た気づき
チーフへアイデアを説明したところ、
「惣菜部門では在庫は0、もしくは0に近い状態が理想ではないか」
という意見をいただきました。
今回のプロトタイプでは適正在庫を基準としていましたが、実際の現場では在庫を持ちすぎること自体がロスにつながるため、
「適正在庫を維持する仕組み」
だけではなく、
「在庫をできるだけ持たずに運営する仕組み」
も考える必要があると気づきました。
今後は、在庫削減という観点も取り入れながら改善していきたいと思います。
おわりに
今回、GoogleスプレッドシートとGoogle Apps Scriptを使って、身近な業務課題を解決するプロトタイプを作成してみました。
実際に作ってみることで、
「作ること」だけでなく、
「周囲の人に使ってもらい、改善を繰り返すこと」
の大切さを改めて感じました。
これからも、
まず作る → 使ってもらう → 改善する
というサイクルを大切にしながら、身近な課題の解決に取り組んでいきたいと思います。

