シフト通知システム
教室で使われているExcelシフト表をLINE経由で取り込み、講師の勤務開始前に自動でリマインドを送るためのシステムです。
Overview
アルバイト先では、講師のシフト管理をExcelで行なっています。しかし、各自のスケジュール管理に委ねられる部分が大きく、シフト表をうっかり見落としたときの不安が残っているようでした。
ShiftNotifierは、その既存のExcel運用を大きく変えずに、LINEでシフト表を送るだけで取り込み・DB同期・通知まで行えるようにしたシステムです。
勤務開始2時間前の講師へLINE通知を送ることで、シフト忘れを事前に防ぐことができます!
System Flow
Excelシフト表の送信
管理者がLINE Botのトークルームにシフト表(Excelファイル)を送信します。
データ同期
Webhookサーバーが内容を解析し、データベース(SQLite)へシフト情報を登録・更新します。
自動通知(リマインド)
通知ループが一定間隔で対象を検索し、勤務開始時間前になったシフトについて、講師へLINEで通知を送信します。
Key Features
1. LINE経由でのExcelシフト取り込み
LINE BotにExcelファイル(.xlsx / .xls)を送信すると、Webhookで受信し、LINEのMessage Content APIからファイルを取得します。保存後にExcelを解析し、取り込み結果をLINE上で返信するため、普段使っている連絡手段のまま運用できます。
2. 現場のExcelレイアウトに合わせた解析
対象シート、日付列、講師ごとの列ブロックを設定し、実際のシフト表レイアウトから講師名・勤務開始時刻・終了時刻・教室名を抽出します。Excelシリアル値、日付文字列、全角数字、時刻表記の揺れにも対応しています。
3. 勤務開始前の自動リマインド
通知ループが一定間隔でDBを確認し、勤務開始前の対象シフトを抽出してLINE Push通知を送信します。通知タイミングはデフォルト2時間前で、環境変数から30分前などに変更できるようにしています。
4. LINE User ID取得の補助
LINE上で「id」などのテキストを送ると、自分のLINE User IDを返信する機能を用意しています。講師名とLINE User IDの紐付けを環境変数で管理するため、初期運用に必要な登録作業を簡単にしています。
Architecture
アプリケーションはGo製の単一CLIとして構成し、runコマンドでLINE
Webhookサーバーと通知ループを同時に起動します。Webhook側は/webhook/lineでLINEイベントを受け取り、署名検証後にExcelファイルを保存・解析・DB同期します。
通知側はSQLiteに保存されたシフトを定期的に検索し、現在時刻から通知対象期間内に入ったシフトを抽出します。通知計画を作成して履歴を保存したうえでLINE Messaging APIへ送信し、送信結果をsent / failedとして記録します。
設計のポイント: 既存のExcel運用を置き換えるのではなく、LINEと小さなGoアプリを差し込むことで、大きな変更なく通知システムだけ導入することにしました。
Tech Stack
Application & Data
- Go 1.25
- SQLite
- GORM
Integration
- LINE Messaging API
- LINE Webhook
- LINE Content API
- excelize v2
Implementation Notes
Excel再取り込み時の重複防止
シフトには、シート名・行番号・講師ブロックから作るSourceKeyと、講師名・開始時刻・終了時刻・教室名から作るContentHashを持たせています。これにより、同じExcelを再取り込みしても重複作成せず、内容変更は更新として扱えます。
Webhookの安全性
LINEからのWebhookはX-Line-SignatureをHMAC-SHA256で検証し、不正なリクエストを拒否します。受信ファイル名は保存前にサニタイズし、一時ファイルへ書き込んでから最終パスへ移動することで、ファイル保存処理も安全寄りにしています。