目次 / TABLE OF CONTENTS
01 プロジェクト概要と目的 OVERVIEW
aohashi.dev/dev-home/ は「タブ切替型のリンク集」に近い状態。今回のラボでは、タスク単位で情報が集約され、AIが能動的に次の一手を示し、その場で相談できる「**タスク中心の個人秘書OS**」を作る。さらにその思想を応用してチームメールの放置を検出する「管理者視点の監視レイヤ」を派生させる。
① 究極の個人秘書
斉藤さん個人向け。dev-homeの再定義。
- タスクにホバー→関連資料がスッと出る
- タスクごとにAIが「次の一手」を3択で提示
- 右下チャット窓でそのタスクの文脈込みの相談
- 記憶・資料・カレンダー・メールを横断参照
② チームメール監視
企業リーダー向け。個人秘書の「えげつない版」。
- チーム全員のメールをOAuthで認証
- 24h / 48h 放置を検出してアラート
- 未タスク化のメールをリーダーに通知
- Slack DM で朝夕ダイジェスト+赤はリアルタイム
コンセプトの関係
02 事例調査サマリ BENCHMARK
海外20製品+国内3製品を調査。ここで得た「使えるパターン」と「避けるべき罠」を次章の設計に織り込んでいる。
2.1 ①個人秘書まわりのインタラクション事例
採用するベストプラクティス(①)
- スペースキーでPeekパネル(Linear式)— タスク選択→Space→右パネル450px幅。
- 関連資料の自動サーフェス(Mem.ai式)— タスク選択時、右パネル下半分にSlack/Drive/過去タスクの候補が浮上。
- AI提案は3チップ(Todoist式)— 長文禁止。
[分解][コツ][締切]のような3ボタン。 - Contextドロップダウン(Coda式)— チャット上部に「このタスク/このプロジェクト/全体」の明示切替。
- @mention(Cursor式)— チャットで
@タスク@資料@人を補完付きで指定。 - 右下フローティング→サイドパネル→全画面(Sunsama / Notion式)— チャットの段階開示。
2.2 ②メール監視まわりの製品事例
03 ① タスクダッシュボード 設計 TASK DASHBOARD
画面の主役は「タスク一覧」。AIも資料もチャットも、タスクを中心に周りに配置する。現行dev-homeは「タブ切替でリンクを並べる」構造だが、ここから「タスクを選ぶと全てが追随する」構造に転換する。
3.1 画面レイアウト
3カラム構成
┌──────────┬────────────────────┬──────────────────┐
│ │ │ COMPANION PANEL │
│ SIDEBAR │ TASK LIST │ (450px幅) │
│ (240px) │ │ │
│ │ - カード形式 │ [上半分] │
│ ・今日 │ - 優先度で並ぶ │ タスク詳細+ │
│ ・今週 │ - hoverで軽い │ AI次の一手3チップ│
│ ・全て │ ツールチップ │ │
│ ・記憶 │ - Spaceで右に │ [下半分] │
│ ・資料 │ Peek展開 │ 関連資料(自動 │
│ │ │ サーフェス) │
└──────────┴────────────────────┴──────────────────┘
┌────────┐
│ 💬 Chat│ ← 右下固定
└────────┘
クリックで右Panelを拡張
3.2 主要インタラクション
| トリガー | 挙動 | 元ネタ |
|---|---|---|
タスクhover | 軽いツールチップ(期限・担当・優先度のみ) | Linear |
タスククリック | 右Companionパネルが該当タスクに切り替わる | Linear Peek |
Space | 選択中タスクをモーダル的にプレビュー拡張 | Linear |
E or ダブルクリック | タスク編集モード | Linear |
⌘L | チャットをそのタスク文脈で開く | Cursor |
⌘K | コマンドパレット(検索・作成・移動) | Linear / Raycast |
[次の一手]チップ | AIが3案を0.5秒で出す。長文禁止 | Todoist |
| 関連資料クリック | 別タブで開く(Drive / Slack / Gmail) | Mem.ai |
3.3 データモデル(MVP)
Task {
id, title, description, status, priority,
due_at, created_at, updated_at,
linked_resources: [ // 手動+自動検出
{ type: 'drive'|'slack'|'gmail'|'url', id, label, preview }
],
ai_recommendations: [ // 直近の生成キャッシュ
{ chip: 'decompose'|'tips'|'deadline', content, generated_at }
],
chat_history: [ // タスクごとに分離
{ role, content, created_at }
],
source: 'manual'|'email'|'calendar'|'ai_suggested'
}
3.4 AI機能の内部
次の一手(3チップ)
タスク選択時、右パネル上半分に3ボタンを常に表示。押されたら Claude API を呼ぶ。押されないうちは呼ばない(コスト最小化)。
[分解する]→ サブタスク3〜5個[実行のコツ]→ 最初の15分で何をするか[締切を詰める]→ 現実的な期限+根拠
関連資料サーフェス
タスク選択のたびに Drive / Slack / Gmail / 過去タスクをベクター検索。上位3件を表示。サーフェスだけでAI呼ばず。
- embeddings は週次バッチで更新
- 本文キャッシュは持たず、検索時にメタデータのみ取得
文脈チャット
右下 → サイドパネル → 全画面の段階開示。上部にContextドロップダウン。
- ContextスコープでAIに渡す情報量を切替
- @でタスク・資料・人を参照補完
- 会話はタスクIDに紐付けて保存
3.5 CLAUDE.md「AI最小化」原則との整合
・AIに投げるのは「次の一手3チップを押した瞬間」と「チャット入力」だけ。
・LLM呼び出しは1アクション1回のみ、コスト上限を可視化。
04 ② チームメール監視 設計 TEAM MAIL WATCHER
「全員のメールを裏で読んで、放置を検出してリーダーにアラート」。技術は ASAP メールAI の仕組みを下敷きにしつつ、**複数アカウント対応**と**本文非保存設計**を足す。
4.1 認証方式の比較と決定
| 方式 | 仕組み | 長所 | 短所 | 採否 |
|---|---|---|---|---|
| Gmail OAuth 2.0 (各社員が同意) |
社員が「アプリにGmailを許可」 | 透明性◎ 失効が簡単 社員の明示同意 |
各自クリックが必要 restricted scopeはCASA審査対象 |
採用 |
| サービスアカウント + ドメイン全体委任 |
管理者が一括許可 | 社員の操作不要 | 権限強大=漏洩被害大 監査要件重い |
不採用 |
| IMAP/SMTP直接 | メアド+パスワード | どのプロバイダでも動く | パスワード保管リスク 基本認証は廃止方向 |
不採用 |
gmail.readonly は restricted scope。ただし「内部アプリ」設定で青橋ドメイン内限定なら審査不要。将来の外販時に初めてCASA Tier2(有料・毎年更新)が必要になる。今回のラボは内部アプリで進める。
4.2 未返信判定ロジック(疑似コード)
FOR thread IN inbox(直近30日):
# Step 1: そもそも返信が要るか(全部if文で判定)
IF List-Unsubscribe ∈ headers → SKIP(メルマガ)
IF Auto-Submitted: auto-generated → SKIP(自動返信)
IF my_address ∈ BCC only → SKIP(情報共有)
IF sender ∈ known_bot_list → SKIP
# Step 2: 最終発言者チェック
IF thread.last_message.direction == 'outbound':
CONTINUE(既に返信済み)
# Step 3: 営業時間換算の経過
elapsed = business_hours(now - last_inbound.received_at)
IF 24h ≤ elapsed < 48h → status = WARN(黄)
IF elapsed ≥ 48h → status = ALERT(赤・リーダー通知)
# Step 4: 曖昧ケースだけAIに聞く(CLAUDE.md AI最小化原則)
IF status == WARN AND 件名に「FYI」「確認不要」等あり:
ask_LLM("このメールは返信必須か?") → 1トークンでY/N補正
ポイント:ステップ1〜3は全部プログラムで完結。AI呼び出しは境界ケースだけ。CLAUDE.mdの「if文 > LLM」方針に厳密に沿う。
4.3 アーキテクチャ
4.4 プライバシー設計(最重要)
本文を保存しない
Firestoreにはメタデータ(件名・差出人・時刻・スレッドID・状態)のみ。本文はCloud Run内のメモリで処理→破棄。
リーダーが見られる範囲
デフォルトは「件名+差出人+経過時間」まで。本文を見るには個別のトグル、かつ社員への通知(「あなたのメールが〇件本文閲覧されました」を週次通知)。
同意とログ
入社時+年1回OAuth同意。アクセスログは1年、スレッド状態は90日、以降自動削除。
4.5 チームリーダー視点のダッシュボード
| 要素 | 挙動 |
|---|---|
| ヘッダKPI | 本日のチーム全体の放置件数、赤アラート件数、改善率 |
| メンバーカード | 1人1カード。未返信件数、赤/黄の内訳、最古の放置経過時間 |
| メンバー詳細 | クリックでドリルダウン。件名一覧、経過時間、タスク化ボタン |
| タスク化 | 「このメールをタスクに」で ①側のタスクダッシュボードに連携 |
| Slack通知プレビュー | 右サイドに「DMで飛ぶ文面」を表示 |
| 一時停止 | 各メンバーが /mute 3d で自己申告停止(有給対応) |
4.6 アラート疲れ対策
- デフォルトは朝夕のダイジェストだけ(9時・18時)。
- 赤(48h超)だけリアルタイム、しかもチャンネルへのメンションは同スレッドにつき1回まで。
- しきい値はチームごとにカスタマイズ(営業=24h、開発=72h等)。
- 一時停止機能でバカンス時・出張時は自動的に通知抑制。
05 独立環境の構成 ISOLATED LAB
本番(aohashi.net、secretary-ai-dev、ASAP Cloud Run)は一切触らない。新しいサブドメイン・新リポジトリ・新GCPプロジェクトを立て、事故ってもロールバック不要な設計にする。
| レイヤ | 既存(触らない) | 新規作成(ラボ) |
|---|---|---|
| ドメイン | aohashi.net / secretary-ai-dev.aohashi.net | lab.aohashi.net(新サブドメイン) |
| フロントリポ | AOHASHILLC/aohashi-portal | AOHASHILLC/aohashi-lab(新規) |
| フロントホスト | Cloudflare Pages: aohashi-portal | Cloudflare Pages: aohashi-lab(新プロジェクト) |
| バックエンドリポ | AOHASHILLC/asap-mail-ai AOHASHILLC/secretary-engine |
AOHASHILLC/mailwatch-lab(新規・Python/Flask) |
| バックエンド | Cloud Run(GCP: aohashi-infra) | Cloud Run(GCP: aohashi-lab)(新プロジェクト) |
| Secret | aohashi-infra Secret Manager | aohashi-lab Secret Manager(独立) |
| Slack | 既存 aohashi ワークスペース | 既存使い回し、ただし #lab-alert 新規チャンネル |
| 認証(ダッシュボード) | Basic認証(secretary-ai-dev) | Cloudflare Access(Google SSO、青橋ドメインのみ) |
| ローカル作業パス | ~/aohashi-portal / ~/asap-mail-ai / ~/secretary-engine | ~/aohashi-lab/ と ~/mailwatch-lab/ |
aohashi-lab を切れば、Billing/IAM/Secret全てが完全独立。月数百円で済むので分けない理由がない。
06 ロードマップ ROADMAP
承認後のスケジュール案。各フェーズはゲート判定。前フェーズが動かない限り次には進まない。
ゲート判定基準
- Phase 0 → 1: lab.aohashi.net にダミーページが表示される/Cloudflare Access で青橋Googleログインが通る/GCPプロジェクトが分離されている
- Phase 1 → 2: ①のデモ機能が斉藤さんのテストで「使える」判定/Claude API料金が想定内/dev-home並みの動作速度
- Phase 2 → 完成: saito@ と sales@ の2アカウントで1週間運用/誤検出率10%以下/本文非保存が機能/Slack通知の疲れ具合を実測
07 リスクと対策 RISK
| # | リスク | 影響 | 対策 |
|---|---|---|---|
| 01 | OAuth Tokenの漏洩 | 社員メール全件閲覧権限の流出 | Secret Manager保管/30日ローテ/Cloud Runサービスアカウント分離/アクセスログ監査 |
| 02 | 社員のプライバシー反発 | 労務問題・心理的安全性低下 | 就業規則明示/本文非保存/リーダー向けUIは件名のみがデフォルト/本文閲覧時は本人へ通知 |
| 03 | 誤検出(メルマガ等を未返信判定) | 「使えない」と評価され離脱 | List-Unsubscribe等のヘッダ判定を確実に/初月はホワイトリスト手動育成 |
| 04 | Gmail APIレート超過・watch失効 | 通知が届かない障害 | watch更新を日次cron/失敗時 #lab-alert 通知/指数バックオフ |
| 05 | CASA審査トリガー(外販時) | 年数十万円+数ヶ月の審査 | 初期は内部アプリ限定/外販は別フェーズで再設計 |
| 06 | Claude API コスト爆発 | 月額数万〜数十万の想定外課金 | AI呼び出し箇所を限定/Haiku 4.5をデフォルト/日次コスト上限Alert/CLAUDE.md AI最小化原則 |
| 07 | 本番環境への誤影響 | aohashi.net / ASAP停止 | GCPプロジェクト分離/リポジトリ分離/サブドメイン分離/wranglerプロジェクト分離 |
08 今日決めたい論点 DECISIONS
設計を前に進めるには、斉藤さんの判断が必要なポイントが8つある。推奨案(★)を提示しているが、変更可能。
-
ドメイン名
ラボ環境の公開URL。recommended は短く覚えやすい方。
-
GCPプロジェクト分離
本番 aohashi-infra と同居するか、新プロジェクトを切るか。
-
着手順
①②どっちから攻める?
-
①のタスク入力源
タスクはどこから来る?複数選択可。
-
①の関連資料ソース
どこまで横断検索する?
-
②のテスト対象アカウント
最初に接続するテスト用Gmailを教えてください。
-
②の本文保存ポリシー
本文をFirestoreに保存するか。
-
②のリーダー宛アラート先
チームリーダー(saito@)にはどのチャネルで飛ばす?