このアプリについて
seinan-watch は、西南学院小学校から保護者に届く連絡を取得し、家族が確認しやすい形に整理して通知するための個人利用アプリです。開発者本人およびその家族だけが使います。一般向けサービスではありません。
利用目的
Google ユーザーデータおよび学校連絡は、次の目的だけに使います。
- 学校から届く連絡の取得
- 内容の整理
- 重複判定
- AI による要約
- 家族向け Slack への通知
Gmail の権限
使用する Google OAuth scope は次の1つだけです。
https://www.googleapis.com/auth/gmail.readonly
これは読み取り専用です。アプリはメールの送信、削除、編集、既読化、ラベル変更を行いません。
取得対象
このアプリは、Gmail 全体を人間が閲覧するためのメールクライアントではありません。
権限の範囲として、Google から付与されるのは Gmail の読み取り専用アクセスです。技術的には、その権限の範囲内のメールを API 経由で参照できます。
アプリが実際に処理する範囲は、主として tsuitamon@tsuitamon.net から届く学校連絡です。件名に「登下校門通過情報」を含むメールは、アプリ側の決定論的なルールで除外し、要約対象にしません。
AI による処理
学校連絡の件名、本文、および添付 PDF などは、要約を生成するために Google Gemini API へ送信される場合があります。PDF があるときは、本文テキストに加えて PDF そのものを文書として渡し、表・グラフ・図・数字の理解にも使います。PDF の取得に失敗したときは本文だけで要約します。
Gemini API の呼び出しに失敗したときは、原文の短い抜粋で通知を試みることがあります。
Slack への通知
要約された学校連絡は、開発者本人が管理する家族向け Slack へ送信されます。第三者向けの公開チャンネルではありません。
保存
アプリは、メール本文や添付ファイルの全文を、処理済み記録として永続保存する設計ではありません。処理済みかどうかの判定のため、次のような識別情報を state.json に保存します。
- 情報源と安定した ID(Gmail の場合は message id など)
- 内容の指紋(fingerprint。本文などをハッシュ化した値)
- 処理日時
- 重複判定用の資料識別子(Drive ファイル ID など)
この記録は、同じ連絡を繰り返し通知しないために使います。GitHub Actions で運用する場合、この state ファイルは非公開リポジトリ上で更新されることがあります。
要約処理の過程では、メール本文や PDF をメモリ上で扱い、Gemini API および Slack へ必要な範囲で送信します。OAuth の refresh token などの認証情報は、環境変数や GitHub Secrets に置きます。この公開サイトや公開リポジトリには置きません。
第三者提供・販売
Google ユーザーデータを販売しません。広告目的にも、信用情報の判定にも使いません。
不必要な第三者へ提供しません。ただし、このアプリの処理に必要な範囲で、次のサービスへデータが送られます。
- Google Gemini API(要約のため。件名、本文、添付 PDF など)
- 家族向け Slack(要約と連絡の題名・日付・出典など)
セキュリティ
OAuth の認証情報や token は、ローカルの環境変数や GitHub Secrets などで管理し、この公開サイトや公開リポジトリへ掲載しません。絶対に漏れないことの保証ではありません。
データ削除・利用停止
利用を止めるときは、次ができます。
- Google アカウントのアプリアクセス許可を取り消す
- 保存された処理 state(
state.json)を削除する - GitHub Secrets やローカル環境変数にある認証情報を削除する
Google API Services User Data Policy
seinan-watch の、Google API から受け取った情報の利用および転送は、 Google API Services User Data Policy (Limited Use 要件を含む)に従います。
The use of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.