狩野研究室のスケジュールをGoogleカレンダーから取得し、指定した時間にSlackとメール通知を行うBotです。 また、研究室のゴミ出し担当者を自動で決定し、通知する機能もあります。
機能としては以下の通りです。
- 研究室のスケジュールをGoogleカレンダーから取得し、即時Slackとメール通知を行う
- その週のゴミ出し担当者を自動で決定し、即時Slack通知する
- その週のゴミ出し担当者に対して、月曜と木曜にSlack通知を行うような予約投稿を作成する
スクリプトが実行された際に上記処理が行われるため、運用としてはCron等で定期的にスクリプトを実行することを想定しています。 スケジュール通知の都合上、毎週日曜日の朝にスクリプトを実行することを推奨します。
- Docker
- TypeScript
- Google Calendar API
- Google Sheets API
- Slack API
make prod_build実行用スクリプト(下記をcron等で定期実行)
docker run --env-file [env-file-path] notifier node dist/index.js- 開発環境用のDockerコンテナのビルド
make build-
.env及びcredentials.jsonの設定 ここから各種ファイルをDLし、ルートディレクトリに配置してください。
-
Dockerコンテナの起動及び依存関係の解決
make up
make shell
bun installbun installはdockerコンテナ内で実行してください。
- スクリプトの実行
make exec- Dockerコンテナの停止
make down毎週日曜日の朝にスクリプトを実行することを推奨します。
まず、プロダクションビルドを行うと notifier という名前のDockerイメージが作成されます。
make prod_build
# 内部的には docker build -t notifier -f docker/Dockerfile . が実行されるこのイメージはBunでビルドされたJSバンドルをNode.js上で実行する軽量な実行用イメージです。
docker run で起動すると通知処理を一度実行して終了するため、Cron等と組み合わせて定期実行できます。
以下はcrontabの設定例です。
# 毎週日曜日の午前7時に実行する場合
0 7 * * 0 docker run --rm --env-file /path/to/.env notifierスクリプトが実行されると、以下の処理が順番に行われます。
-
スケジュール通知
- Google Calendarから実行日を起点に7日分の予定を取得
- 取得した予定をメール(Gmail SMTP)とSlackで即時通知
-
ゴミ捨て当番通知
- Google Sheetsから研究室メンバーの当番回数を参照し、回数が最も少ない人を当番に選出
- 選出された当番をSlackで即時通知
- 月曜日と木曜日の10:00にリマインドするSlack予約投稿を作成
- Google Sheetsの当番回数を自動でインクリメント
make format
make lint馬場 海好
mbaba@kanolab.net
運用開始: 2024/7-