店舗や施設のシフト作成は、責任者が月末の夜に何時間もかけて組む仕事です。希望休を見ながら、必要人数を満たし、資格を持つ人を各時間帯に配置し、特定の人に負担が偏らないようにする。組み上げた翌日に「その日は無理です」と言われて、また最初から組み直す。
この作業を自動化しようとすると、たいてい2つの壁に当たります。条件を全部入れると解が見つからず、条件を緩めると現場が納得しない。この記事では、その手前にある「条件を法令由来と運用由来に分ける」という工程を説明します。ここを分けると、機械に任せられる範囲がはっきりします。
この記事でわかること
- シフトの条件を法令由来・店舗由来・配慮由来の3層に分ける方法。層ごとに扱いを変えると、解が見つかるようになる
- 希望休の集め方と、公平さを数字で定義する手順。感覚の議論を止める方法
- 週1回の休日、休憩の付与、労働条件の明示という、シフトを組むうえで外せない法令の要件
ムダの現状:組み直しが時間を食っている
シフト作成にかかる時間を分解すると、最初に組む時間より、組み直す時間のほうが長いことが分かります。
希望休を集め、必要人数を配置し、一度は完成させる。そこから、急な予定変更、資格要件の見落とし、特定の人への偏りの指摘が入り、そのたびに組み直す。1回の組み直しで、関係する何人ものシフトが動きます。組み直しは、最初に組むのと同じくらい時間がかかるのに、これが月に3回も4回も発生します。
条件は3種類に分かれる
組み直しが減らない原因は、条件の種類が混ざっていることにあります。シフトの条件を並べると、性質が3つに分かれます。
| 層 | 中身 | 扱い |
|---|---|---|
| 法令由来 | 休日、休憩、労働時間の上限 | 絶対に破れない |
| 店舗由来 | 時間帯ごとの必要人数、資格者の配置 | 破ると営業に支障が出る |
| 配慮由来 | 希望休、連勤の回避、組み合わせの相性 | できるだけ守る。優先順位をつける |
問題は、この3つを同じ「条件」として機械に渡すことです。すべてを満たす解は、たいてい存在しません。解が見つからないのは機械の性能ではなく、条件の設計の問題です。
機械に渡せる部分と、人に残す部分
| 工程 | 中身 | 誰がやるか |
|---|---|---|
| 希望の収集 | 希望休・希望時間帯を集める | 機械。フォームで集める |
| 法令違反の検出 | 休日・休憩・上限を機械で確認 | 機械 |
| 配置の作成 | 条件を満たす組み合わせを作る | 機械。候補を出す |
| 配慮の調整 | 誰の希望を通すかを決める | 人。責任者 |
| 確定と通知 | シフトを確定して伝える | 人 |
4番目の「配慮の調整」を機械に渡さないのが要点です。誰の希望を通して誰の希望を落とすかは、その人の事情を知っている責任者の判断です。ここを機械が決めると、決めた理由を説明できなくなります。
スキームの全体図:条件を3層に分ける
この順番で組むと、どこで詰まったかが分かります。2層目で詰まれば人手が足りていない、3層目で詰まれば資格者の配置に無理がある、4層目で詰まれば希望が集中している。原因の切り分けが、そのまま打ち手になります。
必要なツールと費用(2026年9月22日時点)
| 必要なもの | 用途 | 費用の考え方 |
|---|---|---|
| 入力フォーム | 希望休・希望時間帯の収集 | 既存の契約の範囲 |
| スプレッドシート | シフト表と条件の確認 | 追加費用なし |
| Apps Script | 法令由来の条件の自動確認 | 追加費用なし |
| 就業規則と協定 | 自社の条件の確定 | 0円。読む時間が半日 |
シフト作成の専用ツールを検討する前に、まず条件を3層に整理してください。条件が整理されていない状態でツールを入れても、同じところで詰まります。整理したうえで、自動配置の部分だけをツールに任せるかどうかを判断する順番です。
導入手順:法令由来の条件から書き出す
Step 1:法令由来の条件を、自社の数字に落とす
最初に書き出すのは、法令由来の条件です。ここは会社の裁量で緩められません。
労働基準法第35条第1項は、使用者は労働者に対して毎週少なくとも1回の休日を与えなければならないと定めています。同条第2項は、この規定は4週間を通じ4日以上の休日を与える使用者については適用しない、としています。自社がどちらの形をとっているかを、就業規則で確認してください。
休憩については、同法第34条第1項が、労働時間が6時間を超える場合においては少なくとも45分、8時間を超える場合においては少なくとも1時間の休憩時間を、労働時間の途中に与えなければならないと定めています。終業時刻に付けて早上がりにする、という運用はこの要件から外れます。
同条第2項は、休憩時間は一斉に与えなければならないとしたうえで、労使協定があるときはこの限りでないという例外を置いています。交替で休憩を取る運用をしているなら、その協定があるかを確認してください。同条第3項は、休憩時間を自由に利用させなければならないとしています。
これらを、自社の数字として1枚の表にします。
| 条件 | 確認する場所 | 記入例 |
|---|---|---|
| 休日の与え方 | 就業規則の休日の条 | 毎週1回 |
| 休憩の付与 | 就業規則の休憩の条 | 6時間超45分、8時間超60分 |
| 一斉付与の例外 | 労使協定の有無 | 協定あり。交替で取得 |
| 時間外の上限 | 36協定の届出の写し | 月30時間 |
| 深夜の扱い | 就業規則の割増の条 | 22時から翌5時 |
Step 2:店舗由来の条件を、時間帯ごとに書く
次が店舗の条件です。ここでよくある間違いは、1日単位で必要人数を書くことです。「平日は5人」と書いても、朝と夕方では必要な人数が違います。
時間帯を分けて、それぞれに必要人数を書いてください。2時間刻みで十分です。そして、その時間帯に特定の資格や経験が必要なら、それも書く。レジ締めができる人、発注ができる人、といった単位です。
この表を作る過程で、必要人数の根拠が曖昧なことに気づく場合があります。昔からそうしている、という理由しかないなら、一度実績を見て決め直す機会です。売上や客数の時間帯別の記録があれば、それを根拠にできます。
Step 3:希望はフォームで集め、期限を切る
希望休を紙やチャットで受け取るのをやめてください。集計に時間がかかるうえ、期限後の追加が際限なく入ります。
フォームで集め、締切を明示します。集める項目は、休みたい日、働けない時間帯、そしてその希望の重さの3つです。3つ目が効きます。「絶対に外せない」「できれば避けたい」の2段階で申告してもらうと、調整の優先順位が自動的に決まります。
締切後の変更は受け付けない、と決めるのではなく、締切後の変更は本人が交代相手を見つける、という運用にしてください。禁止すると、直前になって「行けません」という連絡に変わるだけです。
Step 4:法令違反を機械で検出する
組み上げたシフト表に対して、法令由来の条件を機械で確認します。次のApps Scriptは、シフト表を読んで違反の候補を書き出します。
var BREAK_6H = 45;
var BREAK_8H = 60;
function checkShift() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var rows = ss.getSheetByName('シフト').getDataRange().getValues().slice(1);
var byPerson = {};
var out = [];
for (var i = 0; i < rows.length; i++) {
var r = rows[i];
var name = r[0], date = r[1], start = r[2], end = r[3];
var brk = Number(r[4] || 0);
if (!byPerson[name]) byPerson[name] = [];
if (!start) {
byPerson[name].push({ date: date, work: false });
continue;
}
byPerson[name].push({ date: date, work: true });
var minutes = (end - start) / 60000;
if (minutes > 480) {
if (brk < BREAK_8H) out.push([name, date, '休憩が不足(8時間超)', brk + '分']);
} else if (minutes > 360) {
if (brk < BREAK_6H) out.push([name, date, '休憩が不足(6時間超)', brk + '分']);
}
}
for (var n in byPerson) {
var weeks = groupByWeek(byPerson[n]);
for (var w = 0; w < weeks.length; w++) {
var rest = 0;
for (var j = 0; j < weeks[w].length; j++) {
if (!weeks[w][j].work) rest++;
}
if (weeks[w].length === 7) {
if (rest === 0) out.push([n, weeks[w][0].date, '週の休日がない', '']);
}
}
}
write(ss, out);
}
function groupByWeek(days) {
days.sort(function (a, b) { return new Date(a.date) - new Date(b.date); });
var weeks = [], cur = [];
for (var i = 0; i < days.length; i++) {
cur.push(days[i]);
if (cur.length === 7) { weeks.push(cur); cur = []; }
}
if (cur.length > 0) weeks.push(cur);
return weeks;
}
function write(ss, out) {
var sh = ss.getSheetByName('確認結果');
sh.getRange(2, 1, Math.max(sh.getLastRow() - 1, 1), 4).clearContent();
if (out.length === 0) return;
sh.getRange(2, 1, out.length, 4).setValues(out);
}
このコードで押さえている点を3つ挙げます。
1つ目、休憩の判定を拘束時間ではなく労働時間で行うこと。上のコードは簡略化していますが、実装では休憩を除いた時間で判定するよう、自社の運用に合わせて調整してください。
2つ目、週の区切りを自社の定めに合わせること。就業規則で週の起算日が決まっているはずです。コードの `groupByWeek` は7日ごとに区切る簡易な実装なので、起算日に合わせて書き換えてください。
3つ目、4週4日の変形をとっている場合は判定が変わること。毎週1回ではなく4週を通じて4日以上という形なので、週単位の判定では検出できません。自社がどちらかを、Step 1の表で確定させてから実装します。
資格や経験の条件は、人ではなく役割で書く
店舗由来の条件を書くとき、「この時間帯は田中さんが必要」と人名で書きたくなります。これをやると、その人が辞めた瞬間に条件が破綻します。
書くのは役割です。レジ締めができる、発注ができる、新人の指導ができる。そして別の表で、誰がどの役割を持っているかを管理します。条件の表と、人の表を分けるのが要点です。
この分け方には副次的な効果があります。役割を持つ人が1人しかいない項目が一目で分かるため、育成の優先順位がそのまま見えます。シフトが組みにくい原因の多くは、特定の役割を持つ人が少ないことにあります。
Step 5:詰まった箇所を、層ごとに記録する
組み終えたら、どの層で詰まったかを記録してください。1か月で終わらせず、3か月続けると傾向が見えます。
法令由来で詰まる日が多いなら、人員そのものが足りていません。店舗由来で詰まるなら、資格を持つ人が特定の時間帯に偏っています。配慮由来で詰まるなら、希望が特定の日に集中しています。層が分かれば、打ち手も分かれます。採用、育成、希望の分散。それぞれ別の対策です。
現場の合意の取り方:公平さをどう定義するか
シフトで最も揉めるのは、公平さの認識です。そして公平さは、定義しない限り一致しません。
| 不満の中身 | 背景 | 答え方 |
|---|---|---|
| 希望が通る人と通らない人がいる | 通った回数が見えていない | 希望の通過率を個人別に集計し、本人に開示する |
| 土日ばかり入れられる | 負担の重い枠の配分が不明 | 土日・夜間の担当回数を数え、偏りを数字で示す |
| 機械が決めたと言われる | 説明を求めても答えが返らない | 配慮の調整は人が決める設計にして、理由を言えるようにする |
公平さは、2つの数字で定義する
感覚の議論を止めるために、公平さを数字にします。使うのは2つだけです。
1つ目は、希望の通過率。申告した希望のうち、何件が通ったかの割合です。2つ目は、負担の重い枠の担当回数。土日、夜間、年末年始など、自社で負担が重いとされる枠の回数です。
この2つを個人別に集計し、月末に本人へ開示してください。全員ぶんを公開する必要はありません。自分の数字と、全体の平均が分かれば十分です。数字が見えると、「自分だけ損をしている」という感覚の多くは解消します。
偏りが実在する場合は、認めて示す
数字を集計すると、実際に偏っていることもあります。そのときは隠さないでください。
偏りには理由があるのが普通です。資格を持つ人が少ない、その時間帯に動ける人が限られている。理由を説明したうえで、いつまでにどう解消するかを示します。解消の見通しが示せない偏りは、手当で報いるか、配置を変えるかの判断になります。数字を出しておいて対処しないのが、最も信頼を損ないます。
失敗パターンと限界:休日・休憩・明示の要件
シフトを組む前に、労働条件の明示が要る
見落とされやすいのが、労働条件の明示です。労働基準法施行規則は、明示すべき事項として、始業及び終業の時刻、所定労働時間を超える労働の有無、休憩時間、休日、休暇、並びに労働者を二組以上に分けて就業させる場合における就業時転換に関する事項を挙げています。
シフト制の場合、個々の日の始業終業をあらかじめ特定できないことがあります。その場合にどう明示するかは、雇用契約の作り方の問題です。シフトの自動化を進める前に、自社の契約書と就業規則が、シフト制の実態に合っているかを確認してください。ここが整っていないと、シフトをいくら精密に組んでも土台が揺らぎます。
休憩は「労働時間の途中」でなければならない
自動配置の条件を作るとき、休憩を単なる「45分の控除」として扱うと、要件から外れる配置が生まれます。
労働基準法第34条第1項は、休憩時間を労働時間の途中に与えなければならないと定めています。始業前や終業後に付けるのは、この要件に当たりません。機械に組ませるなら、休憩の開始時刻が始業と終業の間にあることを、条件として明示的に書いてください。
この仕組みが向かない場合
従業員が5人程度で、全員がほぼ同じ時間帯に働く店舗では、自動化の効果が出ません。条件の組み合わせが少なく、手で組んでも10分で終わるためです。この場合は、希望の収集だけをフォームにして、集計の手間を減らすところまでで十分です。
逆に、複数店舗をまたいで人を動かしている場合は、この記事の仕組みだけでは足りません。店舗間の移動時間、店舗ごとの必要人数、交通費の扱いが条件に加わるためです。まず1店舗で回してから、店舗間の調整を足す順番を勧めます。
希望が集中する日は、仕組みでは解けない
年末年始や連休など、希望が集中する日は、どんな仕組みでも全員の希望は通りません。ここを自動配置に解かせようとしないでください。
この場合の実務的な進め方は、前年の実績を出すことです。去年その日に出た人が誰かを示したうえで、今年は別の人に回すという形にすると、交渉が感情論になりにくくなります。
そのために、集中する日の担当実績は年単位で残してください。シフト表そのものは1年で消しても、「年末年始に出た人の一覧」だけは別に残す。これがあるかないかで、毎年の調整のしやすさが変わります。
シフトは早く出すほど、変更が減る
最後にもう1点。シフトを公開する時期そのものが、変更の回数に影響します。
月末ぎりぎりに翌月のシフトを出すと、すでに予定を入れてしまった人から変更の申し出が来ます。逆に2週間前に出せば、本人が予定を調整できる余地が生まれます。公開を1週間早めるだけで、確定後の変更が目に見えて減ることがあります。
ただし、早く出すには希望の締切も前倒しになります。ここは現場の生活のリズムと相談してください。早く出すこと自体が目的になって、希望が出しづらい締切になれば逆効果です。
効果の測り方
| 数字 | 測り方 | いつ見るか |
|---|---|---|
| 作成にかけた時間 | 最初に組む時間と組み直しの時間を分けて記録 | 毎月 |
| 確定後の変更回数 | 公開してから月末までの変更件数 | 毎月 |
| 希望の通過率 | 個人別と全体平均 | 毎月 |
1つ目を、最初に組む時間と組み直しの時間に分けて記録するのが要点です。自動化の効果は、多くの場合組み直しの時間の減り方に現れます。最初に組む時間だけを見ていると、効果が小さく見えます。
2つ目が減らない場合、原因は希望の収集にあります。締切後の申告が多いなら、締切の設定が現場の生活のリズムと合っていない可能性があります。給与の締めや学校の予定など、希望が確定するタイミングに合わせて締切を動かしてください。
まとめ
シフト作成の自動化でつまずくのは、条件を全部同じ扱いで機械に渡すからです。条件は3層に分かれます。法令由来、店舗由来、配慮由来。この順に重ねて組むと、どこで詰まったかが分かり、原因の切り分けがそのまま打ち手になります。
法令由来は、毎週少なくとも1回の休日、6時間超で45分・8時間超で1時間の休憩、そして休憩は労働時間の途中に与えること。4週4日の変形をとっているかは、就業規則で確認します。これらを機械で確認し、違反の候補を出させます。
配慮由来、つまり誰の希望を通すかは人が決めます。ここを機械に渡すと、決めた理由を説明できなくなります。そのかわり、公平さは希望の通過率と負担の重い枠の担当回数という2つの数字で定義し、月末に本人へ開示する。偏りが実在するなら隠さず、いつまでにどう解消するかを示してください。
よくある質問
シフト作成の専用ツールを入れたほうが早くないですか
条件を3層に整理してから検討してください。整理されていない状態でツールを入れても、同じところで詰まります。整理したうえで、自動配置の部分だけをツールに任せるかを判断する順番です。条件の整理は、どのツールを使う場合でも必要な作業です。
希望休を全部通すことはできませんか
必要人数を満たせる範囲でしか通りません。だからこそ、希望の重さを2段階で申告してもらう形にします。絶対に外せないものだけを優先し、できれば避けたいものは調整の対象にする。全部を同じ重さで受け取ると、調整の基準が作れません。
休憩を終業時刻に付けて早上がりにしてはいけませんか
労働基準法は、休憩時間を労働時間の途中に与えなければならないと定めています。終業後に付ける形は、この要件に当たりません。自動配置の条件を作るときは、休憩の開始時刻が始業と終業の間にあることを明示的に書いてください。
4週4日の変形をとっている場合、確認はどう変わりますか
週単位の判定では検出できなくなります。労働基準法第35条第2項は、4週間を通じ4日以上の休日を与える使用者については毎週1回の規定を適用しないとしています。自社がどちらの形かを就業規則で確認し、4週4日なら4週間を単位とした判定に書き換えてください。
公平さの数字を全員に公開すべきですか
全員ぶんを公開する必要はありません。自分の数字と全体の平均が分かれば、多くの不満は解消します。全員の数字を並べると、比較が目的化して別の摩擦を生みます。開示するのは、本人の数字と平均の2つで十分です。
締切後の希望変更はどう扱えばよいですか
禁止すると、直前になって「行けません」という連絡に変わるだけです。締切後の変更は本人が交代相手を見つける、という運用にしてください。そのうえで、変更の件数を記録します。件数が多いなら、締切の設定が現場の生活のリズムと合っていない可能性があります。
同じ部門の記事
現場製造現場の紙の記録を電子化する|日報・点検・不良の3つから始め、入力は選択式と写真で30秒に収める2026年9月25日