Gmail自動ラベリング は何をしますか?
目標
受信トレイのメールを取得し、並列サブエージェントで「アクションが必要」「返信待ち」「参照用」に分類し、Gmail APIでラベルを一括適用します。
スクリプト
./scripts/gmail_label_fetch.py- メールの要約をコンパクトなJSONとして取得./scripts/gmail_label_split.py- メールをN個のチャンクに分割して並列分類./scripts/gmail_label_merge.py- 分類されたチャンクを単一のlabels.jsonにマージ./scripts/gmail_label_apply.py- ラベル分類を一括適用
サブエージェント
email-classifier—.claude/agents/email-classifier.mdで定義- モデル: Sonnet 4.5(高速でコスト効率の良い分類)
- 各サブエージェントは1つのチャンクを読み取り、1つの分類済み出力ファイルを書き込みます
フロー(並列 — デフォルト)
ステップ 1: メールを取得
python3 .claude/skills/gmail-label/scripts/gmail_label_fetch.py \
--account ACCOUNT --query "in:inbox" --limit 100 --output .tmp/emails.json
ステップ 2: チャンクに分割
python3 .claude/skills/gmail-label/scripts/gmail_label_split.py \
--input .tmp/emails.json --chunks 10 --output-dir .tmp/chunks
ステップ 3: 並列分類(10個のサブエージェントを起動)
10個のemail-classifierサブエージェントをバックグラウンドで起動し、チャンクごとに1つずつ割り当てます。各サブエージェントは:
.tmp/chunks/chunk_N.jsonを読み取り- 各メールを分類
.tmp/chunks/classified_N.jsonに書き込み
Taskツールをrun_in_background: trueおよびmodel: "sonnet"で使用します。真の並列処理を実現するため、1つのメッセージですべての10個を起動してください:
チャンク0〜9のそれぞれに対して、以下の内容でTaskを起動:
subagent_type: "email-classifier"
model: "sonnet"
run_in_background: true
prompt: "/absolute/path/.tmp/chunks/chunk_N.jsonを読み取り、各メールを分類し、結果を/absolute/path/.tmp/chunks/classified_N.jsonに書き込んでください"
重要: サブエージェントの結果を読み取るためにTaskOutputを使用しないでください。 サブエージェントは結果をファイルに書き込みます。メインエージェントが分類データを見る必要はありません。TaskOutputを読み取るとコンテキストウィンドウが肥大化し、大規模バッチ(500件以上のメール)では「プロンプトが長すぎる」エラーが発生します。
代わりに、ファイルの存在をポーリングしてください:
# すべての分類済みファイルが存在するまで待機(タイムアウト120秒)
for i in $(seq 0 9); do
while [ ! -f ".tmp/chunks/classified_$i.json" ]; do sleep 2; done
done
その後、ステップ4(マージ)に直接進みます。
ステップ 4: 分類結果をマージ
python3 .claude/skills/gmail-label/scripts/gmail_label_merge.py \
--input-dir .tmp/chunks --output .tmp/labels.json
ステップ 5: ラベルを適用
python3 .claude/skills/gmail-label/scripts/gmail_label_apply.py \
--account ACCOUNT --input .tmp/labels.json
分類ガイドライン
アクションが必要:
- 確認が必要なセキュリティアラート
- 期限のあるクレジットカード/ドメイン更新の通知
- 質問を含むSlack @メンション
- 歓迎すべき新しいチームメンバー(Slack参加通知)
- 返信が必要なクライアントメール
- ビジネスリスティングの更新(Googleビジネスプロフィール、Bing Places)
- Stripeのアクションが必要な通知
返信待ち:
- 返信を待っている営業メール
- 解決を待っているサポートチケット
- 送信済みで返答待ちの提案書
参照用:
- マーケティングニュースレター(DigitalMarketerなど)
- 慈善団体/非営利団体のニュースレター(RAPSなど)
- Googleビジネスプロフィールのパフォーマンスレポート
- プロモーションオファー(Blinkist、セールなど)
- プラットフォーム更新通知(Google Play、Apifyなど)
- 確認コード(既に使用済み)
- 不動産ニュースレター(Westbankなど)
- ゲームアカウントメール(Riot Gamesなど)
- 情報提供セキュリティアラート(2FA有効化など)
- 健康勧告
- 法務/ポリシー更新通知
アカウントレジストリ
アカウントはワークスペースルートのgmail_accounts.jsonに保存されます。各アカウントには以下が必要です:
email- Gmailアドレスtoken_file- OAuthトークンへのパス
新しいアカウントの追加
python3 .claude/skills/gmail-inbox/scripts/gmail_multi_auth.py --account ACCOUNT_NAME --email EMAIL
パフォーマンス
- シリアルフロー: 100件のメールで約36秒(取得1秒+分類34秒+適用1秒)
- 並列フロー: 100件のメールで約30秒(分類19秒+マージ1秒未満+適用約10秒)
- 分類がボトルネック。10個の並列サブエージェントにより34秒から19秒に短縮(約1.8倍の高速化)
- エージェント起動のオーバーヘッド(約4秒のずれ)により理論上の向上幅は限定的
- 適用ステップはGmail APIのスロットリングにより変動する可能性があります
スキーマ
入力
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
account | string | はい | レジストリ内のGmailアカウント名 |
query | string | いいえ | Gmail検索クエリ(デフォルト: 'in:inbox') |
limit | integer | いいえ | 分類する最大メール数(デフォルト: 100) |
chunks | integer | いいえ | 並列分類チャンク数(デフォルト: 10) |
出力
| 名前 | 型 | 説明 |
|---|---|---|
labels_applied | object | カテゴリごとの件数: アクションが必要、返信待ち、参照用 |
認証情報
| 名前 | ソース |
|---|---|
credentials.json | ファイル |
token_*.json | ファイル(自動生成) |
連携可能なスキル
このスキルと連携してチェーンにできるスキル: gmail-inbox
コスト
分類にClaude Sonnet APIを使用