プロジェクト成果
手作業の組み合わせ検討を自動マッチングによるたたき台生成に置き換え
編成工数の削減
増分マッチングにより判明のたびに一から組み直す必要がなくなった
段階的な試験日程判明への対応
部屋定員超過・講師重複などの制約違反をシステムが警告
調整ミスの抑制
概要
学習塾における定期試験対策授業の「変則時間割」作成を支援するWebアプリを構築した。生徒の通う中学校ごとに異なる試験日程・時間割・部屋割り・講師割り当てを、試験日入力→自動マッチング→手動調整→学校別配布物出力まで一気通貫でシステム化した。
完全自動化ではなく、質の高いたたき台をシステムが作り、最終調整は人が行う設計とした。教室運営の裁量を残しつつ、時間割編成にかかる工数を削減することを目的とした。
技術構成
- フロントエンド: Next.js 16 / React 19 / TypeScript / Tailwind CSS / shadcn/ui
- バックエンド: Neon(PostgreSQL)+ Drizzle ORM
- 認証: Neon Auth(Managed Better Auth)による管理者ログイン。招待制・サインアップ無効の三層防御構成
- インフラ: Firebase App Hosting
- 開発方式: ウォーターフォール。要件定義書・データマスタ定義書・基本設計書を正本として開発を進行
実装内容
- マスタ管理: 教室・部屋・中学校・試験日程・講師・可能時間帯・分割グループ・段階配布など、時間割編成に必要な全マスタを構築
- 自動マッチングエンジン: ハード制約フィルタ・スコアリング貪欲割付・局所探索を組み合わせた割付ロジックを実装。部屋定員・講師の指導可否・可能時間帯・館割り当ての優先度など複数の制約を同時に満たす時間割を自動生成
- 段階配布・増分マッチング: 試験日程が学校ごとに順次判明する運用に合わせ、既存の編成・累積を引き継いだ増分マッチングと、指定日以前を固定する「固定境界日」機能を実装
- 手動調整UI: 部屋×時間×日のグリッド上でコマ移動・追加・削除・講師差替・一斉/分割切替を行える編成シートを実装。制約違反・警告をリアルタイム表示
- 学校別配布物出力: 編成結果から学校別のWord配布物を自動生成。実配布物とのフォーマットパリティを検証済み
背景
定期試験前の対策授業は、生徒が通う中学校ごとに試験日程・科目・時間数が異なり、部屋・講師・時間帯の制約を手作業で組み合わせて時間割を作成していた。学校数・講師数・部屋数が増えるほど組み合わせが複雑になり、担当者の経験と勘に依存した属人的な作業になっていた。
試験日程は学校ごとに段階的に判明するため、判明のたびに時間割を作り直す必要があり、手作業では調整の都度、他の予定への影響を確認する負荷が大きかった。
導入効果
- 変則時間割の作成を、手作業による組み合わせ検討から自動マッチングによるたたき台生成に置き換え、編成work工数を削減
- 試験日程が段階的に判明する運用に対応した増分マッチングにより、判明のたびに一から組み直す必要がなくなった
- 部屋定員超過・講師の重複割当といった制約違反をシステムが警告し、確認漏れによる調整ミスを抑制
- 学校別のWord配布物を自動生成することで、配布物作成の手作業を削減
開発は要件定義から検品まで一気通貫のウォーターフォール方式で進行し、本番環境での稼働に至った。同様の業務システム構築はWebシステム開発で対応しています。
キーワード
Next.jsTypeScriptNeonDrizzle ORMFirebase App Hosting業務システム開発自動マッチングシステム学習塾DX時間割自動作成