Django ベースの従業員シフト管理システム。月間シフト表の表示・編集、労働法規チェック、自動シフト作成を備えています。
- 📅 月間シフト表の表示
- 👥 従業員管理(役割システム対応)
- 🏢 シフト種別管理(出勤、休み、早番、遅番など)
- 🎨 シフト種別の色分け表示
- 📊 労働法規制チェック(連続勤務日数、最低労働者数)
- 🏖️ 会社休日管理(一括登録機能付き)
- 🤖 自動シフト作成機能(役割別最低人数対応)
- 🔧 Django管理画面での完全な管理機能
- 👤 役割システム(ホール、キッチンなど)
- 📈 シフト種別別の最低・最大人数設定
- 🎯 役割別最低人数設定
- Backend: Django 4.2+
- Database: PostgreSQL
- Frontend: HTML, CSS, JavaScript, Bootstrap
- Testing: pytest, Selenium (E2E)
- CI/CD: CircleCI
- Container: Docker
- Python 3.11+
- Docker & Docker Compose
- PostgreSQL
- リポジトリをクローン
git clone <repository-url>
cd shift-table- 依存関係をインストール
make install
# または
pip install -r requirements.txt
pip install -r requirements-dev.txt- 環境変数を設定
export DJANGO_DB_NAME=shift_db
export DJANGO_DB_USER=shift_user
export DJANGO_DB_PASSWORD=shift_pass
export DJANGO_DB_HOST=localhost- データベースをセットアップ
make migrate- スーパーユーザーを作成
make superuser- 開発サーバーを起動
make runserver- Dockerコンテナを起動
make docker-run- マイグレーションを実行
docker-compose exec web python manage.py migrate- スーパーユーザーを作成
docker-compose exec web python manage.py createsuperuser# 全テストを実行
make test
# カバレッジ付きテスト
make test-coverage
# E2Eテスト
make test-e2e
# 全チェック(lint、test、security)
make allテストカバレッジは100%を目標としています。
# カバレッジレポートを生成
pytest --cov=shift --cov=shift_table --cov-report=htmlCircleCIを使用して以下のワークフローを実行しています:
- Lint: コードの品質チェック
- Test: ユニットテストとカバレッジ
- Security: セキュリティチェック
- E2E: エンドツーエンドテスト
- Build: Dockerイメージのビルド
- ブラウザで
http://localhost:8000/shift/にアクセス - 年月を選択してシフト表を表示
- セルをクリックしてシフトを編集
http://localhost:8000/admin/にアクセス- スーパーユーザーでログイン
- 各モデルを管理
- 役割の作成: 管理画面で「役割」から新しい役割を作成(例:ホール、キッチン)
- 従業員に役割を割り当て: 従業員編集画面で役割を選択
- シフト種別に役割別最低人数を設定: シフト種別編集画面で「役割別最低人数」を設定
- 管理画面で「会社休日」→「一括追加」をクリック
- 休日タイプを選択(週次、月次、範囲、単発)
- 必要項目を入力して登録
- 管理画面で「シフト」→「自動シフト作成」をクリック
- 年月と作成モードを選択
- 実行してシフトを自動生成
作成モード:
- fill_gaps: 既存のシフトを保持し、空きを埋める
- overwrite: 既存のシフトを削除して新規作成
自動シフト作成の特徴:
- 役割別最低人数を考慮
- 連続勤務日数制限を遵守
- 労働者数の均等配分
- 既存の休日設定を尊重
パスワードを忘れた場合のリセット手順:
- 管理画面のログインページ(
http://localhost:8000/admin/)で「パスワードを忘れた場合」をクリック - 登録されているメールアドレスを入力
- パスワードリセット用のリンクがメールで送信されます
- メール内のリンクをクリックして新しいパスワードを設定
注意: 開発環境では、メールはコンソールに出力されます。本番環境では適切なSMTP設定が必要です。
メール送信が不要な、より簡単なパスワード変更方法:
- 管理画面のログインページ(
http://localhost:8000/admin/)で「直接パスワード変更」をクリック - ユーザー名と新しいパスワードを入力
- パスワードを確認入力
- 送信ボタンをクリックしてパスワードを変更
特徴:
- メール送信が不要
- 管理者権限を持つユーザーも変更可能
- パスワードは8文字以上が必要
- ユーザー名の存在確認あり
セキュリティ:
- CSRF保護が有効
- パスワード強度チェック
- 存在しないユーザー名のエラー処理
shift-table/
├── shift/ # メインアプリケーション
│ ├── models.py # データモデル
│ ├── views.py # ビュー
│ ├── admin.py # 管理画面設定
│ ├── forms.py # フォーム
│ ├── test_files/ # テスト
│ │ ├── test_models.py # モデルテスト
│ │ ├── test_views.py # ビューテスト
│ │ ├── test_admin.py # 管理画面テスト
│ │ ├── test_forms.py # フォームテスト
│ │ └── test_e2e.py # E2Eテスト
│ └── templates/ # テンプレート
├── shift_table/ # プロジェクト設定
├── requirements.txt # 本番依存関係
├── requirements-dev.txt # 開発依存関係
├── docker-compose.yml # Docker設定
├── Dockerfile # Dockerイメージ
├── pytest.ini # pytest設定
├── Makefile # 開発コマンド
└── .circleci/ # CI/CD設定
- 役割名(例:ホール、キッチン)
- 説明
- 名前
- 役割(複数選択可能)
- 名前
- 勤務日フラグ
- 色
- 最低人数
- 最大人数(オプション)
- シフト種別
- 役割
- 最低人数
- 従業員
- 日付
- シフト種別
- 日付
- 名前
- 説明
- 最大連続勤務日数
- 最低労働者数
システムは以下の労働法規制を自動チェックします:
- 設定された最大連続勤務日数を超える場合に警告
- 休日は連続勤務日数に含まれない
- 1日の最低労働者数が不足する場合に警告
- 会社休日はチェック対象外
- シフト種別の最低・最大人数制限をチェック
- 役割別最低人数制限をチェック
- Black を使用したコードフォーマット
- Flake8 を使用したリンティング
- 最大行長: 120文字
- 新機能には必ずテストを追加
- カバレッジ100%を維持
- ユニットテスト、統合テスト、E2Eテストを適切に使い分け
feat: 新機能の追加
fix: バグ修正
docs: ドキュメント更新
style: コードスタイル修正
refactor: リファクタリング
test: テスト追加・修正
chore: その他の変更
このプロジェクトは Cursor を使用して開発されています。
MIT License