担当: トラジ(社内開発・自動化担当)
全 8 アカウント一覧
会社の AI 業務を支える全 Google アカウントの役割分担。実メールアドレスはチャット・ファイル・ログに一切書かず、{{xxx_email}} プレースホルダで参照する運用。
| プレースホルダ | 用途 | カテゴリ | 主管 |
|---|---|---|---|
| {{connect8_email}} | 会社事業メイン Workspace 主アカウント | 会社業務 | CEO(飯塚) |
| {{connect8_contact_email}} | 会社への問い合わせ窓口(contact@ エイリアス) | 会社業務 | ターちゃん(A09) |
| {{connect8_ai_email}} | 会社全体用 AI 作業拠点(CAC 以外) | AI 拠点 | ターちゃん(A09)/ 白石(A08)/ 三宅 |
| {{cac_ai_email}} | CAC 業務専用 AI 作業拠点 | AI 拠点 | 黒柳(A05_cac) |
| {{ai_email}} | 個人 AI 関連(モーニング・買い物等) | 個人 | CEO 個人 |
| {{rim_email}} | 夫婦共有(メール・スケジュール管理) | 個人 | CEO 夫婦 |
| {{finance_email}} | 投資・金融サービス用(2026-05-22 AI スコープから完全切断、Personal_finance Drive オーナー) | 個人(AI 非接続) | CEO 個人 |
| {{finance_ai_email}} | 個人金融 AI 作業用ロボット(2026-05-24 新設、drive + spreadsheets スコープ、Personal_finance 編集者) | 個人(ロボット) | CEO 個人 |
| {{shop_email}} | EC・ショッピング通知用 — AI スコープから完全切断済(アカウント自体は残置) | 個人(AI 非接続) | CEO 個人 |
絶対ルール: 上記プレースホルダ以外の実メアドをチャット・ファイル・ログに書かない。env 外の取引先メアドは
abc***@domain 形式で部分マスク。CEO 厳格運用中(2026-05-14 ルール策定、再発履歴あり)。
2 つの AI 拠点(最重要)
会社の AI 操作はすべて以下 2 アカウントに集約。個人アカウントには AI 経由の書き込み権限を与えない。
{{cac_ai_email}} — CAC 専管
| 呼称 | CAC AI エージェント |
| 主管 | 黒柳さん(CAC リーダー) |
| GCP プロジェクト | cac-ai-agent(既存) |
| token 配置 | 2_Areas/A05_cac/_credentials/token_cac_ai.json |
| スコープ | Forms / Sheets / Slides / Drive / Docs / Script / Calendar / Gmail compose(9 スコープ) |
| 主な業務 |
|
{{connect8_ai_email}} — CAC 以外全部
| 呼称 | connect8 AI エージェント |
| 主管 | ターちゃん(A09 BPO)/ 白石(A08)/ 三宅 |
| GCP プロジェクト | connect8-ai-ops(2026-05-15 新設) |
| GCP オーナー | {{connect8_email}} Workspace(組織継承可能) |
| token 配置 | ~/_credentials/google_oauth/token_connect8_ai.json |
| スコープ | gmail.readonly / gmail.send / drive / forms.body / spreadsheets / presentations / script.projects(7 スコープ) |
| 主な業務 |
|
GCP プロジェクト構成(現状 AS-IS)
⚠️ 重要な現状認識(2026-06-09 検証時点):
理想設計では「個人/会社/CAC の 3 GCP 分離」だが、実態は personal-ai-ops に全アカウントが集約されている。
OAuth 同意画面で「morning-routine」表記が出るのはこの理由。完全分離は後日 TASKS.md 案件として実施予定。
実在する GCP プロジェクト
| GCP プロジェクト | オーナー | 役割 | 状態 |
|---|---|---|---|
| personal-ai-ops ID: morning-routine-493707(永続)番号: 51573263290 |
{{ai_email}}(個人 / 組織なし) | 個人 AI 全般 + cac_ai(歴史的経緯) + connect8_ai(実態として) | 稼働中 全 OAuth client がここに集約 |
| connect8-ai-ops ID: connect8-ai-ops |
{{connect8_email}}(connect8.cc 組織) | 本来は connect8_ai 業務用 | 準備済・未稼働 client_secret 発行済だが token は使われていない |
| cac-ai-agent 番号: 733608998705 |
未確認(おそらく {{ai_email}} 個人 or CAC オーナー) | CAC 業務のメイン token(銘柄管理 / 会員マスター / 日曜通信 / Notion 等) | 稼働中 token_cac_ai.json はここ。 ただし CAC Calendar 系の補助 token は personal-ai-ops に間借り(歴史的経緯) |
| sheet-test | {{ai_email}}(個人) | テスト用 | テスト |
ローカル OAuth ファイル実態
| ファイル | 所属プロジェクト | 用途 |
|---|---|---|
~/_credentials/google_oauth/client_secret.json |
personal-ai-ops | 全 token の生成元として実際に使われている(connect8_ai 含む) |
~/_credentials/google_oauth/client_secret_connect8_ai_ops.json |
connect8-ai-ops | 準備済だが現状未使用(移行後の本命) |
token ↔ アカウント ↔ プロジェクト 対応表(現状実態)
| token ファイル | アカウント | OAuth client_id 系統 | スコープ | 主用途 |
|---|---|---|---|---|
token.json |
{{ai_email}} | personal-ai-ops | gmail.readonly | 個人モーニング |
2_Areas/A05_cac/_credentials/ |
{{cac_ai_email}} | cac-ai-agent(733608998705) | 10 スコープ(Forms / Sheets / Slides / Drive / Docs / Script / Calendar / Gmail compose 等) | CAC 業務メイン(銘柄管理 / 会員マスター v2.4 / 日曜通信 / Notion 連携) |
~/_credentials/google_oauth/ |
{{cac_ai_email}} | personal-ai-ops(歴史的経緯) | calendar | CAC Calendar 連携(補助) |
~/_credentials/google_oauth/ |
{{cac_ai_email}} | personal-ai-ops(歴史的経緯) | calendar.readonly | CAC スケジュール参照 |
token_connect8_ai.json |
{{connect8_ai_email}} | personal-ai-ops(本来は connect8-ai-ops が望ましい) | drive / forms.body / spreadsheets / script.projects / script.deployments / script.scriptapp | 業務 AI(フォーム生成・GAS 編集・Drive 操作) |
token_finance_ai.json |
{{finance_ai_email}} | personal-ai-ops | drive / spreadsheets | 個人金融 AI(Personal_finance 編集) |
token_shared.json |
{{rim_email}} | personal-ai-ops | gmail.readonly | 夫婦共有メール監視 |
token_work.json |
{{connect8_email}} | 別系統(244826068116-...) | gmail.readonly | 会社メール監視 |
備考:
token_finance.json と token_shopping.json は 2026-05-22 / 2026-05-24 廃止フローで削除済(finance_ai に統合)。
理想設計(SHOULD-BE)
- blast radius 分離: 1 GCP が侵害されても他に波及しない
- オーナー権限分離: 個人 / 会社 / CAC それぞれ独立
- 課金分離: 会社業務系は Workspace 契約と紐付き、税務対応に有利
- 監査分離: 業務操作ログが個人ログに混入しない
- 組織継承: connect8-ai-ops は Workspace 主オーナーなので人事変更時も継承可能
移行 TODO(後日まとめて実施)
| 項目 | 影響範囲 | リスク | 所要 |
|---|---|---|---|
| connect8_ai を connect8-ai-ops プロジェクトに正式移行 | 新規 token 発行、既存業務(フォーム生成・GAS 編集)切替 | 中(数日のサービス影響可能性) | 30 分(移行)+ 1 日(モニタリング) |
| cac_ai を cac-ai-agent に正式移行 | 銘柄管理 4 ジョブ / 統合会員マスター / 日曜通信 / Notion 連携 全部に影響 | 🔴 高(誤れば CAC 業務停止) | Phase 1 棚卸し数時間 + Phase 2-4 で 1-4 週間 |
関連: OAuth トークン詳細・スコープ別管理は 5. アーキテクチャ § GCP プロジェクト構造 を参照。
既知のバグと対処
2026-06-09: token scope 縮小バグ(修正済)
症状:
token_connect8_ai.json のスコープが約 1 時間ごとに 6 件 → 1 件(drive のみ)に縮小されていた。
結果として Apps Script 編集等が突然認可エラーで止まる。
| 原因 | A10 経理パイプライン他 32 ファイルで Credentials.from_authorized_user_file(path, narrow_scopes) + creds.to_json() 書き戻しにより、refresh 後にスコープが narrow_scopes に縮小されて保存される |
| 誘発タイミング | 15 分毎の com.connect8.upan.poller LaunchAgent が、access_token 失効後の refresh + 書き戻しを行うと発火 |
| 修正 | Credentials.from_authorized_user_file(path, scopes) の scopes 引数を全 32 ファイルから削除 → ファイル元のスコープを保持 |
| 影響範囲 | A10 経理パイプライン(29 ファイル)+ drive_io / drive_ops / drive_move_folder(3 ファイル) |
| バックアップ | /tmp/a10_token_fix_backup_20260609_113638/ + /tmp/non_a10_token_fix_20260609_113822/ |
| 対策(恒久) | 新規スクリプトでは Credentials.from_authorized_user_file(path) のみ使用、scope は token ファイル側に保持 |
同種バグ予防チェックリスト
- 新規スクリプトで
Credentials.from_authorized_user_fileを使う時は scopes 引数を渡さない - scopes を渡したい場合は、ロード後の token 書き戻し(
to_json())を しない - code review 時、上記パターンが混ざっていないか目視確認
- 定期チェック:
~/_credentials/google_oauth/token_connect8_ai.jsonのスコープ数が 6 件未満になっていないか
個人系アカウントの位置づけ
{{ai_email}}, {{connect8_email}}, {{shop_email}}, {{rim_email}} の 4 アカウントは Gmail/Calendar 読み取り専用 のみが OAuth トークンに記録されており、AI/スクリプト経由の書き込み操作は技術的に不可能。{{finance_email}} は 2026-05-22 に AI スコープから完全切断(トークン archived)。Drive 編集が必要な個人金融作業は {{finance_ai_email}}(独立ロボット)に分離。
仕組み: Google API はトークンに記録されたスコープを超えた呼び出しを
insufficient scope エラーで拒否する。各 token のスコープは ~/_credentials/google_oauth/token_*.json の scopes フィールドで確認可能(中身は読まない方針なので、専用スクリプトで JSON の scopes キーのみ抽出して確認)。
個人系アカウントが担うこと
| アカウント | 用途 | スコープ |
|---|---|---|
| {{ai_email}} | モーニングルーティン(朝刊配信)の主アカウント | gmail.readonly + calendar.readonly |
| {{connect8_email}} | 会社メール監視(30 分巡回)、Workspace 管理 | gmail.readonly + calendar.readonly |
| {{finance_email}} | 2026-05-22 AI スコープから完全切断(Drive 等は人間操作のみ、Personal_finance フォルダのオーナーとして保持) | 切断済み(archived) |
| {{finance_ai_email}} | 個人金融 AI 作業用ロボット(Personal_finance 編集、立替管理・医療費レシート集計等 5 機能) | drive + spreadsheets |
| {{shop_email}} | EC 通知の監視 | gmail.readonly |
| {{rim_email}} | 夫婦共有スケジュール参照 | gmail.readonly + calendar.readonly |
意義: 個人系トークンは「読むだけ」なので、漏洩時の被害が「メール内容を見られる」までに限定される。送信・削除・編集ができないため、勝手に外部に何かを送る攻撃は不可能。
エイリアス構造({{connect8_email}} 配下)
{{connect8_email}} Workspace アカウントには、業務上の宛先別エイリアスを設定。すべて同一受信箱に届く。
| エイリアス | 用途 | 受信先 |
|---|---|---|
info@ |
既存・汎用 | {{connect8_email}} 受信箱 |
contact@ = {{connect8_contact_email}} |
お問い合わせ窓口(AI 一次応対対象) | {{connect8_email}} 受信箱 → フィルタで {{connect8_ai_email}} 自動転送 |
| 各スタッフ名@ | スタッフ個人宛 | {{connect8_email}} 受信箱、ラベル仕分け |
差出人偽装の仕組み: {{connect8_ai_email}}(外部 Gmail)から
contact@ 名義で送信できる。Workspace SMTP リレー(smtp.gmail.com:587)経由で認証は {{connect8_email}} のアプリパスワードを使う構成。受信者には正規の connect8.cc ドメイン送信として届く(SPF / DKIM / DMARC 全 pass、2026-05-14 DNS 整備済)。