morning-line-bot/README.md
hiroki ito c1ce766b63 初回配布
Made-with: Cursor
2026-04-03 20:53:06 +09:00

267 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 朝活遅刻罰金Bot
朝活グループの遅刻を記録し、罰金を自動集計する LINE Bot です。
LINEグループに Bot を追加して「遅刻」と投稿するだけで、誰が何回遅刻したか、今月いくら払うべきかが自動で管理されます。毎月1日に前月の集計レポートが届き、メンバー同士で精算する運用です。
## 仕組み3パーツ
| パーツ | 料理の比喩 | このツールでは |
|---|---|---|
| トリガー | 伝票 | LINE Webhookコマンド投稿時+ GAS 時間トリガー毎月1日 |
| ソース元 | 冷蔵庫 | Google スプレッドシート(遅刻記録ログ) |
| 処理する場所 | キッチン | Google Apps Scriptコマンド解析・集計・レポート生成 |
## 全体の構成
```
LINE グループ
↓ Webhookコマンド投稿
Google Apps ScriptdoPost で直接受信)
↓ コマンド解析 → スプレッドシート読み書き
↓ 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. シートは空のままで OKBot が初回実行時に自動作成します)
#### 手順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 にはランダムなスクリプトID64文字が含まれており、この 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」で確認できます。