会議室の二重予約と時間重複を確認
09:00〜10:30の企画会議と10:00〜11:00の面接は10:00〜10:30で重なり、11:00開始のレビューは問題ありません。最初の重複だけでなく、重なる組み合わせをすべて示します。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
共有会議室は空いているように見えても、2件の予約が同じ時間帯を占有している場合があります。このツールは、1室分の予約一覧について各時間範囲を検証し、重なっているすべての組み合わせを報告します。同じ日の24時間表記を使用し、予約の終了時刻は次の予約に利用可能な時刻として扱うため、連続する予約は競合しません。結果は常に決定的で、予定表の点検、インポートデータの検証、公開前の競合レポート作成にご利用いただけます。
1室分の予約をご用意ください
bookingsリストには、1つの会議室に属する予約だけを指定してください。時刻はHH:MMまたはHH:MM:SSで記述します。可能であれば、予約システムで継続して使われる識別子をご使用ください。
結果は行番号ではなく、その識別子によって競合を示します。空のリスト、不正なレコード、重複した識別子、存在しない時刻、公開された上限を超える入力は受け付けません。また、終了が開始より前の予約を日付またぎとは推測せず、エラーとして扱います。
元データに日付、タイムゾーン、深夜をまたぐ予約が含まれる場合は、事前に分割または正規化してください。この明示的な仕様により、ローカル時刻がサーバー、ブラウザー、表計算ソフトで異なって解釈されることを防ぎ、同じ入力から毎回同じ結果を得られます。
競合と判定される条件をご確認ください
予約は半開区間として評価されます。開始時刻は予約に含まれますが、正確な終了時刻は次の予約に利用できます。そのため、09:00から10:00までの予約と、10:00から11:00までの予約は連続していますが競合しません。
2件目が09:59に始まる場合は、その組み合わせが報告されます。各競合には、両方の予約識別子と、共有される時間帯の開始および終了が含まれます。startとendが等しい所要時間ゼロの項目は有効ですが、時間を占有しないため他の予約とは重なりません。
このアルゴリズムは、最初の競合や予約ごとの1件だけではなく、競合するすべての組み合わせを返します。同じ時間付近に複数の予約が集中する場合、この違いが重要です。3件が互いに重なれば3組が生成され、管理担当者は調査すべき関係をすべて確認できます。
結果は時刻順に安定して並び、最後の同順位判定には元の入力順を用いるため、自動比較や監査記録も一貫します。
予定管理の流れでレポートをご活用ください
最上位の結果には、確認した予約数、競合の有無、検出された競合ペア数が示されます。競合がある場合は、曖昧な二重予約の警告だけを表示せず、重複範囲の境界を使って問題となる正確な時間帯をご説明ください。この機能は、どちらの予約を優先するか決めたり、会議を移動したり、隣接する予約を結合したりしません。
これらは組織の優先順位に依存するため、予定管理の処理側で決定してください。会議室カレンダーの公開前、別システムからの予約取込後、または一括編集で多数の時刻を変更した際に実行できます。同じ入力を再現可能なテストと本番検証の両方にお使いいただけます。
活用例
カレンダー取込を検証する
取り込んだ会議室予約が主要カレンダーの予定を置き換えたり追加したりする前に確認できます。
一括更新を安全に行う
管理者が1回の操作で多数の会議時刻を変更した際に発生した競合を検出できます。
競合レポートを作成する
施設管理担当者が解決すべき予約の組み合わせと共有時間帯を正確に一覧化できます。
よくある質問
どの時刻形式を使用すればよいですか?
24時間表記のHH:MMまたはHH:MM:SSをご使用ください。たとえば09:30や14:05:20です。
連続する予約は競合しますか?
いいえ。 1件目が終了する時刻に2件目が始まる場合、その会議室は2件目に利用可能とみなされます。
最初の重複を見つけると処理を停止しますか?
いいえ。 同時予約のグループ内にあるすべての組み合わせを含め、競合する全ペアを報告します。
開始と終了が同じ時刻の予約はどうなりますか?
有効な予約として扱いますが、時間を占有しないため、ほかの予約と重なることはありません。なお、終了時刻が開始時刻より前の予約は、日付をまたぐと推測せずにエラーになります。
日付や夜をまたぐ予約も確認できますか?
いいえ。一度に確認できるのは、会議室ひとつの一日分です。日付やタイムゾーンを含むデータや夜をまたぐ予約は、事前に日ごとに分けてから入力してください。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/biz/meeting-room-double-booking-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"bookings":[{"booking_id":"planning","start":"09:00","end":"10:30"},{"booking_id":"interviews","start":"10:00","end":"11:00"},{"booking_id":"review","start":"11:00","end":"11:30"}]}'const res = await fetch("https://api.kit.forhosting.com/biz/meeting-room-double-booking-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"bookings": [
{
"booking_id": "planning",
"start": "09:00",
"end": "10:30"
},
{
"booking_id": "interviews",
"start": "10:00",
"end": "11:00"
},
{
"booking_id": "review",
"start": "11:00",
"end": "11:30"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/biz/meeting-room-double-booking-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"bookings": [
{
"booking_id": "planning",
"start": "09:00",
"end": "10:30"
},
{
"booking_id": "interviews",
"start": "10:00",
"end": "11:00"
},
{
"booking_id": "review",
"start": "11:00",
"end": "11:30"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/biz/meeting-room-double-booking-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"bookings":[{"booking_id":"planning","start":"09:00","end":"10:30"},{"booking_id":"interviews","start":"10:00","end":"11:00"},{"booking_id":"review","start":"11:00","end":"11:30"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"bookings":[{"booking_id":"planning","start":"09:00","end":"10:30"},{"booking_id":"interviews","start":"10:00","end":"11:00"},{"booking_id":"review","start":"11:00","end":"11:30"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/biz/meeting-room-double-booking-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"bookings": [
{
"booking_id": "planning",
"start": "09:00",
"end": "10:30"
},
{
"booking_id": "interviews",
"start": "10:00",
"end": "11:00"
},
{
"booking_id": "review",
"start": "11:00",
"end": "11:30"
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "biz.meeting_room_double_booking_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 1000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
1室分の予約をご用意ください
各行には一意のbooking_idと、24時間表記のstartおよびendが必要です。1回のリクエストを1室・1日分に限定すると、報告された組み合わせはすべて同じ物理的な場所をめぐる実際の競合として明確に解釈できます。
予定管理の流れでレポートをご活用ください
conflicting_pairsリストは、警告画面、インポート拒否メッセージ、予約担当者向けレポートなどに利用できます。問題がなければhas_conflictsはfalseとなり、ペアのリストは空ですので、処理を続けるか停止するかという単純な判定にも適しています。ネットワーク、保存領域、乱数、現在日付を使用せず、APIリクエストの料金は$0.002です。
技術的な質問
終了時刻が開始時刻より前の場合はどうなりますか?
予約を特定するinvalid_inputエラーでリクエストが失敗します。深夜をまたぐ範囲は確認前に正規化または分割してください。
1回のリクエストで複数の会議室を確認できますか?
いいえ。各リクエストは1室分です。会議室ごとに予約をまとめ、それぞれを個別に確認してください。
APIリクエストの料金はいくらですか?
APIリクエスト1回の料金は$0.002です。ブラウザー版でも同じ決定的な検証ロジックを使用します。