AIにシフト表を作らせるなら、「条件をすべて満たしています」を信じず、スタッフに配る前にAIとは別の方法で違反をチェックする
当方は、架空の食品スーパーの4週間のシフト表をChatGPT・Gemini・Claudeに作らせました。希望休・人数・週の日数などの条件を満たしていないケース(この記事では「違反」)を、プログラムでチェックしています。
- 表を一から作らせた場合 … 違反0件のAIもあれば、100件を超えるAIもあった。同じAIでも頼み方で結果が変わった
- 「条件をすべて満たしています」という言い切り … 違反があるのに全部の条件を満たしたと言い切った回が、ChatGPTで2本、Geminiで4本あった
- AIが自分でプログラムを書いて確かめた回 … Geminiが検算のプログラムを書いた2本は、どちらも違反0件だった
チャットGPTでシフトは作れるのか
作れます。ただし、表の形になっていることと、条件を守れているかは別でした。当方の試しでは、ChatGPTの無料プランが違反0件の表を出した回もあれば、43件の違反があるのに「すべて満たしています」と言って出した回もありました。
Googleで「シフト作成 AI」と調べると、上位のページにはAIへの頼み方や、AI自身に確かめさせる方法まで並んでいます。
当方が知りたかったのはその先で、AIの「守れています」は本当かでした。そこで、AIを使わずに違反をチェックする仕組みを用意してから、同じ条件を5種類のAIに渡してみました。
シフト表は、見た目が埋まっていても、1マスのずれで週の日数や人数が崩れます。スタッフに確定したシフトとして渡す(配る)前に、条件どおりかをチェックするところまでが、AIに作らせる作業です。
どんな条件の店で試したのか
店も人も希望休も、すべて架空です。条件は「店の決めごと」として置き、労働時間や休憩の法律の下限は入れていません。実際の店で使うときは、就業規則などで決まる条件を人が確かめてから書き足してください。
| 項目 | 条件 |
|---|---|
| 期間と時間帯 | 2026年11月2日〜29日の4週間。朝番9〜15時・夕番15〜21時。1人1日1つの番まで |
| 必要な人数 | 平日は朝番2人・夕番2人。土日と祝日は朝番3人・夕番3人(ちょうどこの人数) |
| スタッフ | 10人(正社員2人は週5日ちょうど、パート8人は週3〜4日まで)。朝だけ・夕だけの人がいる |
| そのほか | どの番にもレジ責任者を1人以上。連続勤務は5日まで。希望休は30日分 |
AIに作らせたのは、次のような表です。10人×28日のマスを、朝・夕・休で1つずつ埋めていきます。図は、当方のプログラムが条件どおりに組んだ一例です。

この条件をもとに、3つの場面を用意しました。どれも、正解があるかどうかを先にプログラムで確かめてあります。
- 月A:全部守って組める月
当方のプログラムが違反0件の表を見つけてある。AIにも違反0件を期待する - 月B:どう組んでも1人足りない月
11月21日(土)は、希望休を足した結果、出られる人が5人しかいない。必要なのは6人なので、「この日は1人足りない」と言えるかを見る - 場面C:確定した表で、1人が急に休む
11月14日(土)夕番の田中さん(レジ責任者)が来られなくなる。正しい直し方は「松本さんを入れる」の2マスだけ。手の空いている伊藤さんを入れると、週の上限を超える
頼み方も2通り試しました。Aは「作ってください」(場面Cは「直してください」)とだけ頼む形です。Bでは、月A・月Bに「守れない条件があれば先に言う」「表のあとに自分で確かめた結果を書く」の2文を足しました。
場面Cでは「ほかの人の予定はできるだけ動かさない」「変えたマスを一覧にする」の2文を足しています。
AIごとに、違反は何件あったのか
各AIに6本ずつ(3つの場面×2通りの頼み方)作らせ、違反の件数を数えた結果が次の表です。ChatGPTとGeminiはウェブ版の無料プランを人が操作し、Claudeは当方の定額プランで、プログラムを動かせない設定にして試しました。
| 場面・頼み方 | ChatGPT 無料 | Gemini 無料 | Claude Opus 5.5 | Claude Sonnet 5.5 | Claude Haiku 4.5 |
|---|---|---|---|---|---|
| 月A・A | 43 | 53 | 0・0・0 | 0・0・0 | 114 |
| 月A・B | 0 | 70 | 0・0・0 | 0・0・0 | 表なし(誤って「組めない」) |
| 月B・A | 表なし(正しく聞き返した) | 59 | 1・1・1 | 聞き返し・1・聞き返し | 125 |
| 月B・B | 9 | 39 | 3・1・1 | 1・1・1 | 表なし(誤って「不可能」) |
| 場面C・A | 20 | 0 | 0 | 0 | 1 |
| 場面C・B | 9 | 0 | 0 | 0 | 2 |
※ Claude Opus 5.5とSonnet 5.5の月A・月Bは、同じ条件で3回ずつ作らせた結果を「・」で並べています。ほかは各1回です。月Bは11月21日の1人不足が避けられないので、違反1件が最善です。Opus 5.5とSonnet 5.5が表を出した回は、どれも「11月21日の朝番が1人足りない」と申告していました。Geminiのモデルは、操作した担当者が画面で確認した3.6 Flashです。ChatGPTは、画面にモデル名が出ていませんでした。
※ 違反の件数は、条件ごとに次の単位で数えています。人数の過不足とレジ責任者は番ごと(朝番と夕番で別々)、週の日数は1人の1週間ごと、希望休と入れない番は1マスごと、連勤は6日目に入った日ごとに1件です。
Claude Opus 5.5とSonnet 5.5は、プログラムを動かせない設定でも、月Aを3回とも違反0件で組みました。
一方で、同じ条件でもAIによって結果は0件から100件超まで開きます。使うAIを選んでも、配る前のチェックを省けるわけではありません。
組めるはずの月Aで、何の違反が多かったのか
月Aは、全部守って組める月です。それでも違反が多く出た3本の内訳を並べました。
| 違反の種類 | ChatGPT 月A・A | Gemini 月A・A | Gemini 月A・B |
|---|---|---|---|
| 人数の過不足 | 24 | 30 | 34 |
| 週の日数 | 11 | 15 | 20 |
| レジ責任者なし・連勤 | 6 | 6 | 13 |
| 希望休・入れない番 | 2 | 2 | 3 |
| 合計 | 43 | 53 | 70 |
3本とも、いちばん多かったのは人数の過不足でした。入れすぎた番と足りない番の両方があり、Geminiは入れすぎのほうが多く出ています。ChatGPTの月A・Aは、2人の行が1マスずつ欠けていたため、その分の人数のずれも含んでいます。
希望休を破った違反は、どの回も1〜3件でした。数は少なくても、本人が休みを出した日に名前が入っていれば、そのまま配ると信頼を失います。件数の多い少ないではなく、1件でも残っていれば配らないのが基準です。
AIの「条件をすべて満たしています」はどこまで本当だったか
違反の件数だけでは見えないのが、AIの添えた言葉です。ChatGPTの月A・Aは「すべて満たしています」と書き、週ごとの勤務日数の一覧まで付けていました。ところが、その一覧はパート8人のうち7人で、表の中身と数が合っていませんでした。
Geminiも、違反のあった4本すべてで「すべての条件を満たした」と書いています。月Bでは、組めない月なのに「守れない条件は1つもありませんでした」と言い切りました。
自分の確認欄で、ある人の週5日勤務(上限は週3日)に触れかけて、言い訳のようになっていた回もあります。
AIが付ける「条件チェック」の欄は、表を確かめた結果ではなく、確かめたという文章です。欄があることは、表が正しいことの証拠になりません。
→ くわしくは「AIエージェントとは|何をどこまで任せられるか」で解説しています。
判断は合っていても、表を書き写すところで崩れる
いちばん気づきにくかったのは、場面Cでした。ChatGPTは2回とも「田中さんを休みにして、松本さんを夕番に入れる。変更はこの2マスだけ」と、正しい直し方を説明してくれました。
ところが、最後に出してきたCSV(表計算に貼れる、カンマ区切りの文字の表)は違いました。頼み方Bの回で、正しく直した表とChatGPTが出した表を比べると、次のマスがずれていたのです。
| 日付 | 人 | 正しく直した表 | ChatGPTの表 |
|---|---|---|---|
| 11/16(月)〜18(水) | 松本さん | 夕・休・夕 | 休・夕・休 |
| 11/21(土)・22(日) | 吉田さん | 休・夕 | 夕・休 |
| 11/24(火)〜28(土) | 吉田さん | 休・夕・夕・休・夕 | 夕・夕・休・夕・休 |
| 11/29(日) | 吉田さん | 休 | マスが無い |

松本さんの行は、11月14日に「夕」を入れた直後の数日が、1日ずつ前にずれていました(そのあとは休みが続くので、見た目では元に戻ります)。
吉田さんの行は1マス欠けていて、11月21日から後ろが1日ずつ前に詰まり、最後の11月29日は空欄でした。変わったマスは、正解の2マスではなく11マスです。そのまま表計算に貼ると、11月16日〜28日の夕番に、人数の過不足が9件出ます。
頼み方Aの回では、「いただいた表では田中さんと加藤さんの行が1マスずつ不足していました」と書いてきました。当方が渡した表は、10人とも28日分そろっています。
ChatGPTの画面にある送信文でも、行の長さを測って確かめました。実際に欠けていたのは、ChatGPTが出した表のほうです。4人の行が1マスずつ足りず、変わったマスは27、違反は20件にのぼりました。
28日×10人の表は、AIにとって「考える」作業より「書き写す」作業のほうが崩れやすいようです。説明文を読んで安心せず、表そのものをチェックする必要があるのはこのためです。
AIが自分でチェックのプログラムを書いた回は、どうだったのか
Geminiは場面Cの2本で、答える前にPython(表計算のような集計を書けるプログラムの言葉)のコードを書いて動かしていました。
条件を1つずつ確かめる関数を自分で作り、「違反0件」を確かめてから表を出しています。結果は2本とも違反0件で、変わっていたのは正解の2マスだけでした。
同じGeminiでも、表を一から作る月A・月Bではコードを書かず、違反は39〜70件でした。ただし、場面Cは決まった表の2マスを直す課題で、一から作るより易しい課題です。
プログラムを動かせない設定のClaudeも、場面Cは違反0〜2件でした。今回の試しだけでは、プログラムを使ったことが正解の理由だとは言い切れません。
それでも、AIの頭の中の確認に頼らず、プログラムがチェックした結果を見て判断できる点は、どの課題でも変わりません。当方が勧める分担は次のとおりです。

- プログラム … 各日の朝番・夕番の人数を数え、週の日数・連勤・希望休との重なりをチェックする
- AI … 条件を読んで下書きの表を作る。チェックするプログラムを書く
- 店長 … 足りない日の穴埋め、替わってもらう相手への声かけ、最後の決定
当方の実務でも、AIに文字数を数えさせると正確な値が返らないことが分かっています。モデルの優劣ではなく、役割の分け方の話です。チェックはプログラムに任せ、AIにはそのプログラムを書かせる形を、当方は勧めます。
シフト表のチェックは、AIが書いたプログラムでも、表計算の数式でもできます。大事なのは、表を作ったAIの言葉ではなく、チェックした結果で判断することです。
→ くわしくは「商品説明文をAIで|プログラムと人で誤りを止める」で解説しています。
「組めません」と言われたときに確かめること
AIが「この条件では組めません」と答えることもあります。これも、そのまま信じてはいけない答えでした。
Claude Haiku 4.5は、全部守って組める月Aを「守れない条件がある」と判定し、条件を緩めるよう求めてきました。
月Bでは「月全体が人手不足で作成は不可能」と答えています。計算を見ると、パートの「週4日まで」を月4日のように扱っていました。実際に足りないのは11月21日の1日だけです。
反対に、ChatGPTの月B・Aは、11月21日だけが組めないことを正しく見抜き、表を作る前に「誰の希望休を外すか指定してください」と聞き返してきました。Claude Sonnet 5.5も、同じ頼み方の3回中2回で、同じように聞き返しています。
「5人のうち誰か1人の11月21日を出勤にすれば、全体を組めることを確認できます」という言い切りも、当方のプログラムで5通りとも確かめて正しいと分かりました。
- 足りない日と人数を言わせる
「どの日のどの番が何人足りないか」を具体的に書かせる。月全体がだめ、という答えは疑う - その日に出られる人を自分で数える
希望休と入れる番から、その日に出られる人数を数える。表計算のフィルターでも数えられる - 直し方の候補を出させてから、人が選ぶ
誰の希望休を外すか、誰に頼むかは店長が決める。AIには候補と、そのときの違反の有無を出させる
シフト表をAIで作るときの手順
試した結果から、当方が勧める流れは次のとおりです。いきなり今月の表を作らせず、先月の表でチェックの仕方を確かめてから使います。
手順2で使える、AIへの頼み方の例です。列の名前や条件は店ごとに違うので、貼るだけで完成するわけではありません。最初の1回は、結果を先月の表で必ず確かめてください。
添付したシフト表(CSV)と下の条件について、条件ごとに違反をチェックするプログラムを書いて、実行してください。違反があれば「日付・名前・どの条件か」を一覧にしてください。表を直す必要はありません。チェックだけにしてください。
プログラムが正しいかどうかも、最初は人が確かめます。わざと違反を1つ入れた表で、その違反を見つけられるかを見るのがいちばん早い方法です。
-
条件を文章で書き出す必要な人数、入れる番、週の日数、連勤、希望休を、今回の表のように1か所にまとめる。書いていない条件は、AIもチェックするプログラムも守れない
-
チェックするプログラムを先に作らせる先月の確定したシフト表と条件をAIに渡し、条件ごとの違反をチェックするプログラムを書かせる。先月の表で「違反0件」になるか、わざと希望休の日に1人入れた表で、その希望休の違反を見つけられるかを確かめる
-
今月の表を作らせるAIに下書きの表を作らせる。表計算に貼れるCSVで出させると、次の手順が楽になる
-
2のプログラムでチェックするAIの説明ではなく、チェックの結果を見る。違反が出たら、その箇所をAIに伝えて直させ、もう一度チェックする
-
足りない日は人が決める組めない日が残ったら、誰に頼むかを店長が決める。決めたことを条件に足して、もう一度チェックする
AIに任せやすいシフトと、人が決めるシフト
当方の開発担当者は、以前に工場でシフト勤務表を作った経験があります。シフトはほぼ決まった型で回っていて、作る側で困った覚えはないそうです。都合が悪い日だけ、自分で誰かに替わってもらって済ませていました。
今回の試しと重ねると、AIに任せやすいのは、決まった型に沿って表を埋める部分です。難しかったのは、急な休みや、希望休が重なって人が足りない日のような例外でした。
場面Cのように、例外の直し方をAIが正しく判断できても、表を書き写すところで崩れることがあります。
だからこそ、例外のときほどチェックする仕組みが効きます。誰に替わってもらうかを決めるのは店長で、その結果が全体の条件を崩していないかをチェックするのがプログラムです。
FAQ
作れます。当方の試しでは、ChatGPTの無料プランで違反0件の表が出た回もありました。一方で、違反を含む表を「すべて満たしています」と言って出した回もあったので、スタッフに配る前に、別の方法で違反をチェックしてください。
当方が試したChatGPTとGeminiは、無料プランでシフト表を作れました(2026年9月時点)。ただし、無料プランでも有料の専用ツールでも、条件を守っているかを店長がチェックする手間は残ります。
先に、足りない日と人数を具体的に聞いてみてください。当方の試しでは、組める月を「組めない」と判定したAIがありました。足りない日が本当にあるかどうかは、その日に出られる人を数えれば確かめられます。
- AIが作ったシフト表の「条件をすべて満たしています」は、当方の試しでは違反を含む表にも付いていた
- 直し方の判断が正しくても、28日×10人の表を書き写す段階で行が欠けたりずれたりすることがあった
- AIが自分で検算のプログラムを書いて動かした回は、2本とも違反0件だった
- 「組めません」という答えも、足りない日と人数を数えて確かめる必要がある
先月のシフト表と条件をAIに渡し、違反をチェックするプログラムを書かせて、先月分でチェックの仕方を確かめる
自社の業務に合わせたAIツールの選定・導入は、ぜひ、ジッソウLABのゲンバAIへ無料でご相談ください。
この記事の内容が「自社でもいけるか」は、1分の無料診断で確かめられます。
個別の事情は無料相談でどうぞ(売り込みはしません)。


コメント