公開日:2025-03-19
こんにちは。gusukuのサポートの中の人のひとり、にらです。
前回予告通り、2月に2025年初キャンプに行ってきました!
今年何度も聞いた気がする最強寒波の日でとても寒かったのですが、テント内にこもって食べるお鍋は最高でした。
冬のキャンプ飯はほぼ鍋、朝は温かいうどん一択なにら家です。

さて今回は、架空のキャンプ場「アールスリー架空野 キャンプフィールド」の予約システムにカスタマイズを設定します。
なんやかんやとそこそこ大掛かりなカスタマイズになってしまいましたが、お付き合いいただけると嬉しいです⛺
なお、架空のキャンプ場ですのでこの世には存在しません。本当にキャンプ場を運営しているわけではなく、キャンプ場についての設定はすべてフィクションです!
予約の流れ
キャンプ場の予約は、オープンからしばらくは下記のような流れで行います。
- お客様にはGoogle フォームを使用して、予約したいサイトと日付、人数、連絡先のメールアドレスなどの情報を連絡してもらう
※予約が重複した場合は先着順 - 連絡を受けて空き状況を確認し、予約確定または予約できなかった事をメールで連絡する。予約は、この予約確定メールが届いた時点で確定となる
- キャンセルは、予約確定メールへの返信で受ける
上記の対応のうち、2と3をkintoneで行います。
どのような作業内容になるかもう少し細かく確認してみます。
No | いつ | 誰が | 何を | どうやって |
1 | いつでも | お客様 | 予約を登録する | Googleフォームで入力 |
2 | 営業時間内 | 予約担当者 | Googleフォームで登録された予約をkintoneに転記する | CSVを取り込み |
3 | 営業時間内 | 予約担当者 | 予約内容を確認する | kintoneの画面上で予約内容を確認 |
4 | 営業時間内 | 予約担当者 | 予約内容に問題がなければ受入OKメール、問題があれば受入NGメールを送信する | kintoneの画面上でステータスを変更し、ボタンを押すとメールが送られる |
5 | いつでも | お客様 | 予約についてのお問合せ、キャンセルの連絡 | メールに返信 |
6 | 営業時間内 | 予約担当者 | お問合せに回答 | メールに返信 |
7 | 営業時間内 | 予約担当者 | キャンセルの対応 ※キャンセル料支払は今回は未対応 | kintoneの画面上でステータスをキャンセルに変更 |
8 | 来場時 | お客様 | チェックイン | メールに添付されたQRコードを提示 |
9 | 受付時 | 受付担当者 | チェックイン受け入れ | kintoneの画面上でQRコードを読み取り、予約のステータスを来場済みに変える |
kintoneで行う、3、4、7、9の作業を効率よく行うために、カスタマインでカスタマイズを設定していきます。
今回は、3の「予約内容を確認する」部分を作ります!
前回ご紹介したアプリから、カスタマイズに合わせていくつかフィールドを追加していますので、理由を含めて紹介します!
予約で使用するマスタアプリたち
宿泊施設マスタです。鳥のさえずりとワイルドな雰囲気は両立するんかな、とキャプチャをとりながら不安になりました。

営業日マスタアプリ。

一覧で分かりやすいようにシーズン名をカレンダーで一覧したかったのですが、ドロップダウンフィールドでカレンダーのタイトルに表示できなかったので、文字列(1行)で自動計算を有効にしてドロップダウンフィールドの値を転記することでタイトルに表示しています。
kintone基本機能でできることは基本機能でやります。

🏕️予約内容の確認
予約管理アプリでは、各作業の進捗をプロセス管理のステータスで管理します。

予約管理でチェックすべきポイントは、下記です。
- チェックイン、チェックアウト日付、お客様情報などの必ず入力してほしい情報が漏れなく入力されていること
レコード追加の時点で必ず入力してもらう必要があるチェックイン・チェックアウト日付などの情報はkintoneの必須設定を利用し、宿泊するキャンプサイトを指定する施設などのフィールドは、確認完了・メール送信中のステータスに進むまでに入力してもらえばよいので、カスタマインのカスタマイズで必須チェックを行う。その他、チェックイン・チェックアウト日の前後チェックや施設ごとの定員チェック、メールアドレスの形式チェックなどの入力値の確認を行う。 - 予約コードに重複しない値がセットされていること
予約コードは予約の識別に使用し、来場者に提示いただくQRコードの値としても使用するため、全予約で重複しない値を生成する必要があるため、カスタマインのカスタマイズで採番を行う。
なお、kintone基本機能のレコード番号を使用しない理由は、レコード番号は誤ってレコードを削除してしまった場合に同様の値をもつレコードを再登録したとしても別の番号が附番されてしまうため、予約を識別する値としては適切でないため使用しない。 - 宿泊費の計算は宿泊日数1日につき1レコードを予約明細アプリに作成して計算する
同じ施設(キャンプサイト)でも宿泊日によってシーズンが異なれば宿泊費が異なるため、チェックイン日とチェックアウト日から予約明細アプリに1日1レコードを作成し、施設とシーズンで金額を計算して一泊の単価をセットする。予約明細アプリには予約管理アプリの予約コードを指定し、合計の宿泊費は予約コードが同じレコードの単価の合算で計算する。 - 各施設(キャンプサイト)の受け入れ可能数を上回っていないこと
施設ごとに、1日当たりの受け入れ可能数が決まっているため、受け入れ可能数を上回っていないかをチェックする。上回っている場合は予約できないため、受け入れNGとなる。

予約コードの採番
まず、自動採番のカスタマイズです。
採番対象となるフィールドを画面から入力できなくするための「フィールドを無効化する」、レコードを再利用した場合に予約コードなどの引き継ぎたくない情報をクリアするための「ルックアップをクリアする」などを設定しています。
やること「自動採番を行う」は、採番結果が1,2,3,5のように、できるだけ飛ぶことがないようにレコードの保存が完了した「レコードを保存した直後(削除後は除く)」で行うことが多いですが、今回は予約コードは重複していなければ番号が飛んでも問題なく、予約明細アプリへのレコード追加チェックの際に予約コードを使用するため、レコード追加のタイミングで採番を行っています。

予約明細アプリへのレコード追加
次に、予約明細アプリに宿泊日1日1レコードを登録するカスタマイズです。
アクション29~51は、宿泊料金に関わるフィールドに変更があったときか、またはまだ予約明細にレコードが作成されていないときのみ予約を作成(または再作成)することで、不要な処理は行わないように設定しています。
アクション23~9は、チェックイン・チェックアウト日付をもとに営業日マスタからレコードを取得し、宿泊日数より営業日が少ない場合はどこかに非営業日があるとみなし、エラーにしています。
アクション11~19は、営業日マスタから取得したレコードを表示して、宿泊日程に該当する日付とシーズンをポップアップで表示して確認できるようにしています。

アクション11で表示するポップアップはこんな感じです。

上記のポップアップで、OKが押されたときだけ予約明細にレコードを追加するアクションに進みます。
アクション19と20では、同じ予約番号ですでに登録済みの予約明細があった場合、削除フィールドに値をセットすることで、削除フラグを立てて明細としては無効となるように設定しています。
アクション15~18は、やること「日付の範囲から日付を取り出す」を利用して、チェックイン日からチェックアウトの前日までの、宿泊日1日につき1レコードを作成します。アクション16では予約明細の予約明細Noを、予約コードごとに1、2、3…と重複しない値が採番されるように設定しています。
アクション18で指定している予約明細アプリに登録する一泊の単価は、シーズンの情報は営業日マスタに、シーズンごとの一泊の単価は宿泊施設マスタに保存されているため、if 関数を使用して金額を指定しています。
アクション24~は、登録した予約明細アプリのレコードを取得し、最終的な宿泊費合計を計算して予約アプリに反映しています。

入力チェック
利用人数やチェックイン・チェックアウト日付の大小チェックなど、kintoneではできないフィールドの値チェックを行いました。

アクション34からのチェックは、施設ごとの1日当たりの受け入れ可能数を超えていないかのチェックです。
1日ごとのチェックが必要ですので、アクション37で「日付の範囲から日付を取り出す」を使用して1日ごとのチェックを行っています。
ポイントの詳細と、対処方法を下記で解説します。
やること「日付の範囲から日付を取り出す」や「リストから要素を取り出す」は、エラーチェックのように、
- 保存ボタンを押す
- エラーチェックを行う
- エラーになる
- 修正する
- 保存ボタンを押す
- エラーチェックを行う
…のように繰り返し同じエラーチェックが繰り返されるような場合に、エラーチェックの中でリストの最後まで要素を取り出しが終わっていないと、前回取り出した位置が記録されてしまっていて、前回のチェックのリストの途中の値が取り出されてしまい、想定通りにチェックが行えない場合があります。
よくある良くない例として、リストからの取り出しの途中で「エラーダイアログを表示して保存をキャンセルする」などを表示して要素の取り出しを中断してしまうカスタマイズがあげられます。
この問題に対する対処方法は、エラーチェックの処理でリストから要素を取り出す系のやることを使用する時は、必ずリストの要素を最後まで取り出し切ってから処理を終えることです。
そのため、リストから要素を取り出す系のやる事の繰り返しの中でエラーメッセージを表示するのではなく、たとえば下記のような「エラーメッセージ」フィールドを作成し、繰り返しの中ではエラーに該当する条件に一致した場合、このフィールドにメッセージを追記します。

リスト(日付)は最後まで取り出して、
取り出しが終わった段階でそのフィールドに値が入っていればエラーがあったとみなしてダイアログを表示する…のようなカスタマイズを設定することで対処できます。

以上で予約チェックは完了しました!
カスタマイズをkintoneアプリで確認してみる
ステータスを必要な項目を入力して保存ボタンを押すと、チェックイン日付からチェックアウト日付までのシーズンと営業日の情報がポップアップで表示され、OKを押すと更に確認ダイアログが表示されます。

予約明細が登録され、宿泊費合計がセットされました。

入力チェックも想定通り動作しています。

次回の妄想キャンプ場運営は?
kintoneアプリで実行を確認してみると、読み込み中画面を消すアクションが漏れていたり、考慮漏れやもっと自動化できそうな部分を見つけてしまったのですが、それはオープンまでに修正することにして、一旦完了としたいと思います。
次に、予約受け入れ or 受け入れNGのメールをお客様に送るカスタマイズを作成するのですが、長くなりましたので今回はここまで。
次回も楽しみにしていただけると嬉しいです!
投稿者プロフィール

-
gusukuのチャットサポートの中の人です。
kintone認定資格は5冠。
趣味はキャンプ、最近登山もはじめました。