🧠 概要:
概要
この記事では、AppSheetを使った予約システムの構築について紹介されています。特に社用車の予約を管理する方法に焦点を当て、ダブルブッキングを防ぐ機能や使い勝手に関する詳細な説明がなされています。また、シンプルなデータベースの構築とアプリのユーザーインターフェース(UI)の作成プロセスも示されています。
要約(箇条書き)
- 予約システムの必要性: 会議室や社用車の管理が重要で、紙での管理が非効率的。
- AppSheetのメリット: 効率的なシステムによってダブルブッキングを防ぐ。
- 基本的な使い方:
- 車両選択 → 予約日時の確認
- 予約ボタンタップ → 予約フォームの入力
- 予約履歴を管理し、運転日報や給油報告が可能。
- 運転日報と給油のレポート: 予約後に運転日報を提出し、給油履歴の管理が可。
- データベースの構築: 車両やスタッフの情報を別エンティティとして管理、データ重複を防ぐ設計。
- ダブルブッキング防止機能: 予約できる時間をリスト形式で管理し、既存の予約を自動的に排除。
- ユーザーインターフェースの設定: 車両一覧や予約履歴の画面を作成し、予約状況の視覚化を図る。
- 汎用性: 社用車に限らず、他のシェアリングシステムに応用可能。
会議室や社用車の管理は必須。でも紙で管理するのもイヤ。そんな状況ならAppSheetが便利です。
私もGoogleカレンダーをうまく使った会議室の予約システムを利用していましたが、ダブルブッキングを防げるので便利でした。
本では、AppSheetを使って社用車の予約システムを開発していきます。役に立ったら❤を、わからないことはXのDMで質問してください。
車両予約システムの使い方
🚘️車両を選択
まずは予約したい車両を選択します。車両ごとに予約済みの日時が表示されています。希望の日時が空いているかを確認します。
空いている車両を選択する
📅車両の予約
車両の詳細ページを開いて、車両予約ボタンをタップします。
車両予約ボタンをタップ
フォームが立ち上がるので、予約時間を選択します。車両名と予約者は自動入力されます。
予約フォームを入力していく
予約時間を選択して、完了ボタンをタップします。予約時間は09:00~18:00の15分刻みです。予約時間は後から変更可能です。
予約システムの肝は、ダブルブッキングの防止です。この予約アプリにも搭載されており、すでに抑えられている時間帯は選択できません。
予約時間を選択する
📋運転日報を提出
予約が完了すると、予約履歴に登録されます。日付順になっているので、自分の予約を選択しましょう。
自分の予約を選択する
予約詳細ページが開きます。車両の運行が終わったら運転日報ボタンをタップします。
運転日報をタップ
フォームが立ち上がります。走行距離などの所定事項を記載します。
運転日報を記載する
運転日報を提出すると、予約時間に✓マークがつきます。運転日報ボタンも消えるため、二重に提出する心配はありません。
運転日報を報告
⛽給油を報告
給油が必要なときもあるでしょう。車両の詳細ページにある給油ボタンをタップします。
給油ボタンをタップする
給油フォームが立ち上がります。車両と給油者は自動入力されるので、給油金額を入力します。
給油金額を入力する
給油の履歴は車両ごとにまとまっています。
給油の履歴は車両ごとに表示される
📊利用頻度を確認
スタッフ別、車両別に利用頻度を確認できます。車両ごとの走行距離を可視化するのもアリですね。
データ量が多い場合、AppSheetでは確認しづらくなります。Looker Studioを利用しましょう。
AppSheet予約システムの仕組み
スプレッドシートとAppSheetだけのシンプルな構成
今回作成したAppSheet予約システムは、かなりシンプルな構成です。外部連携などは一切なく、標準機能のみで開発できます。
さらに、この仕組み自体は社用車だけでなく、あらゆる物をシェアするケースで使えるので汎用性があると思います。
AppSheet予約システムの作り方
ここからAppSheetで予約システムを構築する方法を解説していきます。ダブルブッキングを防ぐ機能がもっとも重要なので、そこを厚めにしたいと思います。
📁データベースを作成
予約システムのデータベース設計図
AppSheetのアプリ開発はデータベースの作成からはじまります。車両とスタッフは色んなところで出てくるので、別のエンティティ(データの集まり)として独立させます。
予約履歴や給油履歴は、車両やスタッフのデータを”参照”することで、データの重複を防いでいるわけですね。
データベースを設計したら、スプレッドシートで実際に作成していきます。エンティティ名(車両やスタッフなど)がスプレッドシートのシート名に対応しています。
エンティティ名はシート名に、属性はカラム名に
また、エンティティの属性(car idやstaff idなど)は、各シートのカラム(1行目の太字)に対応しています。
スプレッドシートにデータベースを構築
データベースを作成したら、Dataにある+ボタンから追加します。
データを追加していく
ここでの注目は、データテーブル「予約履歴」のtime listです(下図参照)。データ型はEnumlist型で、チェックリストを保存できます。左側にある鉛筆マークをクリックしてみましょう。
Enumlist型のデータが鍵
設定画面が立ち上がるので、Suggested valuesまでスクロールします。ここでの設定が車両予約時間の選択肢になります(めちゃ重要)。
ダブルブッキングを防ぐために予約済みの時間帯は除外する仕組みもここに内蔵されています。
Suggested valuesが重要
関数の中身は以下のとおりです。大枠は前半のList関数と後半のSplit関数に大別されます。
LIST("09:00~09:15", "09:15~09:30", "09:30~09:45", "09:45~10:00","10:00~10:15", "10:15~10:30", "10:30~10:45", "10:45~11:00","11:00~11:15", "11:15~11:30", "11:30~11:45", "11:45~12:00","12:00~12:15", "12:15~12:30", "12:30~12:45", "12:45~13:00","13:00~13:15", "13:15~13:30", "13:30~13:45", "13:45~14:00","14:00~14:15", "14:15~14:30", "14:30~14:45", "14:45~15:00","15:00~15:15", "15:15~15:30", "15:30~15:45", "15:45~16:00","16:00~16:15", "16:15~16:30", "16:30~16:45", "16:45~17:00","17:00~17:15", "17:15~17:30", "17:30~17:45", "17:45~18:00",)-SPLIT(SELECT(予約履歴[time list], AND([date]=[_THISROW].[date], [car id]=[_THISROW].[car id])), ",")
List関数は文字通り、リスト型のデータを作る関数です。”09:00~0915″から”17:45~18:00″までが15分刻みでリストになっています(営業時間が09:00から18:00までという前提)。
後半は少し複雑です。まず、これから車両の予約をする状況を考えます。以下のSelect関数がやっているのは、予約履歴の中から予約日と車両IDが一致する履歴を抽出しています。
SELECT(予約履歴[time list], AND([date]=[_THISROW].[date], [car id]=[_THISROW].[car id]))
そして、Select関数で抽出した履歴は以下のような形をしています。各項目にカンマ区切りのテキストが格納されているんですね。
[]
続いて、Select関数で抽出した履歴データをSplit関数で分割していきます。Split関数は区切り文字で分割したリストを作る関数です。Split(テキスト, “,”)とすることで、カンマ区切りのテキストを分割します。
Before:["09:00,10:00", "11:00,12:00", "13:00"]⇓After:["09:00", "10:00", "11:00", "12:00", "13:00"]
最後に営業時間を15分刻みにしたリストから履歴のリストを差し引きます。そうすることで、予約時にすでに予約済みの時間帯は選択できなくなるので、ダブルブッキングを防げるというわけです。
(営業時間を15分刻みにしたリスト)-(すでに予約済みの時間帯のリスト)=予約可能時間のリスト ⇓式にすると LIST("09:00~09:15", ...)-SPLIT(SELECT(...))
📱アプリUI(ビュー)の作成
車両一覧と予約履歴の画面を作成していきます。
まずは車両一覧からです。For this dataに車両のデータテーブルを、View typeにdeckを指定します。
For this dataとView typeを指定
続いてheaderやcolumn関係です(上の設定画面から下にスクロースしてください)。注目してもらいたいのが、Nested table columnで、”Related 予約履歴s”が設定されています。
headerやcolumn関係の設定
”Related 予約履歴s”とはデータに参照関係があると自動で生成されるデータです。こちらをNested table columnに配置することで、車両ごとの予約状況を表示できます。
車両ごとに予約データが表示される
💡Related 予約履歴sについて
この部分が少しわかりにくいかなと思うので補足します。ポイントは以下の3つです。①「予約履歴」にあるcar idはRef型。「車両」を参照②「車両」にRelated 予約履歴sが自動で生成③Related 予約履歴sには各車両に紐づく予約がリスト型で格納※「◯◯」はデータテーブル
Views: 0