空いている教室を選んだのに、保存した後で別の授業と重なった。担当者の確認を増やしても、二人が同じ空きを同時に見れば、この問題は残ります。
学校管理システムの二重予約対策は、講師・教室・共用設備の占有時間を定義し、保存時に最新の状態で重複を判定する設計が基本です。 画面の空き表示に加え、同時編集、繰返し授業、時間帯の違い、保存結果が不明な場合の再送まで確認します。導入時は「カレンダーが見やすいか」と「競合する変更を確定させないか」を分けて評価してください。
この記事で分かること
- 授業時間と準備時間を含めた重複判定の決め方
- 講師・教室・設備を別々に確認する理由
- 同時保存と古い画面からの更新に必要な制御
- 提供会社へ示せる架空シナリオと受入試験の条件
本稿はシステムの要件整理を目的とします。時刻、設備、授業、担当者は説明用の架空例です。実製品に機能が実装されているという説明ではなく、実際の競合試験も実施していません。
1. 何を二重予約として止めるべきか?

AI生成の概念イメージ。実製品の画面・顧客実績ではありません。
授業の開始と終了だけでは足りない場合は?
二重予約は、同じ資源を同時に使えない複数の予定が、その占有時間に重なる状態です。ここでいう資源は、人、部屋、機材などです。授業名が違っていても同じ講師を必要とすれば重複になり、同時刻でも別の資源を使う授業なら重複しないことがあります。
架空の授業Aが十時から十一時、授業Bが十一時から十二時なら、時刻だけでは連続する二つの枠です。しかし教室の入替えに十五分必要なら、授業Aの占有終了を十一時十五分として判定する必要があります。授業後の片付けと授業前の準備をどちらに持たせるかも、二重に加算しないよう決めます。
時間の境界を曖昧にすると、ちょうど終了時刻に始まる授業を止めたり、必要な準備時間を見逃したりします。「開始は含む、終了は含まない」という扱いなら、十時から十一時と十一時から十二時は時間上は重なりません。これは設計の一例で、必要な間隔がある資源には別途その時間を加えます。
PostgreSQLの公式資料は、範囲型と境界の含め方、重なる範囲を扱う仕組みを説明しています。授業を単なる開始時刻の点ではなく、幅のある時間としてモデル化する際の参考になります。PostgreSQL:Range Types
予定の状態ごとに占有するか決める
「仮登録だから空いている」「仮登録中なので使えない」のどちらも、学校のルール次第ではあり得ます。システムが状態名だけを表示し、重複判定との関係を定めていないと、担当ごとに違う運用になります。
表は横にスクロールして比較できます。
| 予定の状態例 | 占有の案 | 先に決める条件 |
|---|---|---|
| 下書き | 占有しない | 確定時に必ず再判定する |
| 期限付き仮押さえ | 期限まで占有 | 期限の基準時刻と失効処理 |
| 確定 | 占有する | 資源と占有時間が揃っている |
| 取消 | 占有を解除 | 取消確定と解放を同じ処理で扱う |
| 調整中 | 個別に定義 | 旧枠を残すか、新枠も押さえるか |
占有しない下書きを大量に作れば、最後に多くが競合することもあります。一方、全下書きで資源を押さえると、未確定の予定が空きを塞ぎます。どちらを選ぶかは、確定する担当と期限を含めて比較します。
終了時刻のない授業、開始より終了が早い入力、存在しない資源番号も、重複以前の検証対象です。日をまたぐ予定なら翌日の終了として表現し、入力ミスと正当な跨日予約を区別します。許可する入力の型が決まらなければ、重複判定にも一貫性を持たせられません。
2. 講師・教室・設備はどう関連付ければよい?

制作した概念図。実製品の画面・顧客実績ではありません。
図の要点:2. 講師・教室・設備はどう関連付ければよい?
- 講師
- 教室
- 共用設備
名前ではなく識別できる資源として持つ
同じ教室を「第一教室」「教室一」「本館一階」と別の名称で入力すると、文字列が違うため重複を見落とす設計になり得ます。資源ごとに一意の識別番号を持ち、表示名が変わっても同じ資源だと判断できるようにします。
講師の名前も同様です。同姓同名、別言語の表記、略称があっても、一人の講師に二つの予定が入らないよう、個人を識別する番号へ結び付けます。画面では分かりやすい名前を表示し、内部の判定は識別番号で行う、という役割分担です。
資源の一覧には、利用できる拠点、利用停止期間、同時利用できる数なども必要に応じて持たせます。廃止した教室の記録を消して過去の授業との関係を壊すより、新しい予約では選べない状態にする方法が考えられます。保持や削除の判断は別に定めます。
一つの授業に複数の資源を割り当てる
授業には講師一人と教室一室だけ、という前提が合わないこともあります。共同授業、補助講師、オンライン配信用の機材、分割した教室などです。資源が増えても、授業との関連を追加できるかを要件として確認します。
表は横にスクロールして比較できます。
| 資源の種類 | 競合を確認する単位 | 注意する例 |
|---|---|---|
| 講師 | 同一人物の占有時間 | 別拠点の授業と移動時間 |
| 教室 | 同一の部屋または共有部分 | 間仕切りを外す授業が隣室も使う |
| 個別機材 | 同一の機材番号 | 一台の配信用端末を二授業で使う |
| 同種機材の集合 | 同時使用数と利用可能数 | 同じ型の端末を複数授業へ配る |
| オンライン枠 | 契約や運用上の共有単位 | 同時開催可能な枠の数が限られる |
個別機材の一台を押さえることと、同じ型の機材から三台使うことは、異なる判定になります。前者は同じ番号の時間重複、後者は時間ごとの使用数の合計が上限を超えないかを確認します。すべてを教室予約と同じ方式で扱えるとは限りません。
分割教室や拠点横断の資源はどう表す?
一室を二つに分けて使う場合、半分の教室同士は同時利用できても、全体を使う授業とは重なれません。「全体」「左側」「右側」を互いに無関係な三室として登録すると、この条件を見逃す可能性があります。共有部分の関係を持たせるか、全体利用時に両方の区画を占有するなど、矛盾を生まない表現を選びます。
同じ備品を別拠点へ持ち出す場合も、拠点ごとに別の資源番号を作るだけでは同時利用を防げません。実物を識別する番号と、保管場所の情報を分けます。移動中を予約できない状態として扱うなら、移動の前後の授業だけでなく、その区間も判定へ含める必要があります。
資源名簿を連携する場合は、外部の番号と学校管理側の番号の対応を保持します。外部で名称が変わっただけで新しい教室として増えたり、別物が同じ番号へ置き換わったりしないかを確認します。予約データが正しくても、何を予約しているかの対応が崩れると、重複判定は成立しません。
校内ルールから必須条件と注意条件を分ける
「同じ講師が同時に二授業へ参加する」は止める条件にしやすい一方、「遠い教室への移動に余裕が少ない」は注意にとどめる運用も考えられます。必須条件と注意条件を一覧にし、例外を許すなら、その条件と承認者を決めます。
移動時間は、講師の予定の間に一律で入れる方法だけではありません。前後の拠点の組合せで必要時間を変える設計もあります。その場合、場所の変更で必要な間隔が変わるため、時刻を動かさなくても再判定が必要になります。
「講師が同意したので重複を許可する」といった例外は、同じ時間に二か所へいる制約を解消しません。オンラインと対面の兼務など、実行可能性を先に確認し、許可するデータ状態を具体的に定義します。権限のある人なら何でも上書きできる設計は、予約の整合性とは別の問題です。
3. 二人が同時に保存しても二重予約を防げる?

制作した概念図。実製品の画面・顧客実績ではありません。
図の要点:3. 二人が同時に保存しても二重予約を防げる?
- 同時保存
- 版の比較
- 再送確認
空き確認と保存の間に状態は変わる
架空の担当者AとBが、同じ時間帯の空き教室を表示したとします。Aが保存した直後にBも保存すると、Bの画面には古い空きが残っているかもしれません。表示時の確認だけでは、二つ目の保存を止められません。
保存直前に再検索するだけでも、その検索と書込みの間に別の処理が入る余地があります。システムの保存処理では、競合条件の検証と確定を、並行する操作が矛盾しない単位で実行する必要があります。画面上でボタンを押せなくすることだけを対策にしないでください。
実装の選択肢には、適切なデータベース制約、ロック、トランザクションの分離などがあります。どれを使うかはデータ構造と利用する基盤に依存します。導入側は手法名の有無より、同時要求のうち確定できる結果と、競合側へ返す結果を確認します。
PostgreSQLには、同じ部屋に対する時間範囲の重なりを排他制約で拒否する公式例があります。ただし、それだけで講師、設備数、移動時間など学校の全条件が自動的に満たされるわけではありません。PostgreSQL:範囲の制約
古い版の編集で他人の変更を消さない
同時予約とは別に、同じ授業を二人が編集する問題があります。Aが講師を変更し、Bが古い画面から教室を変更したとき、Bの保存で講師まで元に戻るなら、Aの変更が失われます。画面で触った項目が少なくても、送信するデータ全体が古い可能性があります。
表は横にスクロールして比較できます。
| 競合の種類 | 望ましい結果の例 | 不十分な対応 |
|---|---|---|
| 同じ資源へ別授業を同時登録 | 一方が確定し、他方は競合を確認できる | 両方に保存完了を表示する |
| 同じ授業を古い版から編集 | 版の違いを検知し、変更を比較させる | 最後の保存で全項目を上書きする |
| 保存応答だけ届かない | 受付番号などから確定結果を照会できる | 再送のたびに新しい予定を作る |
| 複数資源の一部だけ失敗 | 全体を確定しないか、未完了を明示する | 教室だけ確定して授業も確定扱いにする |
版番号などを用いて、利用者が読んだ状態と現在の状態を照合する設計が考えられます。差分を見せる際も、他の担当が変更した理由を理解できる範囲に絞り、関係のない生徒の情報まで見せる必要はありません。
講師と教室の変更を一組として確定するには?
架空の授業を別の教室へ移す際、旧教室を先に解放してから新教室を押さえると、途中で別の予約が入る場合があります。新教室が取れず、旧教室もすでに他の授業が使う状態になれば、授業は確定しているのに場所がない、という矛盾が起こり得ます。
移動に必要な確認を一組として扱い、条件が揃ったときだけ切り替える設計を検討します。講師の変更も伴うなら、講師と教室の両方が利用可能であることを確かめます。変更に失敗した場合は元の割当てを維持するのか、調整中として明示するのかを先に決め、どちらでもない状態を成功扱いにしません。
複数の資源を同時に扱う処理では、互いの処理が待ち合う状況も想定します。技術担当には、資源を確認・確保する順序、待機時間の扱い、処理を中断した後に残る状態を説明してもらいます。利用者の入力待ちの間ずっと他人の予約を止める方式なら、正確さだけでなく、受付が進まなくなる条件も評価対象になります。
再試行を前提に結果を取り出せるようにする
通信の切断は、保存の失敗とは限りません。サーバー側では確定したのに、画面だけ結果を受け取れない場合を想定します。同じ依頼を識別する番号を持たせれば、再送を別予約として扱わず、すでに確定した結果を確認する設計にできます。
データベースの並行制御によって処理のやり直しが必要になる場合もあります。PostgreSQLの公式資料は、分離レベルごとの振る舞いと再試行が必要な状況を説明しています。再試行は無限に繰り返すのではなく、同じ要求か、現在も実行してよいかを確かめる必要があります。PostgreSQL:Transaction Isolation
提供会社へは「予約の同時保存」と「同じ要求の再送」と「古い版からの更新」を分けて質問します。一つの重複防止機能ですべてを扱うと説明された場合も、別々のシナリオで結果を示してもらうと、確認の抜けを減らせます。
4. 海外講師の時間帯と繰返し授業はどう扱う?

制作した概念図。実製品の画面・顧客実績ではありません。
図の要点:4. 海外講師の時間帯と繰返し授業はどう扱う?
- 基準時刻
- 地域時刻
- 繰返し
表示する時刻と判定する時点を区別する
画面に「十時」とあるだけでは、学校所在地の時刻か、講師の所在地か分かりません。オンライン授業を含むなら、日付、開始・終了、基準となる地域の時間帯を合わせて指定し、利用者にはどの時間帯で見ているかを表示します。
同じ瞬間を共通の基準で保存・比較することと、毎週の授業を現地の午前十時に行うことは別の要件です。繰返し予定を作る際は、その地域の時間帯を保持し、各開催日の具体的な開始・終了へ展開する考え方が必要になります。
PostgreSQLでは、時間帯付き日時は内部でUTCとして扱われ、入力時に指定した地域の時間帯名自体は保持されません。地域のルールに基づく繰返しを扱うなら、その情報を別に持つ設計を検討します。PostgreSQL:Date/Time Types
夏時間や存在しない時刻を黙って補正しない
地域によっては時計の切替えで、同じ現地時刻が二度現れたり、ある時刻が存在しなかったりします。利用する時間帯で該当する日を試験対象にし、入力を拒否するのか、どちらの時点を選ぶのかを明示します。利用者に知らせず別の時刻へ変えると、予約の合意が崩れます。
学校と講師で日付が異なる場合も、曜日名だけの案内では足りません。確定画面と通知内容に、学校側の日付・時刻と、必要に応じて受け手側の表示を併記します。通知を送る直前まで未確定なら、確定した授業と同じ文面にしないよう区別します。
表は横にスクロールして比較できます。
| 時間に関する条件 | 設計で決めること |
|---|---|
| 学校と講師の時間帯が異なる | 入力の基準と各画面の表示時間帯 |
| 日付をまたぐ授業 | 終了日と開始日の関係、一覧での表示 |
| 時計の切替えに重なる | 存在しない時刻や二重の時刻の扱い |
| 毎週同じ現地時刻 | 地域の時間帯と各回の具体的な時点 |
| 時間帯ルールが更新される | 将来予定の再計算、再確認、通知の範囲 |
繰返しの一部が競合したら全体をどうする?
毎週の授業をまとめて作る場合、初回だけ空いていても、後の日に行事や別授業があるかもしれません。登録する対象期間を具体的な開催回へ展開し、各回の講師、教室、設備を確認します。無期限の繰返しをどこまで先まで確定するかも、契約や運用に合わせて決めます。
全回を一括で確定する方式なら、一回の競合で全体を未確定にするのかを明示します。確定できる回だけ登録する方式なら、どの回が未登録かを一覧に残す必要があります。成功した件数だけを見せると、抜けた授業を担当者が見落とす可能性があります。
一回だけ教室を変える操作では、元の繰返し定義と個別の例外をどう関連付けるかも確認します。後からシリーズ全体を変更した際に、個別調整を消さない条件が必要です。変更の対象を「今回」「今回以降」「全回」と表示し、保存前に影響する授業を確認できるようにします。
5. 競合が見つかった画面はどう設計すればよい?

制作した概念図。実製品の画面・顧客実績ではありません。
図の要点:5. 競合が見つかった画面はどう設計すればよい?
- 競合理由
- 代替候補
- 確定結果
警告だけで保存できる条件と、止める条件を分ける
必ず止める重複なのに、赤い警告を出してそのまま保存できるなら、システムは整合性を守っていません。一方、教室移動の余裕が短いという注意まで全件拒否すると、正当な調整ができなくなる場合があります。判定の強さと理由を分けて表示します。
競合メッセージには、対象の資源、重なる時間、何を変更すれば解消できるかを示します。「登録できません」だけでは、担当者が何度も試すことになります。別の授業の詳細を閲覧する権限がない場合は、占有時間と資源の情報に絞る方法を検討します。
入力した内容は、競合しただけで消さないようにします。別時刻や別教室を選び直すために、授業名や対象者まで再入力する設計は負担になります。ただし古い入力を保持しても、再保存時には全条件を最新状態で再判定する必要があります。
取消処理が進行中の予約も、扱いを決めます。取消ボタンを押した瞬間に空きとして見せても、処理が失敗すれば元の予約は残ります。正式な取消が確定してから資源を解放するなど、画面と保存状態が食い違わない条件が必要です。期限付きの仮押さえも、期限切れ処理が遅れた場合を含め、いつから他の予約が使えるかを定義します。
候補を提案しても、確定を保証しない
代替候補は、見つけた時点の案です。候補画面を開いている間に別の予約が入る可能性があるため、提案時と確定時の役割を分けます。「この教室なら必ず予約できます」と表示せず、確定時に確認することを自然に示します。
表は横にスクロールして比較できます。
| 画面の役割 | 示したい情報 | 確定前に必要な確認 |
|---|---|---|
| 競合の説明 | 資源と重なる時間 | 本人が見てよい情報の範囲 |
| 代替候補 | 別時刻・別資源の案 | 講師、教室、設備の全条件 |
| 変更比較 | 現在と入力内容の違い | 他の担当の変更を消さないか |
| 保存結果 | 確定番号と変更対象 | 画面・一覧・通知で同じ状態か |
候補の並び順も仕様にします。近い時刻、同じ拠点、必要設備を満たす部屋など、何を優先するかが曖昧だと、使えない候補が上に出ます。候補がない場合は、条件を変える画面へ戻れるようにし、勝手に条件を緩めて確定させないでください。
通知は確定後の結果に結び付ける
予約の確定前に講師へ通知を送ると、その後に保存が拒否されても、受け手には成立した授業のように見えます。通知する対象は確定した版に結び付け、未確定の相談連絡とは区別します。
通知の送信だけが失敗した場合に、予約そのものをもう一度登録する必要はありません。予約の状態と通知の状態を別に持ち、再通知しても新たな授業が作られない設計を確認します。反対に、予約が未確定なら通知済みという理由で成立扱いにしません。
自動通知が遅れている間に授業が変更された場合は、古い内容をそのまま配信しない条件も必要です。対象の版を照合し、必要なら最新状態を案内する方法を定めます。通知の順序まで試験すると、画面上だけ正しい状態から一歩進んだ確認ができます。
6. 導入前にどんな試験と質問を用意すればよい?

制作した概念図。実製品の画面・顧客実績ではありません。
図の要点:6. 導入前にどんな試験と質問を用意すればよい?
- 同時要求
- 期待する結果
- 合格条件
合格条件を先に書いて、別経路も試す
デモでカレンダーへ一件登録できたことは、同時予約への対策が機能する証拠にはなりません。受付画面、管理者画面、外部連携、まとめ登録など、予約を作成・変更する経路を一覧にし、同じ条件が適用されるかを確認します。
以下は受入試験の提案です。本稿で実行した結果ではありません。提供会社の試験環境で、対象の版、データ、実行手順、期待する結果を合意してから確かめます。実在の生徒や講師へ通知しない設定も、事前条件に含めてください。
表は横にスクロールして比較できます。
| 試験の案 | 期待する結果の例 |
|---|---|
| 同じ教室へ重なる二授業を同時に保存 | 競合する二件が同時に確定しない |
| 教室を変え、同じ講師の時間を重ねる | 講師の競合を検知する |
| 授業終了ちょうどに次を開始 | 定めた境界と準備時間に従う |
| 古い版から教室だけ変更 | 他人の講師変更を黙って消さない |
| 保存直後の応答を受け取れず再送 | 同じ依頼の予約が増えない |
| 繰返しの途中一回だけが競合 | 全体・部分確定の仕様どおり表示する |
| 同じ瞬間を別の時間帯で入力 | 表示が異なっても競合を判定する |
| 設備の同時利用数が上限を超える | 個別番号または数量の条件で拒否する |
試験結果は成功・失敗だけでなく、確定した予約の件数、競合した要求への応答、画面に残る入力、通知の状態を記録します。意図的に通信を途切れさせる試験や負荷を掛ける試験は、本番で独断で行わず、提供会社と範囲を決めてください。
判定の変更で予定が変わる場合はどう確認する?
準備時間を追加する、教室を統合する、仮押さえを占有に数えるといった変更は、すでにある予約にも影響します。新規入力だけ新しい条件で判定すると、同じ時間帯の予定に旧ルールと新ルールが混在します。適用開始日と対象の予約を決め、影響一覧を確認してから切り替える方法が考えられます。
特に、既存の確定授業を自動で移動・取消する処理は、単なる設定変更の結果として黙って行わないようにします。必要な調整を候補として示し、担当が確認したものだけを変更する流れを用意します。試験では、条件変更前の予約がどう表示され、どの操作で再判定されるかまで見てください。
また、画面の空き一覧がすぐ更新されなくても、確定時の判定が正しければ二重予約を拒否できる設計はあり得ます。その場合も、更新待ちの表示や競合時の戻り先が必要です。空き一覧の更新速度と、確定データの整合性を別の受入条件にすると、見た目の遅れと予約の矛盾を混同せず確認できます。
既存データに競合がある場合は先に分離する
新しい判定を追加する前から、重複した予約が入っている場合があります。既存の状態を調べずに制約だけを有効にすると、導入時や更新時に処理できない記録が出るかもしれません。まず候補を抽出し、正当な例外か誤りかを業務担当が確認します。
同じ名前の教室が複数登録されている場合は、どの識別番号を今後使うか決めます。過去の授業との関係を保ったまま整理する手順を用意し、確認なしに片方を削除する運用にはしません。判定の導入と資源台帳の整備を一緒に計画すると、再発条件を減らせます。
提供会社へ渡す確認票を作る
- ☐ 講師・教室・設備それぞれの占有単位を決めた
- ☐ 開始・終了の境界、準備・片付け・移動時間を定めた
- ☐ 仮押さえ、取消、調整中の占有条件を定めた
- ☐ 同時保存、古い版、再送への結果を説明できる
- ☐ 時間帯、跨日、繰返しと個別例外を試せる
- ☐ 通知と予約確定を区別し、再通知で予約が増えない
- ☐ すべての登録経路で同じ必須条件を適用する
導入判断では、使うデータベースの名称だけで優劣を決めないでください。求めるのは、学校が禁止したい状態を確定させず、正当な調整を担当者が進められることです。方式の説明と、具体的な試験結果を合わせて確認します。
試験記録には製品の版と判定設定も残します。設定変更後に再確認する条件が分かれば、過去の合格を現在の保証として扱わずに済みます。
現在の予約方法を見直すなら、個人名のない予定例と、重複させたくない資源を整理してタゲンゴへ相談することができます。「講師だけ重複を止めたい」「複数拠点と共用機材がある」など、困る場面から要件を具体化しましょう。生徒名簿や認証情報を送る必要はありません。
よくある質問
空き時間を再読込すれば同時予約は防げますか?
再読込だけでは、確認後から保存までの間に別の変更が入る可能性が残ります。保存処理でも最新の状態を検証し、競合する要求が矛盾した状態で確定しない仕組みが必要です。
同じ開始時刻を禁止すれば十分ですか?
開始時刻が違っても、授業の途中が重なることがあります。開始から終了までの占有範囲と、必要な準備・移動時間を含めて判定します。同時刻でも別資源の授業なら許可できる場合があります。
共同授業は講師の重複として拒否されますか?
同じ授業に複数講師を関連付けることと、同じ講師が別の授業を同時に担当することは別です。授業と資源の関係を明確にし、正当な共同授業を表現できるデータ設計を確認してください。
予約の重複防止機能があれば運用確認は不要ですか?
不要にはなりません。どの状態を占有と数えるか、時間の境界、移動時間、例外条件などは学校が決める要件です。機能名だけでなく、実際の登録経路と架空の競合例で確認します。
関連記事
- 競合の例外を誰が判断するかは、学校管理システムの役割・権限設計も参照してください。
- 変更の経緯を後から確認する設計は、監査ログと訂正履歴で扱っています。
出典・確認日
公式照合日:2026年10月27日。PostgreSQL 18の範囲型、トランザクション分離、日時型を参照しました。学校向けの表・条件・試験は編集上の提案です。特定製品の実装、実環境での性能や競合試験は未確認です。
執筆・運営:タゲンゴ
