Skip to content

ryu-tada/shift-generator

Repository files navigation

シフト自動作成くん

介護施設(デイサービス・訪問介護)向けの 1か月分シフト自動作成 Webアプリケーション。

Google OR-Tools の CP-SAT ソルバーで制約充足最適化を行い、 人手では数時間かかるシフト作成を 約1分 で完了します。

特徴

  • 制約充足最適化: 連勤制限・休み希望・最低配置人数・資格配置ルールなどを自動で満たすシフトを生成
  • 2部門対応: 介護(デイサービス + 訪問介護)と調理の独立ソルバーで部門別に最適化
  • 兼務パターン: デイサービスと訪問介護の兼務シフトを自動配置
  • 相談員ローテーション: 2時間交代の相談員配置を自動割り当て
  • 電話当番ローテーション: 社員のみ・連続禁止などのルールに準拠
  • Excel/CSV出力: 印刷対応済みのシフト表を1クリックでダウンロード
  • 祝日自動判定: 日本の祝日を自動検出し、祝日NG職員を自動休みに
  • ブラウザUI: インストール不要、ローカルで動くWebアプリ

クイックスタート

前提条件

  • Python 3.9 以上

macOS / Linux

git clone https://github.com/yourusername/shift-generator.git
cd shift-generator
./setup.sh
./run.sh
# → http://localhost:5050

Windows

1. ZIPをダウンロードして展開
2. setup_windows.bat をダブルクリック(初回のみ)
3. start_windows.bat をダブルクリック
4. ブラウザで http://localhost:5050 を開く

サンプルデータの投入(任意)

動作確認用の架空職員データを投入できます。

# macOS / Linux
source venv/bin/activate
python seed_sample.py

# Windows
venv\Scripts\activate
python seed_sample.py

基本的な使い方

  1. 職員登録 -- 名前・雇用形態・資格・兼務可否などを登録
  2. 休み希望登録 -- カレンダーで日付をクリック
  3. 条件設定 -- 最低配置人数・営業曜日などを設定
  4. シフト生成 -- ボタン1つで自動作成(約1分)
  5. ダウンロード -- Excel / CSV で出力

詳細は docs/操作マニュアル.md を参照してください。

アーキテクチャ

┌─────────────┐    ┌─────────────┐    ┌──────────────┐
│  Browser UI │◄──►│  Flask API  │◄──►│  SQLite DB   │
│  (Jinja2)   │    │  (app.py)   │    │  (shift.db)  │
└─────────────┘    └──────┬──────┘    └──────────────┘
                          │
                   ┌──────▼──────┐
                   │  CP-SAT     │
                   │  Solver     │
                   │  (solver.py)│
                   └─────────────┘

ソルバー設計(solver.py)

二段構成で介護と調理を独立に解決:

  1. 介護ソルバー _solve_care() -- デイ・訪問・兼務の配置を決定
  2. 調理ソルバー _solve_cooking() -- 早番・日勤・遅番・通しの配置を決定
  3. マージ generate_shift() -- 両者の結果を統合

ソルバー解決後のポストプロセスで休憩時間と相談員ローテーションを割り当て。

主要な制約

カテゴリ 制約 種類
人数 デイ最低/最大人数(9時・15時) ハード
人数 訪問最低人数(AM/PM) ハード
労務 連勤上限・週勤務日数上限/下限 ハード
労務 休み希望・祝日NG ハード
配置 看護師/PTはデイ4名から除外 ハード
配置 電話当番(社員のみ、連続禁止) ハード
調理 組み合わせルール(①②③ or ③④) ハード
均等化 出勤日数・休憩・相談ローテーション ソフト

技術スタック

レイヤー 技術
バックエンド Python 3.9+ / Flask 3.1
最適化エンジン Google OR-Tools CP-SAT
データベース SQLite + Flask-SQLAlchemy
フロントエンド Jinja2 + Vanilla JavaScript + Tailwind CSS (CDN)
Excel出力 openpyxl
祝日判定 jpholiday

ファイル構成

ファイル 行数 責務
app.py 1223 Flask ルーティング、CRUD API、シフト生成の起動
solver.py 1760 CP-SAT ソルバー本体(介護/調理を独立解決→マージ)
export.py 625 Excel (.xlsx) / CSV エクスポート
models.py 409 SQLAlchemy モデル定義(11テーブル)
config.py 28 Flask / SQLAlchemy 設定
seed_sample.py サンプル職員データ投入

ライセンス

MIT License

About

介護施設向け1か月分シフト自動作成Webアプリ(OR-Tools CP-SAT + Flask)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors