シフト作成を自動化する方法制約条件の洗い出しから試作まで

シフト作成を自動化する方法は、先月の勤務表と組む人の決まりから条件を書き出し、「必ず守る条件」と「できれば守る条件」に分けてから、制約ソルバーに解かせることです。架空の介護の職場(20人×30日)で7つの条件を入れて解くと、どの段も3秒以内に勤務表ができ、希望休は80件中77件が通りました。(2026年10月時点)
全体の流れと費用はシフト作成の自動化のページにまとめています。
要点
- シフト作成の自動化は、条件の洗い出し、ソルバーでの試作、解けないときの見直しの3つで進みます。
- 架空の20人×30日で7つの条件を入れて解くと、どの段も3秒以内に終わり、希望休は80件中77件が通りました(試算)。
- 夜勤の枠60を1人月5回までで割ると12人が下限で、実際に11人以下では勤務表が作れませんでした。
- 作る前に、希望を聞く方法と確定したシフトを知らせる期限を、職場で決めておきます(厚生労働省の留意事項)。
目次
シフト作成を自動化するには、何から始めますか?
先月の勤務表を1枚用意し、そこに表れている決まりを書き出すところから始めます。ソフトを選ぶのはその後です。条件が書き出せていないと、どの方法を選んでも「結局手で直す」状態になります。
私がシフト作成の自動化を手伝うときは、次の4段階で進めます。表のとおり、最初の2段は道具を使わずにできます。
| 段階 | やること | 使うもの | 時間の目安(主宰の場合) |
|---|---|---|---|
| 1. 書き出す | 先月の勤務表から、守っている決まりを全部挙げる | 先月の勤務表、組む人への聞き取り | 1〜2時間 |
| 2. 分ける | 必ず守る条件と、できれば守る条件に分ける | 紙かExcel | 1時間 |
| 3. 試作する | 条件を1つずつ入れて解き、先月の表と比べる | 制約ソルバー(OR-Tools など) | 最短当日 |
| 4. 使い始める | 来月分を作り、組む人が直した所を条件に戻す | 今のExcelの形で書き出し | 最短その週から |
制約ソルバーは、「この条件をすべて満たす割り当て」を探す計算の道具です。GoogleのOR-ToolsにあるCP-SATは無料で使えます。公式の例題では、看護師4人×3日×3交代の勤務表を作っています。看護師の勤務表づくりは研究も多く、2004年には学術誌に総説が載りました。
シフトの制約条件は、どうやって洗い出しますか?
「人」「枠」「つなぎ方」「希望」の4つの箱に分けて書き出すと、漏れが減ります。組む人の頭の中にしかない決まりも、この順で聞くと出てきやすくなります。
「人」は資格と夜勤の可否、常勤とパートの別、契約の日数です。「枠」は、時間帯ごとの必要人数と、リーダーや有資格者の数です。「つなぎ方」は日をまたぐ決まりで、夜勤の翌日は明けにして次の日は休む、連続勤務は5日まで、などです。
書き出したら、1つずつ「破ったら困るか」を聞きます。破れないものは必ず守る条件、破ってもよいが避けたいものはできれば守る条件にします。希望休を必ず守る条件にすると、希望が重なった月に表が作れなくなるので、私は原則「できれば守る」側に置きます。用語の違いはシフトの制約条件とはにまとめています。
条件を入れると、自動でどこまで作れますか?
架空の介護の職場(常勤14人とパート6人、30日)で試すと、7つの条件をすべて入れても勤務表が作れました。どの段も3秒以内に解け、希望休は80件中77件が通っています。
条件は1つずつ足し、そのたびに解けるかを見ました。必要人数だけなら希望休は79件通り、夜勤の後に明けと休みを置く条件を足すと77件に減ります。そこから先は、連勤の上限や遅番の翌日に早番を入れない条件を足しても77件のままでした。
公平さの条件も足せます。夜勤の多い人と少ない人の差を小さくするよう重みを付けると、夜勤の回数は3〜5回から4〜5回にそろいました。コードの中心は数行で、1日1人に1つの勤務を割り当て、条件を式で足していきます。
for s in staff:
for d in range(30):
m.AddExactlyOne(x[s, d, k] for k in ['早', '日', '遅', '夜', '明', '休'])
for d in range(30):
m.Add(sum(x[s, d, '夜'] for s in staff) == 2) # 毎晩の夜勤は2人
for s in staff:
for d in range(29):
m.Add(x[s, d, '遅'] + x[s, d + 1, '早'] <= 1) # 遅番の翌日に早番を入れない
この試算は架空の職場1つの結果です。実際の職場では、条件はもっと多くなります。それでも、1つずつ足して先月の表と見比べる手順は同じです。
勤務表が作れないときは、どこを見直しますか?
まず、人の数と枠の数を掛け算で突き合わせます。条件同士のぶつかりより先に、そもそも人が足りていないことが多いからです。
架空の職場では、毎晩2人×30日で夜勤の枠は60あります。1人月5回までとすると、60÷5で夜勤ができる人は12人いないと埋まりません。実際に夜勤ができる人を8人から14人まで変えて解くと、11人以下では解けず、12人で解けました。12人のときは全員がちょうど5回ずつ入っています。
CP-SATは、解がないときに「解けない(INFEASIBLE)」と証明して返します。どの条件のせいかまでは自動では分からないので、条件を1つずつ外して解き直し、解けるようになった条件を候補として示します。12人ぎりぎりの月は、1人休むだけで回らなくなります。月5回の上限を一時的に6回にするか、夜勤ができる人を増やすかは、職場が決めることです。
シフトを自動で作る前に、職場で決めておくことは?
希望を聞く方法と、確定したシフトを知らせる期限を、先に決めておきます。厚生労働省の「シフト制」の留意事項(2026年6月19日改正)は、労使で話し合って決めておくルールの例を挙げています。シフトの作成にあたり事前に意見を聴くことと、確定したシフトを通知する期限や方法です。
同じ留意事項は、確定したシフトの変更は労働条件の変更に当たり、双方の合意のうえで行うよう求めています。自動で作った表も、確定までは案として扱います。確定後に組み直すときは、期限と手続きを決めておかないと揉めます。
条件に入れる法令の決まりも、ここで確かめます。休日は毎週1回か、4週4日以上です(労働基準法35条)。休憩は、6時間を超えたら45分以上、8時間を超えたら1時間以上です(34条)。
終業から次の始業まで一定の休息を空ける勤務間インターバルは、2019年4月1日から事業主の努力義務になっています。何時間にするかは職場で決め、その数字を「つなぎ方」の条件に入れます。
このサイトで相談するには?
先月の勤務表と決まりをうかがえれば、試作は最短当日でお見せできます。名前は黒塗りや記号のままで構いません。費用は一式30万円〜で、今のExcelで動かす形なら毎月0円〜です。無料で相談するからご連絡ください。
よくある質問
- Excelのままでもシフトを自動で作れますか?
- 作れます。条件と結果の受け渡しを今のExcelの形にそろえ、計算だけをソルバーに任せる形にすれば、見た目と使い方はほとんど変わりません。
- 希望休が全部通らないのはなぜですか?
- 必要人数などの必ず守る条件とぶつかる希望があるからです。架空の例でも80件中3件は通らず、どの日の誰の希望かを一覧にして相談に回します。
- 何人くらいの職場から自動化した方がよいですか?
- 人数より、条件の数で決めます。夜勤や資格の条件があり、組むのに毎月何時間もかかっているなら、10人ほどの職場でも試す価値があります。
- AIが作ったシフトをそのまま確定してよいですか?
- いいえ。案として出し、組む人が見て直してから確定します。確定後の変更は労働条件の変更に当たり、本人との合意が要ります。
出典
- 厚生労働省「いわゆる『シフト制』により就業する労働者の適切な雇用管理を行うための留意事項」(令和4年1月7日、改正 令和8年6月19日)(2026年10月16日確認)
- 厚生労働省 働き方・休み方改善ポータルサイト「勤務間インターバル制度について」(2019年4月1日から努力義務)(2026年10月16日確認)
- Google OR-Tools「Employee Scheduling」(看護師4人×3日×3交代などの例題)(2026年10月16日確認)
- Google OR-Tools「CP-SAT Solver」(解けた・解けないの状態の説明)(2026年10月16日確認)
- Burke, De Causmaecker, Vanden Berghe, Van Landeghem「The State of the Art of Nurse Rostering」Journal of Scheduling 7(6), 441–499, 2004(2026年10月16日確認)