デイサービスの利用予定と住所から、送迎の車両割りと順路の案を毎日作る
デイサービスの翌日の利用予定と利用者の住所から、どの車両に誰を乗せ、どの順で回るかの案を作ります。当日の欠席や時間の変更の連絡が入れば、案を作り直して変えた箇所と理由を示します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Python
- 対象業界
- 介護/医療/教育
- 対象部門
- 物流
- 対象業務
- 分類・仕分け/書類作成
- 主な課題
- 人手が足りない/判断に時間がかかる/属人化している
- AIで行う処理
- エージェント
- 主な効果
- 対応スピード向上/属人化解消/工数削減
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 前日の午後、生活相談員が介護ソフトで翌日の利用予定を確かめる
- 前週の同じ曜日の送迎表を写し、休みの利用者を消し、新しい利用者を足す
- 車いすの利用者を車いす対応の車両に移し、席の数が足りるかを数える
- 地図を見ながら、各車両の回る順を決め、到着の時刻に間に合うかを見積もる
- 同乗を避けたい組み合わせや、家族の都合の時刻に合っているかを確かめる
- 送迎表を印刷し、運転手と添乗の職員に渡す
- 当日の朝、欠席や時間変更の電話を受け、送迎表を手で書き直し、運転手に口頭で伝える
- 人生活相談員が、利用者ごとの送迎の条件(車いす、介助の人数、到着の時刻、同乗の可否)を条件表に登録しておく
- 自動前日の15時に、翌日の利用予定を介護ソフトから取り出す
- 自動利用者の住所と事業所のあいだの移動時間の表を、保存してある表から引く。新しい住所の分だけ取得する
- 自動最適化の道具が、条件を守った車両割りと順路を計算する
- 自動計算の結果を条件表に照らして点検し、破っている条件が無いかを確かめる
- 人生活相談員が案を見て直し、翌日の送迎表として確定する
- 人当日の朝、欠席や時間変更の連絡を受けたら、連絡の内容を入力欄に書き込む
- 自動エージェントが連絡を読み取り、変わった条件を整理し、計算と点検の道具を呼んで案を作り直す
- 自動前の案との差分(誰がどの車両に移ったか、到着の時刻がどう変わったか)と理由を示す
- 人生活相談員が差分を確かめて確定し、運転手に伝える
各工程の詳しい説明を読む
- 前日の午後、生活相談員が介護ソフトで翌日の利用予定を確かめる
- 前週の同じ曜日の送迎表を写し、休みの利用者を消し、新しい利用者を足す
- 車いすの利用者を車いす対応の車両に移し、席の数が足りるかを数える
- 地図を見ながら、各車両の回る順を決め、到着の時刻に間に合うかを見積もる
- 同乗を避けたい組み合わせや、家族の都合の時刻に合っているかを確かめる
- 送迎表を印刷し、運転手と添乗の職員に渡す
- 当日の朝、欠席や時間変更の電話を受け、送迎表を手で書き直し、運転手に口頭で伝える
(a)組めるのが1人だけになる。 2番目から5番目は、どの条件をどの順で当てはめるかの経験で決まります。生活相談員が休んだ日は、前週の送迎表をそのまま使い、現場で調整することになります。
(b)前週の写しから始まる。 前週の送迎表を土台にすると、その週の利用者の組み合わせにとって良い順路かどうかは見直されません。 利用者が入れ替わるうちに、遠回りの順路が残ります。
(c)当日の組み直しが雑になる。 朝の30分で欠席と時間変更を反映するので、1人が休んだら、その家を飛ばすだけで済ませます。 車両の間で利用者を入れ替えれば早く着ける場合でも、その時間がありません。
(d)条件の見落としが現場で見つかる。 車いすの利用者が普通車の割り当てのまま、同乗を避けたい2人が同じ車両。見落としは、運転手が迎えに行ってから分かります。 その場で車両を入れ替えると、他の家の到着が遅れます。
- 【人】 生活相談員が、利用者ごとの送迎の条件(車いす、介助の人数、到着の時刻、同乗の可否)を条件表に登録しておく
- 【自動】 前日の15時に、翌日の利用予定を介護ソフトから取り出す
- 【自動】 利用者の住所と事業所のあいだの移動時間の表を、保存してある表から引く。新しい住所の分だけ取得する
- 【自動】 最適化の道具が、条件を守った車両割りと順路を計算する
- 【自動】 計算の結果を条件表に照らして点検し、破っている条件が無いかを確かめる
- 【人】 生活相談員が案を見て直し、翌日の送迎表として確定する
- 【人】 当日の朝、欠席や時間変更の連絡を受けたら、連絡の内容を入力欄に書き込む
- 【自動】 エージェントが連絡を読み取り、変わった条件を整理し、計算と点検の道具を呼んで案を作り直す
- 【自動】 前の案との差分(誰がどの車両に移ったか、到着の時刻がどう変わったか)と理由を示す
- 【人】 生活相談員が差分を確かめて確定し、運転手に伝える
6番目と10番目が、この設計の分かれ目です。 案は何度でも作り直せますが、確定は人が行います。 利用者の当日の様子で「今日は車いすで」と連絡があっても、乗車の方法を決めるのは現場です。
8番目の作り直しは、前の案を土台にします。 当日の朝に全員の車両を入れ替えると、運転手が混乱します。変更に関わる車両だけを動かし、他はできるだけ前の案のまま残すように計算させます。
02今回想定するシステム構成
介護ソフト(翌日の利用予定)/条件表(車いす・介助・時刻・同乗) │ ▼【トリガー】前日15時の定時実行/当日の変更連絡の入力 エージェント(Claude API のツール呼び出し) │ 変更の連絡を読み取り、変わった条件を整理する │ ├─ 道具1:利用予定と条件の取得 │ ├─ 道具2:移動時間の表の取得(新しい住所だけ Routes API) │ ├─ 道具3:車両割りと順路の計算(Python・OR-Tools) │ └─ 道具4:条件の点検(Python) ▼ 案と差分(誰がどの車両に移ったか、到着の時刻、理由) ▼ 【生活相談員が確認・確定】 ▼ 送迎表(表計算ソフト)の出力、運転手への伝達(人が行う)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Python(OR-Tools による車両割りと順路の計算、条件の点検) | 商用の配車計画ソフト、個別実装の最適化 |
| 生成AI | Claude API(変更の連絡の読み取りと、道具の呼び出しの段取り) | OpenAI API、Gemini API |
| 移動時間 | Google Maps Platform の Routes API(ルート行列の計算) | 他社の地図APIの距離行列、道路距離の自前の表 |
| 条件表と送迎表 | 表計算ソフト | 介護ソフトの送迎の機能 |
介護ソフトと送迎表は、新しく足すものではありません。 この構成は利用予定を読み、案を送迎表の形で書き出すだけです。確定した送迎表をどこに置くかは、今の運用のままにします。
計算の土台は、OR-Tools の車両経路問題です。 時間枠付きの車両経路問題(VRPTW)は、決められた時間枠の中で各地点を訪れる経路を求めるもので、地点間の距離ではなく移動時間の表と、各地点の時間枠を入力にします。 時間の次元を AddDimension() で作り、各地点の到着の時刻の範囲を CumulVar().SetRange() で設定します。最初の解は PATH_CHEAPEST_ARC などの方針で探します。
車両の定員は、容量の制約で表します。 各地点の需要と車両ごとの容量を持たせ、AddDimensionWithVehicleCapacity で積んでいる量を追います。種類の違う荷物は、種類ごとに別の容量の次元を作るとされています。この構成では、座席の数と車いすの席の数を、別の次元にします。
移動時間の表は、Routes API の computeRouteMatrix で取ります。 出発地と目的地の組ごとに、所要時間(duration)、距離(distanceMeters)、経路があるか(condition)を返します。1回の要求で扱える組の数には上限があり、通常の経路で625、交通状況を最も細かく考慮する TRAFFIC_AWARE_OPTIMAL では100、住所やPlace IDで指定する地点は合わせて50までです。40名と事業所の41地点をまとめて1回では取れません。第7章で、分けて取る方法と、保存して使い回す方法を書きます。
段取りを担うのは、Claude API のツール呼び出しです。 道具の名前、説明、入力の形(input_schema)を渡すと、Claude は道具を使う必要があると判断したときに stop_reason: "tool_use" と tool_use ブロックを返します。道具を実行するのはこちらのプログラムで、結果を tool_result として返すと、Claude が次の手を決めます。 道具の定義に strict: true を付けると、呼び出しの入力が常にスキーマどおりになるとされています。
03どうやって実装するのか
処理の起点を決める
2つのきっかけで動かします。 1つは前日15時の定時実行で、翌日の迎えと送りの案を作ります。もう1つは当日の変更連絡で、生活相談員が入力欄に連絡の内容を書き込んだ時点で、案の作り直しを始めます。
前日15時にするのは、介護ソフトの翌日の予定が固まる時刻に合わせるためです。 午前中に翌日の予定の変更が入ることが多く、15時なら大半が反映されています。15時以降に予定が変わったら、当日の変更と同じ扱いで作り直します。
当日の変更は、1件ずつではなく、まとめて作り直すこともできます。 朝7時台に電話が集中するので、7時40分の時点で届いている変更をまとめて1回作り直すと、運転手への伝達が1回で済みます。まとめるか1件ずつかは、事業所の運用で決めます。
電話の内容を自動で拾うことはしません。 連絡は電話で届くことが多く、聞き取った内容を生活相談員が入力欄に書きます。入力された文章が、エージェントの入口です。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 利用予定 | 翌日の利用者、利用の時間帯(午前のみ・終日など) | 介護ソフトのCSV |
| 利用者の住所 | 住所と、送迎で使う乗降場所(玄関、裏口、マンションの入口) | 利用者の基本情報 |
| 送迎の条件 | 車いすの有無、介助の人数、到着・帰宅の時刻の条件、同乗を避ける組み合わせ、乗降に要する時間 | 条件表(生活相談員が登録) |
| 車両 | 座席の数、車いすの席の数、運転できる職員、出発の時刻 | 車両の表 |
| 移動時間の表 | 地点間の所要時間と距離 | 保存してある表/Routes API |
| 当日の変更 | 欠席、時間変更、乗車の方法の変更などの連絡の文章 | 入力欄 |
| 前の案 | その日の直前の送迎表の案 | この構成の保存場所 |
質を決めるのは、条件表です。 生活相談員の頭の中にある条件を表に書き出さないと、計算は条件を知らないまま、最短の順路を出します。 最初の作業は、条件の書き出しです。
乗降に要する時間は、利用者ごとに持たせます。 玄関から車まで介助で5分かかる家と、玄関先で待っている家とでは、同じ地点でも止まる時間が違います。これを入れないと、計算上は間に合っても現場では遅れます。
データの取得方法を決める
移動時間の表は、毎回すべてを取り直しません。 利用者の住所は頻繁には変わらないので、地点の組ごとの所要時間を保存しておき、新しい利用者や住所の変更があった地点の分だけ取得します。
| 取るもの | どこから | いつ |
|---|---|---|
| 地点間の所要時間と距離 | Routes API の computeRouteMatrix | 新しい住所が増えたとき、月に1回の更新 |
| 利用予定 | 介護ソフトのCSV | 前日15時、予定が変わったとき |
| 条件と車両 | 条件表と車両の表 | 計算のたび |
| 前の案 | 保存場所 | 作り直しのたび |
41地点の表を1回で取れないのは、組の数の上限のためです。 41×41は1,681組で、通常の経路の上限625を超えます。出発地と目的地を25地点ずつの区画に分けて要求すれば、1回あたり625組に収まります。 区画の組み合わせを順に取り、1つの表につなぎます。
住所で指定する地点は、1回の要求で合わせて50までです。 住所の文字列で毎回指定するより、一度、緯度経度に変換して保存し、以後は座標で指定するほうが、上限にも住所の表記の揺れにも強くなります。
返ってきた組の condition を必ず見ます。 経路が見つからなかった組が混ざっていると、その組の所要時間が空になります。空のまま計算に渡さず、その地点を点検の一覧に出します。
AIへ渡す前に整形する
- 利用者の絞り込み … 翌日の利用予定から、送迎を使う利用者だけを取り出します。家族の送迎や自力で来る利用者を除きます
- 乗降場所の決定 … 住所ではなく、実際に車を止める場所の座標を使います
- 時間枠の設定 … 迎えなら「事業所への到着の時刻」と「家族が家にいる時刻」から、各地点の到着の時刻の範囲を作ります
- 乗降の時間の加算 … 地点ごとの乗降に要する時間を、その地点に止まる時間として持たせます
- 容量の設定 … 車両ごとに座席の数と車いすの席の数を、別の容量として持たせます
- 同乗の制約の変換 … 同乗を避ける組み合わせを、計算の道具が扱える形(同じ車両に入れない制約)にします
- 前の案の固定 … 作り直しのときは、変更に関わらない利用者を前の案と同じ車両に置くよう、ずらすと不利になる重みを付けます
3番目と4番目を軽く見ないでください。 時間枠が広すぎると、計算は到着の時刻を守っているつもりで、家族がいない時刻に迎えに行く案を出します。乗降の時間が抜けると、計算上は全員が間に合い、現場では最後の家が10分遅れます。
AIに処理させる
させるのは、変更の連絡を読み取って条件の変化に直し、4つの道具を順に呼んで案を作り、条件を満たさなければ緩める候補を示して計算し直すことです。
| 道具 | 何をするか | エージェントが見ること |
|---|---|---|
get_schedule | 翌日(または当日)の利用予定と条件、前の案を返す | 変更の連絡に出てくる利用者が、予定にいるか |
get_travel_matrix | 地点間の所要時間の表を返す。新しい地点だけ取得する | 経路の見つからない組が無いか |
solve_routes | 条件と前の案を受け取り、車両割りと順路を計算して返す | 解が見つかったか、落とした利用者がいないか |
check_constraints | 案を条件表に照らし、破っている条件を返す | 違反が0件か |
エージェントの役目は、この順番と、失敗したときの次の手を決めることです。 例えば、車いすの利用者が1人増えて車いすの席が足りず、solve_routes が全員を乗せる解を返せなかったとき。エージェントは「送りを2便に分ける」「車いす対応の車両の出発を15分早める」といった緩め方の候補を挙げ、どれを試すかを生活相談員に示します。
緩め方を自分で選んで確定させません。 2便に分ければ誰かの帰宅が遅れ、出発を早めれば誰かの迎えが早まります。どちらを取るかは、利用者と家族の事情を知っている人が決めます。
| させないこと | 理由 |
|---|---|
| 順路の計算 | 生成AIの推論では条件を守れない。最適化の道具に任せる |
| 条件の追加・削除 | 条件表は生活相談員が管理する。連絡の読み取りで条件表を書き換えない |
| 乗車の可否の判断 | 利用者の状態を見て現場が決める |
| 家族や運転手への連絡 | 確定と伝達は人が行う |
| 利用の時間帯の変更 | 送迎の都合で利用者のサービスの時間を動かさない |
2行目がいちばん起きやすい失敗です。 「今日は車いすで」という連絡を受けて、エージェントが条件表のその利用者を「車いす」に書き換えると、翌日以降もずっと車いすのまま計算されます。 当日の変更は、その日の計算にだけ効かせます。
指示内容を固定する
あなたはデイサービスの送迎の計画を手伝う立場です。
順路と車両割りは自分で考えず、必ず道具を使って計算してください。
【使える道具】
- get_schedule ....... 利用予定、送迎の条件、前の案を取得する
- get_travel_matrix .. 地点間の所要時間の表を取得する
- solve_routes ....... 車両割りと順路を計算する
- check_constraints .. 案を送迎の条件に照らして点検する
【進め方】
1. 変更の連絡を読み、どの利用者の、どの条件が、その日だけどう変わるかを整理する
2. get_schedule で予定と前の案を取り、連絡に出てくる利用者が予定にいるかを確かめる
3. 新しい地点があれば get_travel_matrix を呼ぶ
4. solve_routes を呼ぶ。変更に関わらない利用者は前の案の車両に残す
5. check_constraints を呼ぶ。違反が0件になるまで、3回まで緩め方を変えて計算し直してよい
6. 結果を、前の案との差分と理由にまとめる
【厳守事項】
- 順路、到着の時刻、所要時間を、道具の結果なしに書かないでください。
- 変更の連絡に書かれていないことを補わないでください。
連絡があいまいなとき(例:「少し遅れるかも」)は、条件を変えずに確認事項として挙げてください。
- 送迎の条件表を書き換えないでください。当日の変更は、その日の計算にだけ使ってください。
- 利用者のサービスの利用時間を、送迎の都合で変えないでください。
- 緩め方(便を分ける、出発の時刻を動かす、車両を足す)を試したときは、
それが誰の到着・帰宅の時刻をどう変えるかを必ず書いてください。
- 違反が残る案、利用者を乗せられない案を、完成した案として出さないでください。
その場合は、残った違反と、生活相談員に決めてほしいことを書いてください。
- 送迎を確定させたり、家族や運転手に連絡したりしないでください。
【変更の連絡】{change_notes}
【対象の日と便】{date_and_trip}
「道具の結果なしに書かない」を明記しないと、所要時間を推測で書きます。 地名から「10分ほど」と見積もった値が、道具の結果と同じ顔をして並びます。時刻と所要時間は、道具が返した値だけにします。
「あいまいな連絡は条件を変えない」も、書かないと起きます。 「少し遅れるかも」を「10分遅く迎えに行く」に直すと、家族が待っているのに通り過ぎる案ができます。 分からないことは、確認事項として人に返させます。
出力形式を固定する
エージェントの最後の返答を、次の形のJSONで受け取ります。 道具の結果そのものは、それぞれの道具が返すJSONをそのまま保存します。
{
"date": "2026-09-30",
"trip": "pickup",
"status": "ready | needs_decision",
"vehicles": [
{ "vehicle_id": "V2", "stops": [
{ "user_ref": "U-07", "eta": "08:32", "note": "" }
] }
],
"changes_from_previous": [
{ "user_ref": "U-12", "from": "V1", "to": "V3", "reason": "" }
],
"violations": [],
"questions_for_staff": [""]
}
eta は solve_routes が返した到着の時刻を写したもので、エージェントは値を変えません。
1つ目の理由は、status で確定できるかどうかが分かれることです。 check_constraints の違反が0件で、全員が乗っていれば ready、それ以外は needs_decision です。needs_decision のときは、questions_for_staff に決めてほしいことが入ります。
2つ目は、changes_from_previous で朝の確認が速くなることです。 当日の作り直しで、生活相談員が見るのは送迎表の全体ではなく、誰がどの車両に移ったかの数行です。運転手への伝達も、この差分だけで済みます。
status | 条件 | 生活相談員がすること |
|---|---|---|
ready | 違反0件、全員が乗車、questions_for_staff が空 | 差分を確かめて確定 |
needs_decision | 違反あり、乗せられない利用者あり、またはあいまいな連絡あり | 質問に答えて作り直しを指示、または手で直す |
要は、status を道具の結果から機械的に決めることです。 エージェントが「おおむね問題ない」と書いても、違反が1件でもあれば ready にはしません。 最後の判定は、プログラムが check_constraints の結果から付け直します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 介護ソフト | CSV出力 | 翌日の利用予定を受け取る |
| 条件表・車両の表 | 表計算ソフトの読み取り | 送迎の条件と車両を読む。書き込まない |
| Routes API | API呼び出し | 新しい地点の所要時間を取る |
| Python(OR-Tools) | 道具として呼ぶ関数 | 車両割りと順路の計算、条件の点検 |
| Claude API | API呼び出し(ツール呼び出し) | 変更の読み取りと道具の段取り |
| 送迎表 | 表計算ソフトへの書き出し | 案を送迎表の形で出す。確定の印は人が付ける |
条件表には書き込みません。 条件表を直すのは生活相談員で、エージェントからの読み取りだけを許します。 道具として条件表を書き換える関数を用意しないことで、書き換えの経路そのものを作りません。
運転手への配信も作りません。 確定した送迎表を印刷するか、事業所の連絡の手段で送るかは、今の運用のままにします。
人が確認する
生活相談員は、すべての案を確定の前に見ます。
statusを見る …needs_decisionなら、questions_for_staffとviolationsを先に読みます- 差分を見る … 当日の作り直しでは、
changes_from_previousの数行を確かめます。移された利用者が、その車両で困らないか(添乗の職員、乗降の介助)を見ます - 到着の時刻を見る … 家族の都合の時刻に近い家を中心に、
etaを確かめます - 確定する … 送迎表に確定の印を付け、運転手に伝えます
- 手で直したら記録する … 案をどう変えたか、なぜ変えたかを残します
5番目は、条件表を育てるための記録です。 生活相談員が毎回同じ理由で案を直しているなら、それは条件表に書かれていない条件です。 月に一度見直して、条件表に足します。
前日の案の確認は5〜10分、当日の作り直しの確認は数分が目安です。 それより長くかかる日が続くなら、条件表に抜けがあるか、乗降の時間の設定が現場と合っていません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 全員を乗せる解が見つからない | 緩め方の候補(2便に分ける、出発を早める、車両を足す)を示して needs_decision |
| 計算が時間内に終わらない | 計算の時間の上限を決めておき、上限までに見つかった最良の案を出す。見つからなければ前の案に戻す |
| 移動時間の表に経路の無い組がある | その地点を点検の一覧に出し、乗降場所の座標を直す |
| 連絡に出てくる利用者が予定にいない | 同じ名字の別の利用者の可能性。条件を変えず、確認事項として返す |
| 連絡があいまい | 条件を変えず questions_for_staff に入れる |
| 運転できる職員が急に休む | 車両の表からその車両を外して作り直す。外すのは人の入力で行う |
| 道路の通行止め・渋滞 | 計算は保存した所要時間で行う。当日の道路の状況は運転手の判断に任せる |
| APIが応答しない | 前の案を残し、差分なしで生活相談員に知らせる。手で直す運用に戻る |
| エージェントが3回の作り直しで違反を解消できない | 残った違反と決めてほしいことを返して止める |
上の2行が、計算の道具ならではの例外です。 条件が厳しすぎると解が無く、地点が多いと計算が長くなります。容量の制約の説明でも、需要が容量を超えると解が無いことがあり、時間の上限を設けること、訪問を落とす代わりに罰を与える方法が示されています。この構成では、利用者を落とした案を完成した案として出さず、必ず人の判断に回します。
記録を残す
- 変更の連絡の文章と、入力した人・時刻
- エージェントが呼んだ道具の順番、それぞれの入力と結果のJSON
- 計算に使った条件表と車両の表の版、移動時間の表の取得日
- 最後の案と
status、生活相談員が確定した送迎表 - 生活相談員が手で直した箇所と理由
- 解が見つからなかった日と、選んだ緩め方
2つ目で道具の呼び出しを全部残すのは、案がおかしかったときに、どこで崩れたかをたどるためです。 連絡の読み取りが違ったのか、計算の入力が違ったのか、点検が見落としたのかが、ログから分かります。
5つ目は、第7章「人間の確認」で書いた条件表の見直しの材料です。
04実装レベルの3段階
最小構成では、毎日は回せません。 移動時間を手で入れるので、条件表と計算が使えるかを確かめるための段階です。 半自動化で、前日の案の作成はほぼ自動になります。 ただ、当日の変更は生活相談員が手で直すので、朝の30分は減りません。 本格構成で、1件50分が15分程度になります。この段階が本記事の想定です。 当日の変更の反映がエージェントに置き換わり、生活相談員に残るのは、差分を確かめて確定し、運転手に伝える時間です。減るのは写しと見積もりと組み直しで、確定の判断は減らしません。
05工数削減シミュレーション
導入後 48件 × 15分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 1日に30〜60名程度の利用者を複数の車両で送迎し、送迎表を特定の生活相談員が毎日手で組んでいる通所介護・通所リハビリテーションの事業所。車いすの利用者、同乗の組み合わせ、到着の時刻など守る条件が多く、担当者が休むと送迎表が組めない場合。利用予定を介護ソフトからデータで出せる場合。
- 利用者が十数名で車両が1〜2台の場合。送迎の順路が毎日ほぼ同じで、組み直しがほとんど発生しない場合。送迎表を自動で確定させ、運転手へ直接配信したい場合。なお、利用者の状態に応じた乗車の可否や、当日の送迎の中止の判断は、この構成では代替できません。
07最小構成で試す方法
- 先週の1日分の利用予定と、そのとき実際に使った送迎表を用意する
- 生活相談員が、送迎の条件(車いす、介助、時刻、同乗)をその日の利用者について表に書き出す
- OR-Tools の時間枠付きの車両経路問題の例を元に、その日の地点と時間枠と車両で計算する(移動時間は、地図サービスで調べた値を表に手で入れる)
- 計算した案を、実際に使った送迎表と比べる
- 翌朝の変更連絡を1つ想定し、生成AIの画面に「この連絡で、どの利用者の、どの条件が、その日だけどう変わるかを整理してください。書かれていないことは補わず、あいまいな点は確認事項として挙げてください」と指示する
最小構成の中心は、2番目の条件の書き出しです。 計算の道具より先に、頭の中にあった条件が表に書けるかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 実際の送迎表と同じか、それより短い順路が出た | 移動時間の自動取得とエージェントに進む |
| 条件を守っているのに現場では使えない案が出た | 書き出していない条件がある。条件表を足す |
| 解が見つからない | 時間枠が狭すぎるか、乗降の時間が長すぎる。設定を見直す |
2行目が出るのは、失敗ではありません。 生活相談員が「この2人は同じ車に乗せない」と言い出したら、それが条件表に足すべき1行です。 ここで出し切るほど、後の案がそのまま使えるものになります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 生成AIに順路を考えさせる | 順路は道具で計算する。 時刻と所要時間は道具の結果だけを書かせる |
| 条件を守った案が現場で使えない | 書き出していない条件がある。手で直した理由から条件表に足す |
| 計算上は間に合うのに現場で遅れる | 乗降に要する時間を地点ごとに入れる |
| 41地点の表が1回で取れない | 組の数の上限(通常625)に合わせて区画に分けて取る |
| 住所の指定で上限に当たる | 座標に変換して保存し、以後は座標で指定する |
| 経路の無い組が混ざる | condition を見て、乗降場所の座標を直す |
| 解が見つからない | 時間枠と容量を見直し、緩め方の候補を人に示す |
| 当日の作り直しで全員の車両が入れ替わる | 変更に関わらない利用者を前の案に残す重みを付ける |
| 当日の変更で条件表が書き換わる | 条件表を書き換える道具を作らない |
| あいまいな連絡で条件が変わる | 条件を変えず、確認事項として人に返させる |
違反の残る案が ready になる | status は check_constraints の結果からプログラムが付け直す |
| 送迎表が自動で運転手に配信される | 配信を作らない。 確定と伝達は人が行う |
上の3行が、この構成の失敗のほとんどです。 どれも、計算の道具が知らない条件か、道具を通さない値から始まります。時刻を道具の結果だけにし、条件を表に書き出すかどうかで、現場で使えるかが決まります。
下の3行は、エージェントに任せる範囲を守るための決まりです。 読み取りと段取りは任せても、条件表と確定と伝達には手を出させません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 利用者の氏名、住所と乗降場所、車いすの利用や介助の必要、家族が家にいる時刻、利用の予定です。心身の状態に関わる情報と、自宅の場所と在宅の時間帯が組み合わさっています。
- 外部へ渡す範囲を絞る … 地図のAPIに渡すのは座標だけで、氏名は渡しません。生成AIには、利用者を記号(U-07など)で渡し、住所と氏名は渡しません。 道具の中で記号と実データを対応させます
- 医療・介護のガイダンスを確認する … 個人情報保護委員会と厚生労働省が、医療・介護関係事業者向けのガイダンスを出しています。安全管理措置や第三者提供の制限に照らして、外部のサービスへ渡す情報を事業所の定めと突き合わせてください
- 送迎を確定させない … 案の確定と運転手への伝達は人が行います。当日の利用者の状態で乗車の方法を変える判断は、現場のものです
- 条件表を書き換えさせない … 送迎の条件は利用者の安全に関わる情報です。エージェントには読み取りだけを許します
- 在宅の時間帯の情報を守る … 「家族が9時まで家にいる」という情報は、裏返せば留守の時間帯です。条件表と送迎表の保管場所と、見られる人を絞ってください
- 法人向けの契約を使う … 生成AIと地図のAPIの、入力したデータの扱いと保存の期間を確かめます
誤りが起きた場合のリスクは、条件を破った送迎で利用者の安全を損なうことと、迎えの時刻を誤って家族や利用者を待たせることの2つです。 前者は条件表の抜けと点検の見落としで起き、後者は道具を通さない時刻で起きます。どちらも、時刻と条件を道具の側に置き、確定を人に残す設計で守ります。
10まず何から始めるか
1週目:送迎の条件を書き出す
生活相談員が、利用者ごとの送迎の条件を表に書き出します。車いす、介助の人数、到着・帰宅の時刻、同乗を避ける組み合わせ、乗降に要する時間の5つを、全利用者について埋めます。埋まらない欄は、運転手や添乗の職員に聞きます。
2週目:1日分で計算を試す
先週の1日分の予定と条件で、OR-Tools の計算を試します。移動時間は地図サービスで調べた値を手で入れます。実際に使った送迎表と比べ、現場で使えない案が出たら、その理由を条件表に足します。
3週目:移動時間の表を作る
利用者の乗降場所を座標にし、Routes API で地点間の所要時間の表を作って保存します。区画に分けて取り、経路の無い組が無いかを確かめます。
4週目:前日の案を自動で作る
前日15時に予定を取り出し、計算と点検を回して案を送迎表の形で出すところまで作ります。この時点では当日の変更は手で直し、案を手で直した箇所と理由を毎日記録します。
2か月目: 当日の変更の入力欄とエージェントを足し、差分と理由を出します。needs_decision になった日と理由を数えます。3か月目以降: 手で直した理由から条件表を見直し、1件50分が何分になったかを実測します。生活相談員以外の職員が案を確かめて確定できた日が出た時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
時間枠付きの車両経路問題が、移動時間の表と各地点の時間枠を入力にすること。AddDimension() で時間の次元を作り、CumulVar().SetRange() で到着の時刻の範囲を設定すること。PATH_CHEAPEST_ARC で最初の解を探すこと | OR-Tools: Vehicle Routing Problem with Time Windows | 2026-09-29 |
需要と車両の容量を持たせ、AddDimensionWithVehicleCapacity で積載量を追うこと。種類の違う荷物は別の容量の次元にすること。需要が容量を超えると解が無いことがあり、時間の上限や、訪問を落として罰を与える方法が示されていること | OR-Tools: Capacity Constraints | 2026-09-29 |
computeRouteMatrix が組ごとに duration・distanceMeters・condition を返すこと。組の数の上限が通常625、TRAFFIC_AWARE_OPTIMAL で100、住所やPlace IDの地点は合わせて50であること。X-Goog-FieldMask で返す項目を指定すること | Google Maps Platform: Compute a route matrix | 2026-09-29 |
ツールの定義(名前・説明・input_schema)を渡すと、Claude が stop_reason: "tool_use" と tool_use ブロックを返し、アプリケーションが実行して tool_result を返すこと。strict: true で呼び出しの入力がスキーマどおりになること | Claude Docs: Tool use with Claude | 2026-09-29 |
| 医療・介護関係事業者向けのガイダンスが個人情報保護委員会と厚生労働省から出され、居宅サービス事業者等が対象であること。安全管理措置、第三者提供の制限などの義務 | 個人情報保護委員会: 医療・介護関係事業者における個人情報の適切な取扱いのためのガイダンス | 2026-09-29 |
送迎の条件と乗車の可否は、利用者の状態と事業所の運用で必ず決めてください。 本記事は上の資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0324)についてのご相談はこちらから。
