← トップ
記事2026年9月25日

10月のシフトをAIに組ませる人へ|50回数えて違反は0件だった

条件6つ付きのシフト表をAIに50回組ませ、違反を1件ずつプログラムで数えた。結果は違反0件。さらに「そもそも組めない月」も20回中20回、AIが先に理由つきで指摘した。

来週から10月です。この週末、10月前半のシフトを組む人は多いと思います。

「AIにシフトを組ませると労基法違反の勤務表が出るから、人間の最終確認が必須」——検索すると、だいたいこう書いてあります。私もそう思っていました。

そこで、条件を6つ付けたシフト表をAIに50回組ませて、違反を1件ずつプログラムで数えました。結果は違反0件でした。 そして本当に価値があったのは、そこではありませんでした。

私が実際にやったこと:正解を自分で持ってから測る

AIの出力を「なんとなく良さそう」で評価しないために、先に正解側を用意しました。

やり方はこうです。まず架空の飲食店のシフト条件を自分で作ります。そしてその条件を判定するPythonスクリプトを先に書きます。人数・連勤・希望休・ペア禁止を1件ずつ数えて、違反があれば「10/4が3名(必要4)」のように吐き出すだけの、40行ほどのものです。

このスクリプトを、既知の正解表と、わざと壊した表の両方にかけて、正しく0件と5件を返すことを確認してから本番に入りました。ここを飛ばすと、AIの間違いではなく自分の採点ミスを記事にしてしまいます。

そのうえで、1試行を1つの独立した会話として実行し、AIには計算ツールを使わせず暗算で答えさせました。ツールを使えるAIに解かせたら、それはAIの能力ではなくソルバーの能力を測ることになるからです。

まず小さい表から:5人×7日を20回、違反は0件

最初の課題はこれです。

  • メンバー5名、10/1〜10/7の7日間
  • 毎日ちょうど2名が出勤
  • 1人あたり2〜3日
  • 連勤は2日まで
  • 希望休(各人1〜2日、計7件)
  • 田中と伊藤は同じ日に入れない

この課題、全部で3,262通りの正解があります。一方、希望休とペア禁止だけ守って適当に埋めると112,500通り。つまり当てずっぽうで全条件が揃う確率は2.9%です。

10回やらせて、10回とも全条件クリアでした。念のため「作ったあと条件①〜⑤を1つずつ照合してから出して」と検算を指示した条件でも10回。合わせて20回、違反0件。

正直、ここで記事の当初の仮説(AIは制約を守れない)は崩れました。でも5人7日は小さすぎます。実務で困るのはもっと大きい表です。

本番の規模へ:8人×14日・条件6つを10回、やはり0件

条件を実際の店に寄せました。

  • メンバー8名、10/1〜10/14の14日間
  • 平日は3名、土日は4名ちょうど
  • 毎日、責任者3名のうち最低1名を必ず入れる
  • 1人あたり5〜6日
  • 連勤は3日まで
  • 希望休は8名×2日=16件
  • 田中と伊藤は同じ日に入れない

こちらは希望休・人数・責任者・ペア禁止だけを満たす並べ方が約3,500京通りあり、そこから残り2条件(出勤日数と連勤)まで偶然そろう確率は0.010%。20万回シミュレーションして20回しか当たらない計算です。レベル1の約290分の1の難しさになります。

結果は10回中10回、違反0件。人数も、責任者の配置も、5〜6日の幅も、3連勤の上限も、16件の希望休も、ペア禁止も、すべて機械判定を通りました。

ここまで40試行。解が存在する問題では、1件も違反が出ませんでした。

本当に知りたかったのは「組めない月」だった

シフトで一番つらいのは、実は「難しい月」ではありません。本当につらいのは、そもそも組めない月です。日曜に希望休が集中して、何時間並べ替えても埋まらない、あの状態です。

そこで、答えが存在しない課題をわざと作りました。10/4(日)だけ、希望休を5名に重ねます。

【10/4(日)に何が起きているか】

  必要なのは          4名(土日ルール)
  希望休を出したのは  5名(鈴木・高橋・田中・伊藤・渡辺)
  ────────────────────────────────────
  出られるのは残り    3名(佐藤・山本・中村)

  必要 4名 - 出られる 3名 = 1名不足
  → 並べ替えでは絶対に解決しない

他の13日はすべて余裕があるので、パッと見では気づきません。人間が手で組むと、10/4だけ何度もやり直して時間を溶かすやつです。

これを20回投げました(普通に頼む10回+最後に判定行を求める10回)。

20回中20回、AIは先に気づきました。

しかも全20回とも、算数が正確でした。「10/4は鈴木・高橋・田中・伊藤・渡辺の5名が希望休で、出勤できるのは佐藤・山本・中村の3名だけ。4名必要なので1名足りません」——この形で、こちらが何も言わないうちに冒頭で報告してきます。

10回中9回は、10/4だけを3名のまま残し、他の13日は全条件を満たす表を作っていました。壊れている1日だけを壊れたまま渡し、そこに注記を付ける、という挙動です。1回は表を出すこと自体を拒否して、矛盾の説明と「3名で回す/誰かの希望休を崩す/応援を1名入れる」という3択だけを返してきました。

私が事前に恐れていたのは逆の挙動でした。組めないのに、それらしい表を作って「できました」と渡してくること。それは50回中1度も起きませんでした。

AIが書いた検証欄の数字72個を、1つずつ数え直した

AIは表と一緒に「検証結果」を書いてきます。「佐藤6日・鈴木6日・高橋5日……全員5〜6日の範囲内」「連勤は最大2日」といった自己申告です。

ここが一番怪しいと思いました。もっともらしい数字を並べているだけかもしれません。

そこで、表を出した9件について、AIが書いた出勤日数8人分=72個の数字を全部数え直しました。ズレは0個でした。 「最大連勤は2日」「渡辺が10/10〜10/12で3連勤」といった申告も、9件すべて実測と一致しました。

念のため書くと、これは「AIの自己申告は常に信用していい」という話ではありません。私が過去に測った範囲では、字数の自己申告(「400字です」)は6回中5回ずれていました。数えにくいものの自己申告はずれ、数えられる形に落ちているものの自己申告は合う、というのが今のところの感触です。シフト表は後者でした。

それでも人間がやることは残る:条件の書き方

この結果は「AIに丸投げしていい」という意味ではありません。精度が出たのは、条件が数えられる形で渡されていたからです。

【伝わらない渡し方】
  「10月のシフト組んで。土日は多めで、連勤きついから避けて」
   → 「多め」「きつい」をAIが勝手に解釈する
   → あとで検算もできない

【伝わる渡し方】
  ① 平日3名・土日4名ちょうど
  ② 責任者を毎日1名以上
  ③ 1人あたり5〜6日
  ④ 連勤は3日まで
  ⑤ 希望休は下記のとおり
  ⑥ 田中と伊藤は同日NG
   → すべて数で書かれている
   → AIも自分で数え直せる

違いは「番号を振ったか」ではなく、すべての条件が数で書かれているかです。「多め」は数えられませんが「4名ちょうど」は数えられます。「きつい」は数えられませんが「連勤3日まで」は数えられます。数えられる形にした瞬間、AIは自分の出力を自分で検算できるようになります。

そしてもう1つ。労働基準法の遵守や、特定の人に負担が寄っていないかという公平感の判断は、条件に書いていない限りAIは見ません。今回違反0件だったのは「私が書いた6つの条件」に対してであって、法令に対してではありません。 ここは人間の仕事として残ります。

今週やること(30分で終わります)

今日(10分):来月のシフト条件を、数えられる形で箇条書きにするだけ。「土日は4名ちょうど」「連勤は3日まで」「1人あたり5〜6日」。この3行が書ければ半分終わりです。

明日(15分):希望休を全部集めて、その箇条書きの下に貼り、AIに投げます。最後に必ずこの1行を足してください。

最後に「すべての条件を満たしている/満たしていない条件がある」の
どちらかを1行で書いて。満たしていない場合は、どの日のどの条件かも書いて。

組めない月だった場合(5分):AIが「10/4は1名足りません」と返してきたら、それは並べ替えで解決しない種類の詰まりです。手を動かす前に、誰に頭を下げるかを決める作業に切り替えてください。ここで浮く時間が、たぶん一番大きいです。

まとめ

要点:解が存在する課題40回で条件違反は0件。解が存在しない課題20回では、20回とも先に「組めません」と、理由の算数つきで報告してきました。AIがシフトで危ないという通説は、少なくとも条件を数値で渡した場合には当てはまりませんでした。

今日の小さな一歩:来月のシフト条件を3行だけメモしてください。「1日に何名ちょうどか」「連勤は何日までか」「1人あたり何日から何日か」。この3つが数字で書ければ、AIは検算できる相手になります。

筆者の視点:AIの弱点を探す記事を書くつもりで50回測って、仮説のほうが折れました。それでも書いているのは、「AIは危ない」も「AIは万能」も、自分で数えないうちは同じ強さの思い込みだと思うからです。この記事の数字も、あなたの店の条件では違う答えになるかもしれません。判定スクリプトを書かなくても、10回投げて10回とも希望休が守られているかを自分の目で数えるだけで、任せていい範囲の線は引けます。

その線は、人から聞くものではなく、自分の現場で引くものです。

同じ場面、ありませんか。役に立ったら♡やブックマークで教えてください。

この記事は note にも掲載しています(初出: note版 2026-09-25)。