manabase は、Gmail に届く manaba 通知メールを Google Apps Script で処理し、 必要な情報を Supabase に保存するためのプロジェクトです。
Gmail を唯一の入力 source とし、manaba へ直接アクセスするスクレイピングは v1 の対象外とします。
- manaba の課題、テスト、アンケート、コースニュース通知を Gmail から取り込む。
- Google Apps Script でメールを分類、正規化し、Supabase に送信する。
- Supabase では manaba の domain concept ごとに table を分ける。
- メール固有の情報は source metadata として保存し、domain table に混ぜない。
保存対象:
- レポート公開のお知らせ
- 小テスト公開のお知らせ
- 小テスト未提出のお知らせ
- アンケート公開のお知らせ
- コースニュース掲示のお知らせ
保存対象外:
- 成績公開のお知らせ
- parser が知らない未知の通知
成績公開は manaba/ignored を付ける。未知の通知は manaba/unknown を付けて、
後で Gmail 上で確認できるようにする。
含まれているもの:
- GAS entrypoint
- Gmail message-level label 処理
- manaba メール parser
- Supabase REST client
- Supabase migration SQL
- tsdown bundle
- clasp push 用設定例
Package manager は pnpm のみを使います。
pnpm install利用可能な script:
pnpm run build: GAS 用 bundle をdist/に生成する。pnpm run check: build と lint を実行する。pnpm run lint: Oxlint による type-aware lint と type check を実行する。pnpm run format: lint fix、oxfmt、ESLint fix を実行する。pnpm run clasp:push: build 後にclasp pushを実行する。pnpm run clasp:open: Apps Script project を開く。
- Supabase project を作成する。
supabase/migrations/001_initial_schema.sqlを Supabase SQL Editor などで実行する。- Project URL と service role key を控える。
初回だけ Google login が必要。
pnpm exec clasp loginApps Script project を作成または既存 project を使い、.clasp.example.json を
.clasp.json にコピーして scriptId を入れる。
cp .clasp.example.json .clasp.json.clasp.json は repository に commit しない。
Apps Script の Script Properties に以下を設定する。
SUPABASE_URL: required。Supabase project URL。SUPABASE_SERVICE_ROLE_KEY: required。Supabase service role key。MAX_MESSAGES_PER_RUN: optional。default は20。TRIGGER_MINUTES: optional。default は10。