Communitygithub.com

Gmailラベルクリーンアップスキル

既存のラベルを使って大量のGmailバックログを整理し、新しいメールが自動的にラベル付けされるフィルターを作成します。ワンクリックGmail MCPインストーラーを含む。

Gmailラベルクリーンアップスキル とは?

このスキルは、AIエージェント(Claude Code、Cursor、Codexなど)が、Gmailの大量バックログをユーザー自身の既存ラベルで効率的に整理し、新しいメールが自動でラベル付けされるフィルターを作成するためのものです。通常のGmailコネクタはメッセージ単位でしか処理できずフィルターAPIもないため、数千件のメールを扱うには非効率です。このスキルは、Gmail MCPサーバーを使用することで、サーバーサイドのフィルターと50件単位のバッチ操作を可能にします。ルールはすべてユーザーの過去のラベル付け履歴から学習され、推測は最低限に抑えられ、推測した場合は記録して後から修正できる仕組みになっています。また、作業は常に元に戻せるようにログが残り、フィルターは新着メールにのみ適用される点を明確に区別しています。

対応~Claude Code~Codex CLI~Cursor
npx skills add noambrand/gmail-label-cleanup

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Gmailラベルクリーンアップ

大量のGmailバックログを、ユーザー自身の既存ラベルで整理し、新しいメールが自動的にラベル付けされるようにします。

ほとんどのアシスタントに組み込まれているGmailコネクタは、1スレッドにつき1回のAPI呼び出しで、フィルターAPIがありません。これでは数千件のメッセージには遅すぎ、問題が再発するのを防げません。このスキルは代わりに完全なGmail MCPサーバーを使用し、実際のサーバーサイドフィルターと50メッセージのバッチ処理を提供します。

初回実行前

  1. MCPサーバーをインストールします。 install/INSTALL.mdを参照してください。Google Cloud OAuthデスクトップクライアントと1回のブラウザサインインが必要です。約10分かかります。
  2. ルールファイルを作成します。 references/rules-TEMPLATE.mdをプライベートファイルにコピーし(テンプレートでは my-rules.md が推奨されており、.gitignoreで除外済み)、アカウントの過去の履歴から内容を記入します。ルールを決して捏造しないでください。 「ルールの学習」を参照してください。

これを機能させる唯一のルール

ルールはユーザー自身の過去のラベル付けから学習され、決して捏造されません。

送信者または件名ごとに、その送信者が過去にどのラベルに分類していたかを確認し、それをコピーします。送信者が履歴にまったく現れない場合にのみ判断が許され、その場合は「推測」セクションに記録され、後で修正できます。間違ったラベルは修正が簡単ですが、間違ったラベルが300件のメッセージに静かに適用されるのは問題です。

もう一つのルール(苦い経験から学びました):送信者だけでなく、内容も重要です。 送信者は一つの軸に過ぎません。ウェルビーイング出版社からのお金に関するニュースレターには、お金のラベルも付けるべきです。スレッドには複数のラベルを付けることができます。

ルールの学習

人に聞くのではなく、アカウントに問い合わせてください。各ラベルについて、その中に何が既に入っているかを読み取ります:

search_emails: label:"<ラベル名>"

30~50件の結果を読み取り、送信者を書き留めます。そのリストがルールです。すべてのラベルに対してこれを繰り返します。次に list_email_labels でラベルIDを取得します。これが batch_modify_emails が実際に使用するものです。

これを1回実行し、ルールファイルに書き込み、パスを実行するたびに追加していきます。各パスで、前回見つからなかった送信者が発見されます。

パスの実行

パスとは、境界が定められ、ログが取られ、元に戻せる作業の塊です。200~300メッセージを目標にしてください。1回の実行ですべてを処理しようとしないでください。

1. フィルターが存在することを確認します。

list_filters

ルールファイルのフィルターが欠けている場合は、まず create_filter で作成します。ラベルグループごとに1つずつ、from: 条件を使用します。フィルターは問題が再発するのを防ぐ部分です。

2. ラベルなしのメールを見つけます。

まず受信トレイから:

search_emails: has:nouserlabels in:inbox

受信トレイが意図的にラベルなしのままのメッセージだけになったら、残りの作業はアーカイブです。日付順にページングし、古い境界を毎回移動させます:

search_emails: has:nouserlabels -in:inbox -in:sent -in:draft -in:trash -in:spam -in:chats before:YYYY/MM/DD

1ページあたり50~60件取得します。before: を処理した最も古い結果の日付に設定すると、次の呼び出しは中断した場所から続行します。これはページングトークンよりも信頼性が高く、中断にも耐えられます。

3. ラベルごとにグループ化し、バッチ処理します。

ページ内のメッセージをラベルごとに1つのメッセージIDリストに並べ替え、ラベルごとに1回 batch_modify_emails を addLabelIds とともに呼び出します。メッセージごとに1回の呼び出しは決して行わないでください。

バッチが Too many concurrent requests for user を返した場合は、失敗したIDのみを再試行します。この呼び出しは正確にどのIDが失敗したかを報告します。

4. ログを取ります。 日付付きのエントリを元に戻すログに追加します。以下の「元に戻すログ」を参照してください。

絶対に触らないもの

  • ワンタイムログインコード、マジックリンク、パスワードリセット、セキュリティアラート。 これらはラベルなしのままにし、決してゴミ箱に入れません。ログインコードをすぐに見つける必要がある場合、ラベルは役に立たず、ゴミ箱ルールは積極的に害を及ぼします。
  • ユーザー自身の「ラベル付けしない」リストにあるもの。 ユーザーがラベルなしのままにしたい出版物や送信者があり、それを伝えてきます。その言葉を聞いた瞬間にルールファイルに書き込みます。
  • 家族や個人のメール。ただし、ユーザー自身がその送信者に既にラベルを付けている場合を除きます。

ゴミ箱への移動

ユーザーが明示的に承認したもののみを、件名一致によってゴミ箱に移動します。安全なデフォルトセットは、利用規約とプライバシーポリシーの更新通知です:

subject:("terms of service" OR "terms and conditions" OR "terms of use"
         OR "privacy policy" OR "user agreement")
negatedQuery: subject:(code OR verification OR verify OR "security alert" OR password)

否定クエリは必須です。これがないと、「アカウント確認 - 更新された利用規約」というメールがゴミ箱に入ってしまいます。

Gmailのゴミ箱は30日間復元可能です。このスキルでデータが削除されることは決してありません。

元に戻すログ

各パスは1つの日付付きエントリを追加します。これは作業を元に戻し可能かつレビュー可能にする記録です:

  • 日付とパス番号。
  • フィルターが存在したかどうか、および作成されたフィルター。
  • ラベル付けされた件数、およびラベルごとの件数。
  • 判断の呼び出し(名前付き)。どの送信者に前例がなかったか、何が決定されたか、その理由。これは後で修正される部分です。
  • ラベルなしのまま、触れられなかったことが確認されたもの。

examples/undo-log-EXAMPLE.mdを参照してください。パスが退屈なときでも、特にそのときに書き込んでください。

フィルターは古いメールには適用されません

これは誰もがつまずくので、ユーザーに声に出して伝えてください:

Gmailフィルターは、フィルター作成後に届いたメールにのみ適用されます。 過去には決して遡及しません。したがって、この作業の2つの部分は本当に別々です。フィルターは自動的に未来を処理し、アーカイブのバックログは上記の通り、パスごとに手作業で処理する必要があります。

つまり、数回のパスで実際の大量送信者が判明したら、戻ってその送信者用のフィルターも追加してください。そうしないと、それらの送信者はラベルなしのまま届き続け、バックログが背後で再構築されます。

パスの取り消し

パスの元に戻すログエントリを読み取り、同じメッセージIDに対して removeLabelIds を指定して batch_modify_emails を実行します。ゴミ箱に移動したものについては、untrash が30日間有効です。これが、ログが「完了」だけでなく件数と理由を記録する理由です。

関連スキル