267 lines
11 KiB
Markdown
267 lines
11 KiB
Markdown
# 朝活遅刻罰金Bot
|
||
|
||
朝活グループの遅刻を記録し、罰金を自動集計する LINE Bot です。
|
||
|
||
LINEグループに Bot を追加して「遅刻」と投稿するだけで、誰が何回遅刻したか、今月いくら払うべきかが自動で管理されます。毎月1日に前月の集計レポートが届き、メンバー同士で精算する運用です。
|
||
|
||
## 仕組み(3パーツ)
|
||
|
||
| パーツ | 料理の比喩 | このツールでは |
|
||
|---|---|---|
|
||
| トリガー | 伝票 | LINE Webhook(コマンド投稿時)+ GAS 時間トリガー(毎月1日) |
|
||
| ソース元 | 冷蔵庫 | Google スプレッドシート(遅刻記録ログ) |
|
||
| 処理する場所 | キッチン | Google Apps Script(コマンド解析・集計・レポート生成) |
|
||
|
||
## 全体の構成
|
||
|
||
```
|
||
LINE グループ
|
||
↓ Webhook(コマンド投稿)
|
||
Google Apps Script(doPost で直接受信)
|
||
↓ コマンド解析 → スプレッドシート読み書き
|
||
↓ LINE API で返信
|
||
LINE グループ
|
||
```
|
||
|
||
LINE のメッセージを GAS が直接受け取り、処理結果を LINE API で返信します。プロキシサーバーは不要です。
|
||
|
||
## コマンド一覧
|
||
|
||
| コマンド | 動作 |
|
||
|---|---|
|
||
| `遅刻` | 自分の遅刻を記録 |
|
||
| `遅刻 @名前` | 他の人の遅刻を代理で記録 |
|
||
| `追加 ○回` | 自分の過去の遅刻をまとめて追加(例: `追加 3回`) |
|
||
| `追加 @名前 ○回` | 他の人の過去分を代理で追加 |
|
||
| `集計` | 今月の遅刻回数と罰金額を表示 |
|
||
| `履歴` | 直近10件の記録を表示 |
|
||
| `取消` | 自分の遅刻を1件取り消し |
|
||
| `取消 @名前` | 他の人の遅刻を代理で取り消し |
|
||
| `ヘルプ` | コマンド一覧を表示 |
|
||
|
||
遅刻1回 = 500円。毎月1日に前月の集計が自動で届きます。
|
||
|
||
## 出力例
|
||
|
||
`遅刻` と投稿すると:
|
||
```
|
||
⏰ 田中 遅刻3回目(1,500円)
|
||
```
|
||
|
||
他の人の分を代理記録すると:
|
||
```
|
||
⏰ 田中 遅刻3回目(1,500円)※鈴木が記録
|
||
```
|
||
|
||
`集計` と投稿すると:
|
||
```
|
||
📊 2026年4月の遅刻集計
|
||
━━━━━━━━━━━━━━━
|
||
山田: 5回(2,500円)
|
||
田中: 3回(1,500円)
|
||
鈴木: 1回(500円)
|
||
━━━━━━━━━━━━━━━
|
||
合計: 9回(4,500円)
|
||
遅刻なし: 佐藤
|
||
```
|
||
|
||
`履歴` と投稿すると:
|
||
```
|
||
📋 直近の記録
|
||
━━━━━━━━━━━━━━━
|
||
4/2 13:08 遅刻 田中
|
||
4/2 09:15 遅刻 山田 ※鈴木が記録
|
||
4/1 08:30 追加 山田 ×2回
|
||
3/31 19:00 取消 田中
|
||
```
|
||
|
||
---
|
||
|
||
## セットアップ手順
|
||
|
||
### 準備するもの
|
||
|
||
- Google アカウント
|
||
- LINE アカウント(スマートフォン)
|
||
|
||
---
|
||
|
||
### Part A: LINE の準備
|
||
|
||
#### 手順1: LINE 公式アカウントを作る
|
||
|
||
1. [LINE Official Account Manager](https://manager.line.biz/) にアクセス
|
||
2. 「アカウントを作成」→ 認証済みアカウントではなく「未認証アカウント」で作成
|
||
3. アカウント名は「朝活Bot」など自由に設定
|
||
|
||
#### 手順2: Messaging API を有効にする
|
||
|
||
1. LINE Official Account Manager の「設定」→「Messaging API」を開く
|
||
2. 「Messaging API を利用する」をクリック
|
||
3. プロバイダーを選択(なければ新規作成)
|
||
4. [LINE Developers Console](https://developers.line.biz/console/) が開く
|
||
|
||
#### 手順3: チャネルアクセストークンを取得
|
||
|
||
LINE Official Account Manager の Messaging API 画面には「Channel ID」と「Channel secret」が表示されますが、**このBotに必要なのはどちらでもありません**。必要なのは「チャネルアクセストークン(長期)」で、LINE Developers Console で発行します。
|
||
|
||
1. [LINE Developers Console](https://developers.line.biz/console/) を開く
|
||
2. プロバイダー → 手順2で作成したチャネルを選択
|
||
3. **「Messaging API設定」タブ**を開く
|
||
4. ページ下部の「チャネルアクセストークン(長期)」→ **「発行」をクリック**
|
||
5. 表示されたトークンをコピーしてメモしておく
|
||
|
||
**このトークンは他の人に見せないでください。** 後で GAS に設定します。
|
||
|
||
---
|
||
|
||
### Part B: GAS の構築
|
||
|
||
#### 手順4: Google スプレッドシートを作る
|
||
|
||
1. [Google スプレッドシート](https://sheets.google.com/) で新しいスプレッドシートを作成
|
||
2. 名前は「朝活Bot」など自由に設定
|
||
3. シートは空のままで OK(Bot が初回実行時に自動作成します)
|
||
|
||
#### 手順5: Google Apps Script にコードを貼り付ける
|
||
|
||
1. スプレッドシートの「拡張機能」→「Apps Script」を開く
|
||
2. 左側のファイル一覧で、最初からある `コード.gs` を削除する
|
||
3. 以下の6ファイルを1つずつ追加する:
|
||
|
||
**ファイルの追加方法**: 左側の「+」→「スクリプト」をクリック → ファイル名を入力(拡張子 `.gs` は不要)
|
||
|
||
| ファイル名 | このリポジトリのパス |
|
||
|---|---|
|
||
| `config` | `src/config.gs` |
|
||
| `line` | `src/line.gs` |
|
||
| `store` | `src/store.gs` |
|
||
| `commands` | `src/commands.gs` |
|
||
| `penalty` | `src/penalty.gs` |
|
||
| `main` | `src/main.gs` |
|
||
|
||
各ファイルの中身をコピー&ペーストしてください。
|
||
|
||
4. `appsscript.json` を編集する:
|
||
- 左上の歯車アイコン(プロジェクトの設定)をクリック
|
||
- 「『appsscript.json』マニフェスト ファイルをエディタで表示する」にチェック
|
||
- 左側に表示された `appsscript.json` を開き、このリポジトリの `appsscript.json` の内容で上書き
|
||
|
||
#### 手順6: 初期設定(トークンの登録)
|
||
|
||
1. Apps Script エディタでスプレッドシートに戻る
|
||
2. スプレッドシートを**リロード**する
|
||
3. メニューに「朝活Bot」が表示される(初回は数秒かかる場合があります)
|
||
4. 「朝活Bot」→「初期設定」をクリック
|
||
5. 手順3でメモした**チャネルアクセストークン(長期)**を入力 → OK
|
||
|
||
初回実行時に Google から「承認が必要です」と表示されます。「権限を確認」→ 自分の Google アカウントを選択 → 「詳細」→「(安全でないページに移動)」→「許可」の順に進めてください。
|
||
|
||
#### 手順7: Web App としてデプロイ
|
||
|
||
1. Apps Script エディタに戻る
|
||
2. 右上の「デプロイ」→「新しいデプロイ」
|
||
3. 種類の選択で歯車アイコン → 「ウェブアプリ」を選択
|
||
4. 設定:
|
||
- **説明**: 「朝活Bot」
|
||
- **次のユーザーとして実行**: 「自分」
|
||
- **アクセスできるユーザー**: 「全員」
|
||
5. 「デプロイ」をクリック
|
||
6. 表示された **ウェブアプリの URL** をコピー(`https://script.google.com/macros/s/.../exec` の形式)
|
||
|
||
---
|
||
|
||
### Part C: LINE と接続
|
||
|
||
#### 手順8: Webhook URL を設定
|
||
|
||
1. [LINE Developers Console](https://developers.line.biz/console/) でチャネルを開く
|
||
2. 「Messaging API設定」タブ → 「Webhook URL」に **手順7の GAS デプロイ URL** を貼り付け
|
||
3. 「Webhookの利用」をオンにする
|
||
|
||
> **Webhook URL の検証について**: 「検証」ボタンを押すとエラーが表示される場合がありますが、実際のメッセージ送受信には影響しません。手順9に進んで実際にメッセージを送って動作確認してください。
|
||
|
||
4. [LINE Official Account Manager](https://manager.line.biz/) の「設定」→「応答設定」を開く
|
||
5. **応答メッセージ**: オフ(LINE のデフォルト自動応答を無効にする)
|
||
|
||
#### 手順9: Bot のグループ参加を許可する
|
||
|
||
Bot をグループに招待するには、事前に LINE Developers Console で参加許可の設定が必要です。この設定はデフォルトで無効になっています。
|
||
|
||
1. [LINE Developers Console](https://developers.line.biz/console/) でチャネルを開く
|
||
2. 「Messaging API設定」タブを開く
|
||
3. **「グループトーク・複数人トークへの参加を許可する」を有効にする**
|
||
|
||
#### 手順10: Bot をグループに招待
|
||
|
||
1. LINE アプリで朝活グループを開く
|
||
2. メンバー追加から、手順1で作った公式アカウントを友だち追加 → グループに招待
|
||
3. Bot がグループに参加すると、自動でウェルカムメッセージが届く
|
||
4. 「ヘルプ」と送信してコマンド一覧が表示されれば完了
|
||
|
||
#### 手順11: 月次レポートトリガーを設定(任意)
|
||
|
||
毎月1日の朝に自動で前月の集計レポートが届くようにする:
|
||
|
||
1. スプレッドシートのメニュー「朝活Bot」→「月次レポートトリガーを設定」
|
||
2. 「毎月1日 7:00〜8:00 にトリガーを設定しました」と表示されれば OK
|
||
|
||
---
|
||
|
||
## カスタマイズ
|
||
|
||
### 罰金額を変更する
|
||
|
||
`src/config.gs` の `PENALTY_AMOUNT` を変更する:
|
||
|
||
```javascript
|
||
const PENALTY_AMOUNT = 1000; // 1回1,000円に変更
|
||
```
|
||
|
||
変更後は Apps Script エディタで「デプロイ」→「デプロイを管理」→ 鉛筆アイコン → バージョンを「新バージョン」に変更 → 「デプロイ」。
|
||
|
||
### 集計レポートの見た目を変更する
|
||
|
||
`src/penalty.gs` の `getSummary()` や `getMonthlyReport()` を編集する。
|
||
|
||
---
|
||
|
||
## 料金について
|
||
|
||
- **LINE 公式アカウント**: 無料プラン(コミュニケーションプラン)で利用可能
|
||
- **コマンドへの応答**(Reply Message): 通数にカウントされない(完全無料)
|
||
- **月次レポート**(Push Message): 送信先人数 × 1通でカウント。5人グループなら月5通。無料枠は月200通なので十分
|
||
- **Google Apps Script / Google スプレッドシート**: 無料
|
||
|
||
---
|
||
|
||
## セキュリティについて
|
||
|
||
GAS の Web App URL にはランダムなスクリプトID(64文字)が含まれており、この URL を知らない限りリクエストを送ることはできません。LINE Webhook の署名検証(`x-line-signature`)は GAS の仕様上実装できませんが、URL 自体が事実上のシークレットとして機能します。
|
||
|
||
**デプロイ URL は他の人に見せないでください。**
|
||
|
||
---
|
||
|
||
## 制約・注意事項
|
||
|
||
- **Webhook URL 検証**: LINE Developers Console の「検証」ボタンはエラーを返すことがありますが、実際のメッセージ送受信には影響しません
|
||
- **1グループ限定**: 1つの GAS プロジェクト(スプレッドシート)で1つのグループを管理します。複数グループで使う場合は、グループごとにスプレッドシートと GAS プロジェクトを分けてください
|
||
- **初回の応答が遅い場合があります**: GAS は使っていない間はスリープ状態になります。しばらく使っていなかった後の最初のコマンドは、応答に数秒かかることがあります
|
||
|
||
---
|
||
|
||
## clasp で開発する場合(上級者向け)
|
||
|
||
[clasp](https://github.com/google/clasp) を使うとローカルで編集して GAS にプッシュできます。
|
||
|
||
```bash
|
||
npm install -g @google/clasp
|
||
clasp login
|
||
cp .clasp.json.example .clasp.json
|
||
# .clasp.json の scriptId を自分の GAS プロジェクトの ID に書き換える
|
||
clasp push
|
||
```
|
||
|
||
GAS プロジェクトのスクリプト ID は、Apps Script エディタの「プロジェクトの設定」→「スクリプト ID」で確認できます。
|