生徒が塾に着いた・塾を出た、というだけの情報でも、保護者にとっては安心材料になります。一方で「専用のシステムを入れるほどでもない」と感じて、自作を検討する塾長さんは少なくありません。
この記事では、入退室管理システム(LINE通知つき)を自作する場合の具体的な手順と、実際にかかるコスト・運用の手間を整理します。結論から言うと、自作できるかどうかよりも、LINEの通知通数が無料枠に収まる規模かどうかが最初の分かれ目になります。
入退室管理システムの自作に必要なもの
自作といっても、ゼロからアプリを作る必要はありません。最低限そろえるのは次の3つです。
- 打刻の入り口:生徒が「来た」「帰る」を記録する手段(カードリーダー、タブレット、QRコードなど)
- 記録の置き場所:打刻データをためるスプレッドシートやデータベース
- 通知の経路:LINE公式アカウントのMessaging APIなど、保護者へメッセージを送る仕組み
このうち、つまずきやすいのは3つ目です。個人のLINEアカウントからは自動送信ができないため、LINE公式アカウントの開設が前提になります。
打刻の入り口をどう作るか
いちばん手軽なのはタブレット1台とGoogleフォームの組み合わせです。生徒が自分の名前を選んで送信するだけなので、初期費用はタブレット代のみで済みます。
ただし、名前の選択ミスや押し忘れは一定の割合で発生します。ICカードやQRコードによる打刻に比べると、あとから記録を直す手間が増える点は見込んでおいてください。
実装の流れ
大まかな流れは次のとおりです。
- LINE Developersでチャネル(Messaging API)を作成し、チャネルアクセストークンを発行する
- Google Apps ScriptでWebhookの受け口を作り、そのURLをLINE側のWebhook URLに登録する
- 保護者に友だち追加してもらい、届いたLINEユーザーIDをスプレッドシートに保存する
- 保存されたユーザーIDと生徒名を手作業で紐づける
- 打刻フォームの送信をトリガーに、スクリプトを実行する
- スクリプトから対象の保護者へメッセージを送信する
記事や動画では1・2・3が省略されていることが多いのですが、ここを飛ばすと通知は送れません。順番に見ていきます。
保護者のLINEユーザーIDをどう集めるか
通知を送るには、保護者ひとりひとりのLINEユーザーIDが必要です。これは U から始まる英数字の文字列で、保護者自身の画面には表示されません。つまり「LINEのIDを教えてください」と聞いて集めることはできません。
取得できるのは、保護者が公式アカウントを友だち追加したときの follow イベントや、メッセージを送ってきたときのイベントに含まれる userId だけです。これを受け取るために、Webhookの受け口が要ります。
function doPost(e) {
const event = JSON.parse(e.postData.contents).events[0];
if (event.type === "follow") {
// 誰の保護者かはこの時点では分からないため、いったん保存しておく
appendUserId(event.source.userId);
}
}
Google Apps Scriptを「ウェブアプリ」としてデプロイし、発行されたURLをLINE Developers側のWebhook URLに設定すれば動きます。
保存されたユーザーIDと生徒名の紐づけは、自作でいちばん手間がかかる部分です。誰が友だち追加したのかはIDだけでは判別できないため、追加直後に名前を送ってもらうなどの運用でカバーし、入塾・退塾のたびに手作業で更新することになります。
通知を送る部分
打刻フォームの送信をトリガーにする部分は、拍子抜けするほど短く書けます。
function onFormSubmit(e) {
const [timestamp, studentName, action] = e.values;
const parentUserId = lookupParentUserId(studentName);
pushLineMessage(
parentUserId,
`${studentName}さんが${action}しました(${timestamp})`,
);
}
function pushLineMessage(userId, text) {
UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", {
method: "post",
contentType: "application/json",
headers: { Authorization: "Bearer " + CHANNEL_ACCESS_TOKEN },
payload: JSON.stringify({ to: userId, messages: [{ type: "text", text }] }),
});
}
ただしこれは骨格だけです。実際には名簿を検索する lookupParentUserId、送信に失敗したときの再送、アクセストークンの安全な保管(スクリプトプロパティ)などが必要になります。「コードが短い=簡単」ではない点は押さえておいてください。
見落としやすいLINEの通知コスト
自作の見積もりで最も抜けやすいのが、LINE公式アカウント自体の料金です。
LINE公式アカウントの無料プラン(コミュニケーションプラン)で送れるのは、月200通までです。入退室通知はAPIからのプッシュ配信にあたるため、この200通にカウントされます。
生徒数と通塾頻度から、月間の通数を計算してみます。
| 生徒数 | 通塾頻度 | 通知 | 月間通数 | 無料枠(200通) |
|---|---|---|---|---|
| 10名 | 週2回 | 入室・退室 | 160通 | 収まる |
| 20名 | 週2回 | 入室・退室 | 320通 | 超える |
| 20名 | 週2回 | 入室のみ | 160通 | 収まる |
| 30名 | 週3回 | 入室・退室 | 720通 | 超える |
無料枠を超えると、次はライトプラン(月5,500円・税込/5,000通まで)になります。生徒20名で入退室の両方を通知するなら、この5,500円が毎月かかる前提で考える必要があります。
なお、この料金は自作でも既製サービスでも同じようにかかります。ここで差が出るのは、入室のみに絞る、通知をまとめるといった調整が手軽にできるかどうかです。
コストと手間の目安
| 項目 | 自作 | 既製サービス |
|---|---|---|
| 初期費用 | タブレット代のみ(1〜3万円程度) | 0円〜 |
| LINEの通知料 | 無料枠超過でライトプラン月5,500円〜 | 同じ(無料枠内に収める設定を持つサービスもある) |
| サービス利用料 | 0円 | 0円〜(無料プランのあるサービスもある) |
| 構築の手間 | 半日〜数日 | 初期設定のみ |
| 運用の手間 | 生徒追加・不具合対応は自分で | サポートあり |
無料枠に収まる規模なら、自作のほうが確実に安く済みます。一方で無料枠を超えると、費用の大半をLINE側の月額が占めるようになり、自作と既製サービスの金額差は小さくなります。分かれ目になるのは、構築後の運用を誰が持つかという点です。
(参考:Miiioのフリープランは入退室管理と保護者通知を利用料0円で使えます。LINEを使っていない塾向けにメール通知にも対応しています)
自作と既製サービス、どちらを選ぶか
次のような塾であれば、自作は現実的な選択肢です。
- 生徒数10名程度まで、または入室のみの通知で、LINEの無料枠に収まる
- 名簿の変動が少ない(ユーザーIDの紐づけ作業が年に数回で済む)
- Google Apps Scriptを触った経験がある
- 通知が止まったときに自分で原因を追える
反対に、次に当てはまるなら既製のサービスのほうが結果的に手離れが良くなります。
- 生徒数が20名を超え、LINEの月額が発生する規模になっている
- 年度替わりなど、名簿がまとまって入れ替わる
- 入退室以外(請求・授業報告書など)もあわせて整えたい
まとめ
入退室のLINE通知は、タブレット1台とGoogle Apps Scriptがあれば自作できます。ただし手順で本当に重いのはコードではなく、保護者のLINEユーザーIDを集めて名簿と紐づけ続ける作業です。
そして費用面では、生徒20名・週2回の通塾で入退室の両方を通知すると、LINE公式アカウントの無料枠(月200通)を超えます。自作か既製サービスかにかかわらず、月5,500円が発生する前提で見積もっておくと計算が狂いません。
まずは小さく自作してみて、名簿の管理か通知コストのどちらかが想定を超えたタイミングで既製サービスを検討する、という進め方が無理がありません。