今回は、Profit美容室管理の来店予約・売上情報を、Googleカレンダーに更新する機能をご紹介いたします。
個人美容室のオーナーさんは予約の連絡があれば、手書きのスケジュール表を確認し記入されている方が多いと思います。その後、店舗または自宅のパソコンに予約を入力されています。
外出時はスケジュール表を必ず持ち歩くようにされていますが、たまに忘れてしまう事もあるようです。
ある美容室のオーナーさんは、スマートフォンのカレンダーには美容室の予約は入力されておらず、それ以外の予定などを入力しているそうです。美容室の予約を何故入力していないかについては、予定の変更があった時、変更漏れ、間違い、再三の変更、キャンセル等などに対して、①手書きのスケジュール表の訂正、②予約入力の修正、③スマートフォンのカレンダーの修正・・・3つの修正はしたくないし、できないとのことです。
これはもっともであり、修正作業が3つもあれば修正作業自体でミスが発生するリスクが高くなります。
個人事業主の方は、広報・企画、営業、技術、精算、購買、経理、店舗管理・・・加えてパソコンの入力等々全てを一人で行っていますので、余計な作業は極力なくしていきたいと思われることは至極当たり前のことだと思います。
Profit美容室管理にはもともと来店情報をカレンダー形式で予約の表示、追加・修正の指定ができる機能がありますが、それらは店舗または自宅のパソコンでしか利用することができません。
スマートフォンまたはタブレットでのカレンダーとGoogle カレンダーは簡単に同期できるので、
Profit美容室管理の来店情報を一括してGoogle カレンダーに反映させる仕組みを作成しました。
1.指示画面
開始日 : 初期値は、今日の日付がセットされます。
終了日 : 初期値は、最も未来の予約情報の予約日がセットされます。
□ カレンダーのクリアーのみ行う。
来店情報は更新せずにGoogleカレンダーのクリアーのみ行いたい時にチェックをONにします。(初期値はOFF)
2.更新中の画面
1)回数について
Googleカレンダーを更新するためには、GAS(Google Apps Script)を使用します。
GASとは、Googleにて開発された主にGoogleのサービスを自動化するスクリプト言語で、JavaScriptがベースになっているため汎用性が高く、理解しやすい言語です。
Profit美容室管理はファイルメーカーで作られています。
ファイルメーカーの機能の一つであるwebビューアを利用して予約情報を渡し、GASのプログラム(Googleカレンダーを更新)を呼び出しています。
(正確には、GASのシンプルトリガーを利用して、指定したURLをファイルメーカーのwebビューアで再読込することでそれらを動作させています。)
この時、一回で渡す予約情報をMAX10件としています。
2)処理の内容
Profit美容室管理 GAS(Google Apps Script)
------------------------------------- -----------------------------------------------------
(1) カレンダーのクリアー ➝ 受け取った日付範囲の登録されている値を削除
(2) 予約情報の送信(1回目) ➝ 受け取った予約情報よりカレンダーへ更新
・
・
(x) 予約情報の送信(x回目) ➝ 受け取った予約情報よりカレンダーへ更新
最初にカレンダーのクリアーを実行します。
・予約の変更・キャンセルなどがあるため一旦、予定を削除します。
・カレンダーはデフォルトのものではなく、美容室予約として別途作成したものを対象とします。
・指定した範囲のGoogleカレンダーの予約情報が大量にある場合、処理時間が多少かかります。(一件当たり1秒程度sleepさせています。)
次に実際の予約情報を更新します。
・この時、1回あたりMAX10件としてGASに送信しています。
(日付範囲の全ての予約情報を送信するまで繰り返します。)
3.Profit美容室管理のカレンダー
4.Googleカレンダー
本処理を実行するタイミングの例
①手書きスケジュール表に追加または訂正を記入する。
訂正とは、顧客の訂正、来店日の変更、来店時間の変更、キャンセルです。
②追加または訂正した来店情報をProfit美容室管理に入力する。
③一日の終了時に、バックアップを実行する。
④バックアップの後、Googleカレンダーへの更新を実行する。
⑤パソコンの電源を切る。
③④は、基本的に実行ボタンをクリックするだけですから、入力ミスなどは発生しません。
美容室のオーナーさんは、①と②だけに注力していただくことで外出時にもスマートフォンで予約情報を確認することができるようになります。
➢ バックアップについて
メニューの「バックアップ」をクリックすることで以下のファイルを一括して指定されているデバイス、フォルダへコピーします。
(バックアップ先のデバイス、フォルダは管理マスタに事前に設定しています。)
①Profit美容室管理の全てのファイル
ファイルメーカーのファイル(*.fmp12)を指します。
Profit美容室管理では、5つのファイル(*.fmp12)が存在します。
それらを一括してコピーします。
②施術明細書
PDFファイルとして生成された施術明細書
5.補足
1)GASの情報
以下の2つの情報を管理マスタに保存しています。
①webアプリとして生成されたURL
Googleカレンダーに予約情報を更新するGASのプログラムをURLと紐づけることでwebアプリとして利用することができます。
GASの中で「デプロイ」することで生成されたURLを管理マスタにコピペして保管しています。
②カレンダーID
Googleカレンダーにはデフォルトのもの以外にカレンダーを追加することができます。
美容室予約専用のカレンダーを追加し、それらのIDを管理マスタに保管しています。
2)GASへ送信する情報
前述のURLに引数を付加して、webビューアにて読み込みます。
webビューアのwebアドレスには計算式でそれらを設定します。
そのための情報をテーブルに書き込んでいます。
3)webビューアのwebアドレス(計算式)
gGAS_info::Cal_URL &
gGAS_info::Cal_引数_定数0 &
gGAS_info::Cal_引数_制御 &
gGAS_info::Cal_引数_定数1 &
gGAS_info::Cal_引数_Calid &
gGAS_info::Cal_引数_定数2 &
gGAS_info::Cal_引数_開始日 &
gGAS_info::Cal_引数_定数3 &
gGAS_info::Cal_引数_終了日 &
While (
[ i=1;
a=""
] ;
//終了条件
i ≤ 10 ;
//ロジック
[
a = a &
/* 来店1 (顧客名)*/
gGAS_info::Cal_引数_定数41 &
gGAS_info::Cal_引数_定数42_1[i] &
gGAS_info::Cal_引数_定数43 &
gGAS_info::Cal_引数_顧客名[i] &
/* 来店1 (開始日)*/
gGAS_info::Cal_引数_定数41 &
gGAS_info::Cal_引数_定数42_2[i] &
gGAS_info::Cal_引数_定数43 &
gGAS_info::Cal_引数_開始来店日[i] &
/* 来店1 (終了日)*/
gGAS_info::Cal_引数_定数41 &
gGAS_info::Cal_引数_定数42_3[i] &
gGAS_info::Cal_引数_定数43 &
gGAS_info::Cal_引数_終了来店日[i];
i = i + 1
] ;
//結果
a
)
4)注意事項
(以下、Google Workspace管理者ヘルプより)
ユーザーとドメインを不正行為から保護するために、Google カレンダーには使用制限が設けられています。この上限は高めに設定されているため一般的な使用により到達することはまれですが、これを超えた場合、数時間 Google カレンダーが閲覧しかできない状態になる可能性があります。この場合でも予定の閲覧は可能ですが、作成と編集はできません。
注::ユーザーが削除しない限り、カレンダーの予定は無期限に保持されます。
使用制限に関するエラー
カレンダーの使用制限を超えると、次のようなエラー メッセージが表示されることがあります。
・予定を保存できませんでした - 編集できる予定数の上限に到達しています。
・カレンダー使用の上限を超えています - API 呼び出しが原因で発生します。
・変更の保存中に問題が発生しました。数分後にもう一度試してください - メッセージに続き、到達した制限に関する情報が表示されます。
6.ファイルメーカーの外部連携
ファイルメーカーでは外部連携の方法が他にも色々と用意されているようです。
今回は一つの方法をご紹介しました。
私のように長年SEとして、OracleなどのRDBMSを利用し基幹システムを構築してきたものでもファイルメーカーでの設計・開発が非常に楽しいと感じます。
あえて理由を考えてみると、
①実テーブルと仮想テーブル(TO)を区別することで個々の機能毎のデータモデルを作成
・プログラム仕様書を作成する際、最初にその機能を実現させるためのデータモデルを考えますが、ファイルメーカーではTOおよびリレーション作成がそれにあたります。
・仕様書にそれらを記載することを、ファイルメーカーでは視覚的に設定することができます。
②レイアウトの個々のオブジェクトに対して独立して作成したスクリプトを設定
・プログラム仕様書には個々の機能を段階的に記載していきます。
・段階的な機能仕様について、ファイルメーカーでのアプローチは以下になります。
(上位) レイアウトを新規に作成するかどうかを判断する
(中位) 個々のレイアウトに対して必要な機能を分解する
(下位) 分解された機能単位に実際の処理ロジックを想定する
プログラム仕様書を作成する手順と、ファイルメーカーでのアプローチがある程度フィットします。
③スクリプトエディターと関数
これは実際に使ってみなければその良さは実感できないと思います。
それと日本語表記ができるためスクリプトステップの内容が、仕様書の記載内容に非常に近いことが挙げられます。
これは、実装の後に、追加・修正が発生した場合でも以下の対応が可能です。
・プログラム仕様書には追加・修正する概要のみ追記
・スクリプトエディターにて、スクリプト追加および既存スクリプトを修正
SEにより違うのかもしれませんが、私は仕様書を作成する時には、プログラムロジックまで踏み込んで記載することが多々あります。簡単な機能ならば、開発者が10人中10人とも同じ判断をするような文書を記述します。複雑な機能・ロジックの場合、文書表現では齟齬が発生し易くなると判断した時は、プログラムロジックを交えた文書を記述します。
ファイルメーカーのスクリプトをコーディングする際は、強力なスクリプトエディターが記述ミスをチェックしてくれます。それに加えて、ファイルメーカーのスクリプトステップ自体が見やすく、誰でもが同じコーディング内容になり易い仕組みであると言えます。
これは、私が仕様書に複雑な機能としてプログラムロジックを交えた文書を記述する感覚に近いと感じました。
基本設計から詳細設計に落とし込む時、ファイルメーカーを使用するならば、詳細設計(プログラム仕様書)については、①目的、②画面帳票デザイン、③機能(大分類)までを作成し、後は実際にファイルメーカーで作成すれば最短でドキュメントが作成でき、且つリリース後のカストマイズについても最もシンプルで確実なドキュメントの維持管理ができるのではないかと思います。
今回、簡単な外部連携を実装したことで、今後の個人事業主の方にとってのIoT、DX推進の一つの方向性として、ファイルメーカー(クラリス社)の可能性に期待をしたいと思います。
以上です。
P.S
かみゅーのホームページ
https://www.date-systems.com/