NearMe Tech Blog

NearMeの技術ブログです

配車業務の負担を大幅削減。時間単位で管理する「予約枠」の開発

はじめに

NearMe エンジニアの朝日開斗です。

NearMeは、シェア乗りのサービスを提供しています。複数のお客様の予約を効率的に組み合わせて、1台の車両で複数の目的地へお送りする「相乗り配車」が特徴です。 私は、このNearMeアプリケーションの新規機能開発や改修を主に行なっており、特に運行会社や社内向けの管理画面アプリケーションの開発に大きく携わっています。

NearMeではお客様からの予約を特定のドライバーと車両の組に割り当てをする作業があり、これを「配車」と呼びます。この配車の作業は以下のテックブログにもあるように、予約の数多くが自動配車によって効率的にドライバーにアサインされるようになっています。

tech.nearme.jp

その配車業務の中で課題になっていた部分含め、その周辺の業務改善につながる開発を今回担当させていただきました。

まずはその配車業務の課題やその他開発するに連れて発生した課題についてまずまとめ、その後にその機能による効果というものをまとめています。

開発の背景/課題

元々想定していた課題

今回ご紹介させていただく機能を開発する発端は、運行会社の配車オペレーションにおける以下の課題でした。

課題1: 深夜まで続く手動監視の負担

運行会社の中には、数分に一度管理画面を更新する運用を深夜まで実施し、良い注文がないか探しているケースがありました。このことは以下の問題を引き起こしていました。

  • オペレーターの長時間労働
  • 人的ミスのリスク
  • 機会損失(タイミングを逃した配車)

開発していく上で明るみになった課題

元々は上記の問題を解決するための機能ということで設計から着手したのですが、この開発を進めていくにつれて、以下のような課題に関しても明るみになってきました。

課題2: 粗い粒度のスケジュール管理

従来の運行可能時間設定は、曜日パターンでの繰り返しでした。

  • 従来の設定例
    • 車両A
      • 毎週月曜日 8:00-17:00 運行可能
      • 毎週火曜日 8:00-12:00 運行可能

この方式には以下の問題がありました。

  • 特定の日だけ変更したい場合に対応できない
    • 例:「来週月曜だけ午後も運行したい」→ 車両設定を変更し、翌週また戻す必要
    • イベントや実証実験など、不定期な運行パターンへの対応が困難
  • 設定変更のリスク
    • 設定を変更すると、未来の予約にも影響
    • 本来配車できた予約が配車不可になるリスク

課題3: ドライバー個別のスケジュール管理の困難さ

既存システムは主に車両の稼働スケジュールに基づいており、以下の問題がありました。

  • ドライバーごとの細かいスケジュール考慮が不十分
  • シフトパターンが複雑な場合に対応困難

課題4: ブロック枠作成の工数が大きい

従来、特定の期間に予約をアサインしないようにする場合、ダミーの予約(以下、ブロック枠を作成して特定のドライバーと車両にアサインする運用がありました。この場合、以下のような課題が出てきます。

  • 作成工数が大きい
    • 作成する際、既存の注文作成フローと同様になり、工数が多い
  • 視認性が悪い(通常の予約と区別しにくい)

これらの課題を踏まえ、当初想定していた以上に時間単位での柔軟なスケジュール管理が重要であることが分かりました。具体的には以下のようなカレンダー画面が管理画面には付帯しているのですが、入ってきた予約をどの車両に配車するのかという設定を柔軟かつ簡単にできるようにしました。

今回開発した機能について

概要

今回開発した機能を、以下では「予約枠」と名付けます。この予約枠には主に以下の 2 つの機能があり、それぞれに応じて細かく配車するサービス並びにブロックするサービスを制御できます。

OPERATABLE(運行可能枠)

  • この時間帯に配車可能であることを明示
  • サービスを指定することで、特定のサービスの予約のみに制限可能
  • 「この時間帯はこのサービスの予約を受け付ける」という能動的なスケジュール管理

BLOCK(ブロック枠)

  • この時間帯は配車不可であることを明示
  • ドライバーの休憩時間、メンテナンス時間などに使用
  • 「この時間帯は予約を入れない」という明示的な制御

予約枠をとあるスケジュールに設定すると以下のようになります。

画像にある「予約枠」というのが今回作成した機能の一部で、自動配車ではこの予約枠部分に条件に応じた予約を自動的にアサインしていくことになります。詳細の受注条件に関しては設定にて柔軟に変更できます。

UI・UX面では以下のように機能を加えました。

  1. カレンダー上で0.5秒以上長押し
  2. 押したまま左右にドラッグ
  3. 離すと予約枠が作成される

操作のイメージは以下のようになります。

また、とりあえず1時間分の枠をクイックに作成したい場合には、ダブルクリック(ダブルタップ)により枠を作成することも可能です。

一見単純な改修に見えますが、実装する上で、既存のカレンダーコンポーネントにこれらの機能を加える際に以下のことに注意して実装する必要がありました。

  • PC・スマートフォン両対応のタッチイベント処理
  • カレンダーのズームレベルに応じた時刻計算
  • 既存のドラッグ&ドロップ機能との競合回避

スマホなどのタップを主とする操作の場合、カレンダーのスクロール操作と競合してしまう場合があるので、予約枠の操作の際にはダブルタップにて制御できるようにしています。

配車制御の進化:予約枠による柔軟なスケジュール管理

今回開発した予約枠により、前述の5つの課題を以下のように解決しました。

解決1: 深夜までの手動監視から解放(課題1への対応)

課題の振り返り

運行会社では、数分に一度管理画面を更新して良い注文を探す運用が深夜まで続いていました。

予約枠による解決

予約枠を事前に設定することで、その枠内に自動的に予約が配車される仕組みになりました。

配車フローの変化

  • 従来
    • 予約が入る → オペレーターが手動で確認 → 配車判断
  • 予約枠
    • 予約枠を事前設定 → 予約が入る → 枠内に自動配車

効果

  • オペレーターが常時監視する必要がなくなった
  • 深夜の作業負担が大幅に軽減
  • 機会損失(タイミングを逃した配車)のリスクが減少

解決2: 日次・時間単位の柔軟なスケジュール設定(課題2への対応)

課題の振り返り

従来の運行可能時間は曜日パターンの繰り返しで、「来週月曜だけ変更」といった特定の日の調整が困難でした。

予約枠による解決

  • 従来の運行可能時間
    • 「毎週月曜日の8:00-12:00」(曜日パターンの繰り返し) → 毎週同じパターンで運行
  • 予約枠
    • 「2026年1月10日の8:00-12:00」(特定の日時を指定) → 日ごとに異なるスケジュールを設定可能

従来の曜日パターンでの運行可能時間設定を削除したわけではなく、予約枠と共存させる形で機能しています。

具体例

  • 【基本パターン】運行可能時間: 月曜 8:00-17:00
  • 【イベント週】予約枠: 1/10(月) 8:00-20:00 に延長
  • 【翌週】自動的に基本パターン(8:00-17:00)に戻る

効果

  • 「この日だけ変更」が車両設定を変えずに簡単に実現
  • イベントや実証実験など、不定期な運行パターンに柔軟に対応
  • 設定変更が未来の予約に影響するリスクを回避

解決3: ドライバー個別のスケジュール管理(課題3への対応)

課題の振り返り

既存システムは主に車両の稼働スケジュールに基づいており、ドライバーごとの細かいスケジュール考慮が不十分でした。

予約枠による解決

予約枠は、車両とドライバーの組み合わせに対して設定できます。車両の選択は必須で、ドライバーは任意にしています。カレンダーのタイムラインも、この組み合わせ単位で表示されます。

活用例

  1. 車両のシェア運用

    • 車両A × ドライバーBの行: 午前(8:00-12:00): OPERATABLE枠
    • 車両A × ドライバーCの行: 午後(14:00-18:00): OPERATABLE枠

    → 1台の車両を時間帯ごとに複数ドライバーでシェア → カレンダー上では別々の行として表示され、視認性が高い

  2. ドライバーの休憩時間管理

    • 車両A × ドライバーBの行: 12:00-13:00: BLOCK枠(「ブロック」と表示)

    → この時間帯は配車されず、ドライバーBの休憩時間を確保

効果

  • ドライバーごとの細かいスケジュール設定が可能に
  • 複雑なシフトパターンに対応
  • 1台の車両を複数ドライバーで効率的にシェア可能

解決4: ブロック枠の作成が簡単に(課題4への対応)

課題の振り返り

従来はダミーの予約を作成して配車をブロックしており、作成工数が大きく、視認性も悪い状態でした。

予約枠による解決

配車したくない時間帯を専用のBLOCK枠として設定できるようになりました。

従来の方法

ダミー予約を作成 → 既存の注文作成フローを使うため工数が大きい → 通常の予約と区別しにくく、誤操作のリスク → 月初に大量のダミー予約を作成する必要

予約枠のBLOCK機能

ドラッグ&ドロップで簡単に作成 → 「ブロック」と明示的に表示 → 通常の予約と明確に区別 → 作成・削除が簡単

オペレーターからのフィードバック

  • 「月初処理が大幅削減」
  • 「見やすい」

効果

  • ブロック枠の作成工数が劇的に削減
  • 視認性が向上し、誤操作のリスクが減少
  • 月初の設定作業の負担が大幅に軽減

これらの解決により、ドライバーの複雑なシフトパターンに柔軟に対応しながら、効率的な連続運行を実現することができるようになりました。

予約枠のこれからの可能性

AIエージェント

今回開発した予約枠機能は、先日弊社のテックブログで掲載した以下のシフトスケジューリング機能と連携していきます。

tech.nearme.jp

AIエージェントによって決められたシフトスケジュールを予約枠として自動変換し、管理画面のカレンダーに反映させることで、生成AIでの会話から配車可否の制御までをシームレスに実現できます。

現在はこのシフトスケジューリングは別のシステムとして独立してデプロイされているのですが、今後は既存の管理画面に統合し、管理画面だけで完結するようにしたいと考えています。

終わりに

今回は「予約枠」に関することをまとめさせていただきました。

今回の機能を作成するにあたって、PdMの方含め、オペレーションチームの方々にもテストやフィードバックなどをいただき、今回の機能が完成に至りました。

まだ今回の機能は発展途上であると思っていて、さらなる業務改善を目指していくことができると思います。

最後になりますが、NearMeではエンジニアを募集しています!ご興味のある方はぜひ以下をご覧ください。

株式会社NearMe - 採用情報