kintoneと外部連携サービスで作る予約システム松竹梅
トヨクモさんのアドベントカレンダーの19日目に参加させていただき、kintoneと外部連携サービスを使って予約システムを作る時に参考になったらいいなという情報を整理してみました。
予約システムを作りたい
神戸市でkintone管理者をしています。
職員から「これってkintoneでできるの?」など事前相談を受け付けているのですが毎週何件も日程調整をメールやグループウェアでするのは大変。
なので、予約システムをこれまでにいくつか作ってきました。
難易度別に3種類ぐらいパターン分けができるかと思い、整理してみます。
難易度・機能別に松竹梅の3種類
基本的に、kintone外部連携サービスである、
フォームブリッジ
kViewer(カレンダービュー)
を組み合わせて使うやり方です。
(さらに松ではデータコレクトかカスタマインでWebhookを使う)
難易度別に、松竹梅に分けてみました。
レベル1(梅)…予約枠の制限がないタイプ。シンプル。
レベル2(竹)…1件1予約。予約が入ると予約枠が消えるタイプ。
レベル3(松)…1件N予約。残り枠を自動計算する本格派。
レベル1(梅):予約枠の制限がないタイプ
一番シンプルな仕組みです。
・kViewerのカレンダービューにイベントを表示
・フォームブリッジから予約
・予約に上限はなく、何件でも予約可能
・イベントは何件も登録可能。
こちらは、以下を参考にして手順通りやれば作れます。まずこれをやってみて慣れるのが良いです。
データを保持して別のアプリに情報登録!予約管理システムを作りたい
https://toyokumo-blog.kintoneapp.com/reservation_view/
レベル2(竹):1枠1予約。予約が入ると予約枠が消えるタイプ
次は、予約枠ごとに1件だけ予約ができ、予約が入るとカレンダーから枠が消えるタイプです。
例えば、
12/10 13:00-14:00 ←1名だけ予約可
12/10 14:00-15:00 ←1名だけ予約可
12/11 13:00-14:00 ←1名だけ予約可
のように予約枠を細分化して用意するタイプです。
(なので枠の追加作業が少し手間)
個別相談会をするときは、わざわざ日程調整をするのが大変なので、事前に(2週間前ぐらいから前日まで)予約枠を用意しておいて「あとは空いているところで相談会に予約してね」として運用しています。
こちらは以下が参考になりました。
kintoneで自由に予約管理システムを作ろう
https://qiita.com/shin-2/items/0faab2a92243531e7ab1
上記記事では「#本記事の内容は古く、より詳しく便利な方法がトヨクモ様のブログで紹介されています。」とありますが、ポイントは、
・「予約済」チェックボックスを用意する
・「予約済」となったらカレンダービューから非表示になるようにする
ところかと思います。
これだけで非表示にできるアイデアがとても良いなと思います。
レベル3(松):1枠N予約。残り枠を自動計算する本格派
こちらが最難関ですが、これを頑張れば予約枠まで管理ができます。
フォームブリッジとkViewerを使うのはこれまでの梅・竹と同じですが、松では
FormBridge + kViewer + DataCollect
もしくは、
FormBridge + kViewer + gusukuCustomine
を組み合わせて実装します。
ポイントは、Webhookを使って「フォームブリッジからレコードが追加されたことをトリガーに、残り枠数を計算する処理を動かす」という点。
これをDataCollectやカスタマインを使えばノーコードでできるのがありがたい話です。
DataCollectを使う手順は以下。キャンセル時の設定も解説されています。
カレンダーから日付を選択して予約/申込みシステムを作成!
https://toyokumo-blog.kintoneapp.com/reservation-system/
カスタマインを使う手順は以下。動画による築山さんの解説が分かりやすいです。
フォームブリッジをもっと便利に!カスタマインがあればなんとかなる
課題3:定員管理
https://www.youtube.com/watch?v=CxOAEsa1QSw&t=1402s
今回調べてみると、ロート製薬さんの事例などは、まさにこの松タイプで構築されたっぽいです。
ロート製薬が、kintone x トヨクモ製品を活用して1600人のイベント申請システムを構築!
https://www.kintoneapp.com/case/rohto
Webhookを使う点で難しいですが、現場のニーズに応じて色々な予約システムをkintoneとトヨクモ製品でできるのはすごく便利かと思います。
課題:同時に申込フォームを開いたときの対応
1つしか申込枠がない場合に、2人が同時に申込フォームを開いてしまうと、2人とも申し込みができてしまう、という課題があります。
これをノーコードで解決する方法が見つかっていません。
(どなたかアイデアありましたらぜひ!)
対応策ですが、以下があるかと思います。
対応策1:運用で対応する
これが一番おすすめです。運用で回るように、
・枠の数に余裕を持たせる
・時間に余裕をもたせる
・早めに気づいて調整できるように条件通知を使う
・重複チェック用の一覧を作ってたまにチェックする
などの対策を行って、できるだけトラブルにならないように考える。
対応策2:JavaScriptでカスタマイズする
例えば、
予約フォームから「送信する」を押したタイミングで、REST API経由でkintoneアプリの予約状況(件数)を把握する。
といったカスタマイズが必要になるかと思います。
ここまで実装してしまうと、のちのちメンテナンスなどの運用コストがかかってくるので、運用体制がしっかりしていない場合や費用を抑えたい場合はお勧めしません。
対応策3:他の予約専門サービスを検討する
予約という業務はどの業界でもあるので、専門のサービスを利用するのもありかと思います。
ただ「相談予約時に入力してもらったデータをkintone上で継続管理する」ことができなくなるのはデメリットです。
やはり無理なものは割り切って、運用でカバーできるのが一番効率的かと思います。
さいごに
結論、kintoneにトランザクション(コミットやロールバック)やデータベースのロック(For Update的な)はない(はず)ので、全てをkintoneに求めずできる感じで(適当に、いい塩梅で)使いこなすのが肝かと思います。
参考になりそうなページを松竹梅に分けてまとめてみましたが、個人的にやってみながら見つけてお世話になった情報に限られていますので、他にもおすすめのページがあればぜひ教えてください!