人員配置基準と労働時間を満たすシフト表の自動生成
資格、雇用区分、夜勤明けの扱い、希望休といった条件を表として書き出し、その条件を満たす勤務表の候補をプログラムに生成させます。職員の組み合わせと最終決定は管理者が行います。

- 対象部署
- 施設運営(施設長・ユニットリーダー)
- 使う技術
- Googleスプレッドシートによる職員マスタと制約条件の管理 / Python と OR-Tools(制約充足ソルバー)による勤務表の生成 / ChatGPT または Claude によるソルバー用スクリプトの作成と修正 / 生成後の検証スクリプト(人員配置基準と労働時間の条件を機械的に照合) / 既存の勤怠管理システム(CSV取り込みで連携)
- 必要な入力データ
- 職員マスタ(.csv・職員ID、職種、資格、雇用区分、常勤換算数、対応可能な勤務帯) / 希望休と勤務不可日(.csv・職員IDと日付) / 制約ルール表(.csv・法令由来の条件と施設独自の条件を分けて記載) / 当月の利用者数とユニット構成 / 前月末の勤務実績(月をまたぐ連続勤務日数と夜勤明けの判定に使用)
Before / After
人がやる場合と、AIを使った場合
効果だけを並べても判断できません。まず「今どうやっているか」を具体的に書きます。タブを切り替えて読み比べてください。
前月の中旬から、施設長がA3の方眼用紙かExcelを開いて手で埋め始めます。まず夜勤から置きます。夜勤に入れる職員は限られ、夜勤明けの翌日は公休にする必要があります。次に希望休の紙を集め、重なった日は誰かに取り下げてもらう相談をします。そのうえで、各ユニットに介護福祉士が入る日を確認し、常勤換算での人員配置基準を満たすかを電卓で計算します。1か所を直すと別の日が崩れ、消しゴムで消して書き直します。ここまでで10時間から15時間かかります。作り終えた後も、職員の急な休みが出るたびに組み直します。この作業ができるのは施設長1人で、休暇中は前月の写しで回しています。
条件を表として書き出し、その表からプログラムが勤務表の候補を生成します。プログラムが扱うのは、機械的に判定できる条件だけです。夜勤明けの翌日の扱い、連続勤務日数の上限、休憩時間、1日あたりの必要人数、各ユニットへの資格者の配置、希望休の反映がこれにあたります。生成された候補に対して、検証スクリプトが人員配置基準と労働時間の条件を1件ずつ照合し、違反があれば行番号を示します。人に残るのは、機械では判定できない領域です。新人と経験者の組み合わせ、職員同士の相性、家庭の事情に配慮した個別の調整、急な欠勤が出たときの差し替え判断がこれにあたります。候補を土台にして、この調整を手で加えます。全自動で確定させる運用は行いません。生成した勤務表をそのまま掲示するのではなく、管理者が確認して確定させます。
| 比較する軸 | 人がやる場合 | AIを使った場合 |
|---|---|---|
| 所要時間 | 月あたり10〜15時間かかります(作成後の組み直しは含みません)。 | 制約表の更新が月あたり30分、生成と検証が数分、人による調整が2〜4時間です(自社での実測が必要です)。 |
| 関わる人数 | 施設長1名のみで、休暇中は誰も作れません。 | 制約表を更新できる職員が2〜3名になり、生成はその全員が実行できます。最終確定は管理者が担当します。 |
| 起きるミス | 常勤換算の計算違い、夜勤明けの翌日に勤務を入れてしまう、資格者の配置漏れ、希望休の見落としが起きます。 | 制約表に書き忘れた条件が反映されない、ソルバーが解を見つけられず生成が止まる、生成結果を検証せずに掲示する、といった誤りが起きます。 |
| 必要なスキル | 配置基準と労働時間の知識に加え、職員個々の事情を記憶している経験が要ります。 | 条件を表の行として書き出す力と、生成結果を検証結果と突き合わせて調整する判断力が要ります。 |
効果の見込み
介護分野の専門媒体である介護ニュースJointは、2026年2月の記事で、ある特別養護老人ホームがシフト作成に毎月14時間から15時間を要していた状態から、シフト自動作成の仕組みの導入によって約7時間へ短縮したと報じています(媒体報告値)。削減幅は、ユニット数、職員数、制約条件の複雑さで大きく変わります。自社では、制約表の作成に要した時間と、導入後3か月分の作成時間を記録して比較してください(要実測)。あわせて、作成できる職員が何名に増えたかを見ると、属人化の解消を測れます。
Steps
実際にやること
読んだ方がそのまま試せる粒度で書いています。出し惜しみはしません。各手順の説明とプロンプト例は「くわしく見る」を開くと読めます。
- 01
条件を法令由来と施設独自に分けて書き出す
くわしく見る
この工程が全体の成否を決めます。1枚の表に、条件を1行ずつ書きます。列は「ルールID/区分(法令・基準・施設独自)/条件の内容/判定方法/違反時の扱い(絶対に破れない・調整可)」の5列です。法令由来には、労働基準法上の労働時間と休憩、時間外労働に関する労使協定の範囲、夜勤明けの翌日の扱いが入ります。運営基準由来には、介護・看護職員の常勤換算で利用者3人に1人以上、ユニット型では夜間は2ユニットごとに1人以上といった条件が入ります。施設独自には、新人は夜勤に単独で入らない、特定の職員の組み合わせを避ける、といった条件が入ります。まず40〜60行を目安に書き出します。
- 02
判定方法の列を、計算できる形に直す
くわしく見る
書き出した条件のうち、「新人は無理をさせない」のような曖昧な行を、計算できる形に直します。たとえば「入職6か月未満の職員は、夜勤帯に配置する場合、同じ勤務帯に入職3年以上の職員を1名以上配置する」と書き換えます。この書き換えができない条件は、プログラムに任せず人が調整する領域として、別の表に分けます。分けることが重要です。全部を自動化しようとすると、条件が矛盾してソルバーが解を出せなくなります。
- 03
職員マスタと希望休のデータを整える
くわしく見る
職員マスタには、職員ID、職種、保有資格、雇用区分、常勤換算数、対応可能な勤務帯、入職年月を持たせます。常勤換算数は非常勤職員の週の勤務時間を常勤の勤務時間で割った値です。この値がそろっていないと、配置基準の判定ができません。希望休は紙で集めている場合もフォームに切り替え、職員IDと日付の2列のCSVになるようにします。前月末の勤務実績も必要です。月初の連続勤務日数と夜勤明けの判定に使います。
- 04
ソルバー用のスクリプトをAIに書かせる
くわしく見る
プログラムを自分で書く必要はありません。制約表と職員マスタの列構成を伝えて、AIにスクリプトを書かせます。重要なのは、絶対に破れない条件と調整可の条件を分けて実装させることです。すべてを絶対条件にすると解が見つからず、生成が止まります。
プロンプト例
Python と OR-Tools の CP-SAT ソルバーを使って、介護施設の月間勤務表を生成するスクリプトを書いてください。 入力ファイル: 1. staff_master.csv(列:職員ID, 職種, 保有資格, 雇用区分, 常勤換算数, 対応可能勤務帯, 入職年月, 所属ユニット) 2. requests.csv(列:職員ID, 日付, 種別)※種別は「希望休」または「勤務不可」 3. rules.csv(列:ルールID, 区分, 条件の内容, 判定方法, 違反時の扱い)※違反時の扱いは「絶対」または「調整可」 勤務記号:早番, 日勤, 遅番, 夜勤, 明け, 公休 実装の条件: - rules.csv の「絶対」はハード制約、「調整可」はソフト制約(違反にペナルティを与えて最小化)として実装してください - 夜勤の翌日は必ず「明け」、明けの翌日は必ず「公休」としてください - 解が見つからない場合は、どのハード制約が競合しているかを出力してください。単に失敗と表示するだけにしないでください - 出力は shift_result.csv(行=職員ID、列=日付、値=勤務記号)としてください - あわせて、各日の勤務帯ごとの人数と有資格者数を集計した summary.csv も出力してください - コードには日本語のコメントを入れ、制約を追加する箇所が分かるようにしてください
- 05
検証スクリプトを別に作り、生成結果を機械的に照合する
くわしく見る
生成したソルバーが正しく制約を実装しているかは、生成結果を別の目で検証しないと分かりません。生成用とは別に、検証専用のスクリプトを作ります。検証は、生成の過程を知らない状態で、出来上がった勤務表だけを見て条件を確認する形にします。実装の思い込みが両方に入るのを避けるためです。検証結果は違反一覧のCSVとして出させ、違反ゼロを確認してから人の調整に進みます。
プロンプト例
以下の shift_result.csv と staff_master.csv、rules.csv を読み込み、勤務表が制約を満たしているかを検証するスクリプトを Python で書いてください。生成用スクリプトのコードは参照せず、出力ファイルだけを見て検証してください。 検証項目: 1. 夜勤の翌日が「明け」、明けの翌日が「公休」になっているか 2. 連続勤務日数が rules.csv で指定した上限を超えていないか 3. 各日・各勤務帯の配置人数が必要数を満たしているか 4. 各ユニットの各勤務帯に、指定した資格保有者が配置されているか 5. 常勤換算での人員配置が、当月の利用者数に対する必要数を満たしているか 6. requests.csv の「勤務不可」の日に勤務が入っていないか 7. requests.csv の「希望休」が何件反映され、何件反映されなかったか 出力:violations.csv(列:ルールID, 対象日, 対象職員ID, 違反内容, 深刻度) 違反が1件も無い場合も、検証項目ごとに「確認済み」の行を出力してください。何も出力しないと、検証が動いたかどうか分からなくなるためです。
- 06
人が調整する領域を、決まった手順にする
くわしく見る
検証を通った候補に対して、管理者が調整します。調整する観点は、あらかじめ3つに絞ります。新人と経験者の組み合わせ、職員間の相性、そして個別の家庭事情への配慮です。調整した箇所は、理由とともに記録に残します。同じ理由の調整が3か月続いたら、制約表に行として追加できないかを検討します。この往復を続けると、人の調整量が徐々に減ります。
- 07
急な欠勤が出たときの差し替え手順を決める
くわしく見る
月の途中で欠勤が出たときに、毎回ゼロから組み直す必要はありません。欠勤日と欠勤者を指定して、その日だけの差し替え候補を出す使い方にします。検証スクリプトは差し替え後の勤務表全体に対して再実行し、連続勤務日数などが崩れていないかを確認します。ここでの判断も人が行います。誰に声をかけるかは、その職員の事情を知っている管理者にしか決められません。
Sample Data
この事例で使うサンプルデータ
実際に手を動かして試せるよう、サンプルを用意しています。すべて架空のデータです。お客様の実データは一切使用していません。
一式をまとめた形は、業界別レポートに同梱してお渡ししています。
Pitfalls
つまずきやすい点
精度が出ないときにどこを見るか。ここが分かるかどうかで、定着するかが決まります。見出しを開くと、確かめる箇所が読めます。
すべての条件を絶対条件にして、解が出なくなる
生成用のスクリプトだけで検証を済ませてしまう
配置基準の解釈を確認しないまま自動化する
職員の個別事情を制約表に書き込みすぎる
Related
介護・福祉の他の事例
次は「家族向けお知らせ・連絡文書の作成支援」を読んでください。シフトの自動化は準備に時間がかかるため、並行して着手できる軽い工程を1つ持っておくと、現場でAIに触れる機会が増えます。
介護・福祉のAI活用レポートをお送りします
この事例を含む5つの活用事例と、サンプルデータをまとめた資料です。社内での共有にお使いいただけます。
