google formで発注システムを作ってみる
はじめに
嫁がケーキ販売を始めました。
そこで、誰から何を幾ついつまでにいるんだっけ?という話を耳にしました
なので、簡易でもいいので簡単なシステムを構築できないか?と思い行動した内容です
システム選定
要求仕様
求めすぎると作成に時間がかかるので、
・簡単にフォーム入力を行い、その履歴が確認できること
だけに絞ります。
システム選定
フォームを簡単に作るのであれば、色々なサービスが存在しますが、今回はgoogle formを利用しようと思います(これは、個人的興味からです)
概要や他の類似ツールはこちらに記載されています
履歴に関しては、LINEに通知するようにしとけば履歴として確認できるので、今回はLINE通知を利用します
詳細機能
要求仕様から、最低限以下の通りで作成予定です
- フォームから入力できる
- 各注文にかぶらない(ユニーク)採番をしておきたい
- lineに入力値と合計金額を通知
入力フォームの作成
Google Formsの作成
紫いろのボタンから作成画面に移れます
注文なのでこんな感じに作成
Spreadsheetの連携
formsの回答タブの「スプレッドシートにリンク」から即連携ができます
スプレッドシートの名前に拘りがなければそのまま「作成」
これで連携完了です
Spreadsheetの連携の動作確認
注文フォームから登録し、スプレッドシートに記録されているか検証しときましょう。
ここから公開し、テストデータを入力
テストデータがスプレッドシートに記録されていれば、連携完了となります。
採番設定
このままだと区別するのが難しいので、採番を割り当てます
列を追加します(追加のやり方は割愛)
採番用のスクリプトを作成します
スクリプトは、こちらの記事を参考にしました
function formsFunction() {
var spreadsheet = SpreadsheetApp.openById('<id>');
var sheet = spreadsheet.getSheets()[0];
var range = sheet.getRange(sheet.getLastRow(),1);
if(range.isBlank() == true){
range.setValue("=ROW()-1");
}
}
採番設定の動作確認
実行ボタンを押して、実行ログに「実行完了」となれば、とりあえずスクリプトとしては成功となります。
念のために、スプレッドシート側も確認して、追加した列に番号が入力されていれば成功となります
次にgoogle formsから入力された際に自動でスクリプトが連動するようにします。
左メニューからトリガーを選択し、「トリガーを追加」ボタンを押します
トリガーの発動タイミング(イベントの種類を選択)を「フォーム送信時」に変更し、「保存」ボタンで保存します
LINE Notifyと連携
①空のグループを作成
(皆さん使い慣れてると思いますので、説明は省略し画像のみです)
②LINE Notifyの連携先に①を登録
URLはこちらになります
ログイン後、マイページに飛びます
トークンを発行する際に、①で作ったグループを検索し、発行します
このトークンはどこかにメモしといてください
③LINEグループに、LINE Notifyを招待
(皆さん使い慣れてると思いますので、説明は省略し画像のみです)
google apps scriptを修正
採番するときに利用したスクリプトを修正します
こちらの記事を参考にしました
function formsFunction() {
var spreadsheet = SpreadsheetApp.openById('<id>');
var sheet = spreadsheet.getSheets()[0];
var row = sheet.getLastRow();
var column = sheet.getLastColumn();
var range = sheet.getDataRange();
var message = "";
for(var i=1;i<=column;i++){
const item = range.getCell(1, i).getValue();
if(item == "タイムスタンプ") continue; // タイムスタンプはスキップ
// 採番のための処理
var targetCell = range.getCell(row, i)
if (targetCell.isBlank() == true){
targetCell.setValue("=ROW()-1");
}
message += "\n■" + item
message += "\n " + CreateCellValueToMessage(item , targetCell.getValue());
}
// Logger.log(message);
SendToLine(message);
}
function CreateCellValueToMessage(item , cellValue){
const weekdayJp = ["日", "月", "火", "水", "木", "金", "土"];
var changeCellValue = "";
if ( item == "納入日") {
date = new Date(cellValue);
changeCellValue = Utilities.formatDate(date, 'JST', 'yyyy年M月d日');
changeCellValue +='(' + weekdayJp[date.getDay()] + ')';
} else {
changeCellValue = cellValue;
}
return changeCellValue;
}
function SendToLine(message){
var token = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN');
var op =
{
"method" : "post",
"Content-Type" : "application/x-www-form-urlencoded",
"payload": "message=" + message,
"headers":{"Authorization" : "Bearer " + token}
};
var res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify",op);
Logger.log(JSON.parse(res.getContentText()));
}
トークンの設定
プロジェクトの設定の一番下に「スクリプトプロパティ」があります
そこにトークンを設定し、保存します
LINEメッセージの動作確認
スクリプト部分から、実行ボタンを押すと下記のようにlineに通知が来れば、成功となります
あとは、LINEグループに関係者を呼んで、google formsのURLを伝える形で運用してみようと思います。
最後に
google formsは便利な半面、少し凝った使い方を使おうとしたら不便に感じました。
割り切った使い方をすれば便利に使えると思うので、使い所次第では有効だと思います。
今回は身内のみが利用する機能なので、これでよしとします。
身内で利用してみて、要望が出たら別記事を作成しようかと思います。
Discussion