- デモ:https://rehab-datascience.github.io/HTML-Tools-Public/shiftcrafter-monthly-2shift-holiday/index.html?utm_source=qiita&utm_medium=article&utm_campaign=shiftcrafter_part07_202601&utm_content=demo
- リポジトリ:https://github.com/rehab-datascience/HTML-Tools-Public/tree/main/shiftcrafter-monthly-2shift-holiday/?utm_source=qiita&utm_medium=article&utm_campaign=shiftcrafter_part07_202601&utm_content=repo
- README(日本語):https://github.com/rehab-datascience/HTML-Tools-Public/tree/main/shiftcrafter-monthly-2shift-holiday/README.md?utm_source=qiita&utm_medium=article&utm_campaign=shiftcrafter_part07_202601&utm_content=readme_ja
- README(English):https://github.com/rehab-datascience/HTML-Tools-Public/tree/main/shiftcrafter-monthly-2shift-holiday/README_en.md?utm_source=qiita&utm_medium=article&utm_campaign=shiftcrafter_part07_202601&utm_content=readme_en
3行まとめ
- **休日数(=土日+入力した祝日数)**を、職員ごとに自動でそろえる月次2交代シフト作成ツール
- さらに 「土日を含む2連休」を月2回以上になるように寄せる(固定希望が最優先)
- 出力は マトリクスCSV / ICS / 検証レポート。ブラウザ内完結で配布とチェックが速い
⸻
これは何?(Part 7の狙い)
月次の勤務表で地味につらいのが「公休数の帳尻合わせ」と「週末の連休」です。
ShiftCrafter Part 7 は、この2つを “数として” そろえたうえで、日勤/夜勤(+必要なら早出/遅出)を埋める ヒューリスティック自動割当です。
- 休日数固定(公休数):土日の数+入力した祝日数
- 土日を含む2連休:月2回以上を目標(固定希望がある日はそちらが優先)
- CSVはマトリクス形式:人×日で一目で確認・共有
⸻
対象(できること)
- 月次 / 2交代(日勤・夜勤)+必要なら 早出・遅出
- 職員の クラス(A=リーダー/B=一般) を扱い、日勤/夜勤にAを最低人数入れる
- 夜勤上限(週/月、さらに 時短Sの月上限 を別枠で設定)
- 希望・制約(休、日、夜、×夜)を反映
- 夜勤翌日は自動的に「明け」(イベント/休日数の扱いは後述)
⸻
使い方(最短3ステップ)
- デモを開く(PCブラウザ推奨)
- 左パネルに入力
- 対象月、必要人数(平日/土日祝、夜勤、必要なら早出/遅出)
- クラスAの最低人数、夜勤上限(週/月)
- 祝日設定、職員リスト、希望・制約
- **[シフト自動作成] → [Matrix CSV][ICS][検証レポート]**で確認・配布
⸻
入力項目のポイント
1) 必要人数(平日 / 土日祝)
- 日勤必要数(平日)
- 日勤必要数(土日祝)
- 夜勤必要数(全体)
-
早出・遅出 必要数(任意)
※ 早出・遅出を使わないなら 0 のままでOK
2) クラスAの最低人数
- 日勤A最低(平日)
- 日勤A最低(土日祝)
- 夜勤A最低
「その日のリーダー枠」を雑に固定せず、最低ラインだけ保証して残りは平準化します。
3) 夜勤上限(週 / 月)
- 週の夜勤上限
- 月の夜勤上限(通常)
-
月の夜勤上限(時短S)
※ 「時短Sを夜勤に入れない」なら、ここを 0 にすると運用に近づきます(×夜指定が多い現場でも扱いやすい)
4) 祝日設定(重要)
ここは2パターンで使えます。
-
(A) 日数だけ入力:例
2- 休日数(公休数)だけに加算されます(“祝日を休日扱いする日付” は増えない)
-
(B) 日付を列挙:例 11, 23
-
その日付は 土日祝扱いになり、日勤必要数も「土日祝」の設定が適用されます
-
(C) “日だけ” もOK:例
11(対象月の11日として解釈)
コツ:
「祝日は人員を減らす」なら 日付列挙(B)。
「公休数だけ合わせたい」なら 日数(A)。
5) 職員リスト(名前:クラス:S)
1行1名で、次のように書きます。
-
田中:A(クラスA) -
鈴木:B(クラスB) -
佐藤:B:S(クラスB+時短S)
A=リーダー, B=一般, :S=時短 のイメージです。
6) 希望・制約(休/日/夜/×夜)
1行1件。以下のどちらの並びでもOKです。
2026-02-03 田中 休田中:2026-02-03:休
種類の例:
-
休(省略時も休扱い) 日夜-
×夜(NoNight:その日は夜勤に入れない)
⸻
ルールと優先順位(Part 7の肝)
ツール内の優先順位は次の通りです。
固定希望 > 土日連休確保 > 休日数調整 > 夜勤割当 > 平準化
- 固定希望(休/日/夜/×夜)が最優先
- 土日を含む2連休は「2日以上の連休ブロックの中に土曜か日曜が含まれる」ものを 月2回以上に寄せます
- ※「明け(明)」は休日にカウントされない前提なので、連休にしたい場合は 休を明示するのが安全です
- **休日数(公休数)**は、月末に向けて不足が出ないように自動調整(足りない人は勤務に寄りやすく、超過している人は休みに寄りやすい)
- 連勤制限(目安):同じ職員の連勤が続きすぎないように抑制(ただし月末の帳尻で上書きされる場合があります)
- 最後に 総割当・夜勤回数・直近の密度などを見て平準化
⸻
出力(マトリクスで “見える” のが正義)
1) 画面プレビュー(表)
- 記号:空白=日勤等 / 夜=夜勤 / 明=明け / 休=休み / 早=早出 / 遅=遅出
- [](角括弧):希望が満たされた勤務(×夜は対象外)
- 日ごとの必要数に対して
- 赤系:割当が多め(サープラス)
- 青系:割当が不足(デフィシット)
2) Matrix CSV(shift_transposed.csv)
人×日(+集計列)で落ちるので、Excel/スプレッドシート共有が楽です。
列イメージ:
Name, Class, 1(日), 2(月), ... , 出勤, 日勤, 夜勤, 休日
3) ICS(shift.ics)
- **終日イベント(All-day)**として出力
- 休・明けはイベント化しない(=カレンダーを“勤務予定だけ”で埋める思想)
4) 検証レポート(画面内)
ダウンロードではなく、画面の pre にテキストで表示されます。
- 休日数(公休数)チェック(不足/多め/OK)
- 土日を含む2連休(月2回以上)チェック
- 希望チェック(ミスマッチ一覧)
⸻
ありがちな運用メモ
- 「明けを休みにカウントしたい」運用の場合は、このツールの 公休数の定義とズレます
→ まずは 検証レポートの公休数を基準に、ルール差分を明確にするのが安全です - 祝日を「土日祝の必要人数」で扱いたいなら、祝日を日付列挙してください(日数だけだと“公休数”にしか効きません)
- ×夜(NoNight)が多い月は、夜勤必要数に対して人が足りないことがあります
→ 表(青)と検証レポートで早めに気づけます
⸻
よくある質問(FAQ)
Q. 「土日連休2回」って、祝日も含みますか?
A. “土曜か日曜を含む2連休ブロック” です(祝日単体は週末連休条件には入りません)。
Q. 希望が[]で囲まれる条件は?
A. 休/日/夜 が一致したときに [] 表示になります(×夜 は一致表示の対象外)。
Q. 出力ファイル名は?
A. shift_transposed.csv と shift.ics です(日本語UI/English UIとも同名)。
⸻
免責・プライバシー
- 本ツールは教育・業務補助目的の クライアントサイドWebアプリです
- 入力データは ブラウザ内のみで処理され、外部送信しません
- 実運用は所属施設の規程・労務基準・個人情報保護方針に従ってください
- ライセンス:MIT(リポジトリ側の表記に合わせてください)
⸻
English Summary(150–250 words)
ShiftCrafter Part 7 is a browser-only monthly scheduling tool designed to reduce two recurring pains in rota creation: holiday quota balancing and weekend consecutive breaks. It targets a 2-shift operation (Day/Night) and can optionally allocate Early/Late shifts, while also enforcing minimum leader coverage via staff classes (A = leader, B = regular).
The key concept is a per-staff holiday quota, defined as (number of Saturdays + number of Sundays + entered public-holiday count). The generator automatically nudges assignments so each staff member’s Off days match the quota. In addition, it aims to secure at least two “weekend-including consecutive breaks” per month—i.e., blocks of 2+ consecutive days off that include a Saturday or Sunday—while respecting fixed requests first.
Outputs focus on operational clarity: a matrix-style CSV (shift_transposed.csv) for quick sharing and auditing, an ICS calendar file (shift.ics) exported as all-day events for work shifts only (Off/Post are omitted), and a built-in validation report that flags quota gaps, weekend-break counts, and request mismatches. All processing stays on the client; no data leaves your device.
⸻
リンク
- デモ:https://rehab-datascience.github.io/HTML-Tools-Public/shiftcrafter-monthly-2shift-holiday/index.html?utm_source=qiita&utm_medium=article&utm_campaign=shiftcrafter_part07_202601&utm_content=demo
- リポジトリ:https://github.com/rehab-datascience/HTML-Tools-Public/tree/main/shiftcrafter-monthly-2shift-holiday/?utm_source=qiita&utm_medium=article&utm_campaign=shiftcrafter_part07_202601&utm_content=repo
