rcmdnk's blog

20140409_filter_200_200

Gmailにすべてのメールを集めるようになって結構経ちますが、 ラベルの使い方を最近変えたのでそれについて。

以前までのやり方

上の記事でも書いてますが、 Gmailのラベルとそれを付けるためのフィルタを上手く使って 便利に使う工夫をしています。

ラベルの名前に番号をつける

ということをやっています。 Gmailでは基本的にラベルは名前でソートされて表示されるので 思い通りに並べ替える事は出来ません。

これを

00_ToDo
01_NoLabel
10_仕事
  10_仕事/1001_xxx
  10_仕事/1001_yyy
20_プライベート
...

みたいに番号を付けてくことで思い通りの順番に並べ替えることが出来ます。

ラベルをフォルダの様に使う

Gmailを使う前にはThunderbirdを使っていましたが、 大概の(昔の?)メールクライアントではフィルターで振り分けを行うとき フォルダという概念で行って居る思います。

ラベルと言った場合、一つのメールに対して複数のラベルを付けることが出来ます。

フォルダと言った場合、一つのメールは必ずどこか一つのフォルダに属している状態になります。

Thunderbirdなんかでフォルダ分けをしてIMAPでGmailと同期すると フォルダがそのままラベルに変換されますが Gmail側で複数のラベルがついてるものはThunderbird側では各フォルダにコピーが存在している状態になったいます(多分)。

メールクライアントではないですが、 Evernoteなんかだとノートブックがフォルダ、タグがラベルにあたります。

最近はこのラベルという感じのものが増えてきた感がありますが、 それはメールなどでも数が多くなってきた(多くのメールを保存できる様になった)ことや 同時にコンピューターの速度が上がって検索の速度が上がってきたことがあると思います。

フォルダに行って見る、ということよりラベルを指定して検索したほうが便利(速い)、と。

そうはいうものの、もともとフォルダ的な分け方をしていたので Gmailのラベルでも複数のところに同じメールがあるのは気持ちよくないので一つのメールには基本的に一つのラベルが付くようにしていました。

フィルタを大量に作ると、必ず一つのメールに対して複数のフィルタが合致してしまうことが出てきますが、 これは含むへキーワードとしてhas:nouserlabels from:[email protected]の様にhas:nouserlabelsを条件に加えてやることで 唯一のラベルを付けることが出来るようになります。

has:nouserlabelsラベルがついてないという条件なので、 フィルタを順に適用していくとき、最初に適用されたもののラベルが付いて 後のフィルタに関しては適用されないようになります。

ただ、ちょっと面倒なのが、Gmailのフィルタはウェブインターフェース上だと 編集したものが一番下に移動するようになっており、それ以外では順番を変更するすべがありません。

にもかかわらずフィルタは上から順に適用されていきます。

大量のフィルタがある時、上の方のフィルタを編集して一番下に来てしまうと 他のフィルタすべてをちょっと変更して戻して、みたいな事をして移動しないといけませんが 現実的に無理です。

この場合、フィルタのエキスポート/インポート機能を用いて

  • すべてのフィルタを選択してエキスポート(XMLファイル)
  • エキスポートされたXMLファイルを直接編集
  • 編集したファイルをインポート(ファイルを選択、ファイルを開く、でフィルタがインポートされる、まだ実際には導入されない)
  • この時点で古いフィルタをすべて選択肢、削除
  • インポートされたフィルタをすべて選択して作成

といったことをやります。

フィルタを作成する所でちょっと時間がかかるので(100個で1分位)、 その間にメールが来てしまうと振り分けられないのがちょっと面倒。

それが嫌なら古いメールを削除する前に新しいフィルタを作成し、 古いフィルタだけを選択して削除することが出来ます。 ただ、この場合古いフィルタを一つづつ選択していかないといけないので面倒です。

なので普通は先に削除してから作る様にしています。

NoLabelラベル

すべてのフィルタにかからないメールがあるかと思いますが 通常はその様なメールは重要なものではないはずです。 (人によってはそうではないことのが多いということもあるとは思いますが。)

その場合、その様なメールが受信トレイ(Inbox)に残ると スマホとかのGmailアプリで通知が来るのであまりうれしくありません。

そこで、すべてのフィルタを適用した最後に 含むの条件でhas:nouserlabelsだけを入れて、 これに対して受信トレイをスキップする(アーカイブする) を設定した上で 01_NoLabelなどの適当なラベルを付けます。

これによってフィルタにかからないメールは通知を出さなくなります。

ただ、重要なメールも入ってる可能性もそこそこあるので チェックしやすいように番号を早くしておいた方が良いかと。

Google Apps Scriptで自動削除

Googleカレンダーの通知などをメールで送る様にしておくと 結構な数が溜まっていきますが、これに関しては残しておく意味は全くありません。

最近ではストレージの容量も増えてきたので古いメールを削除しなくてはいけない、 ということはあまり起こらないと思いますが絶対必要が無いものは定期的に消してしまいたいものです。

そういったメールを適当な90_Tmpといった様なラベルを付けておくことで あとでまとめて消すことが出来ます。

さらに、Gmailに関してはgoogle Apps Scriptから操作が出来るので これを使って

  • 90_Tmpラベルがついていて1週間以上前のメールを削除

といった設定が出来ます。

スクリプトの内容や設定方法は以前の記事で。

今回変更した部分

今回変更したのは特に 以前のラベルをフォルダの様に使うの部分です。

フィルタの順序がすべてにおいて重要だったりする部分が面倒なのと、 ラベルをラベルらしくつかっても良いんじゃないか(一つのメールに複数ラベルを付ける)、 そっちのがやはり便利じゃないか、と思いだしたりしたからです。

フィルタ的な具体的な部分としては 各フィルタのhas:nouserlabelsを外す、ということです。

この様に複数のラベルを付けたい場合、受信トレイをスキップするべきものとそうでないものが 同じメールに付く場合ちょっと面倒です。

以前の場合だとそれぞれのフィルタでスキップするかどうか決めていて、 最初に重要な受信トレイに残す、というフィルタを適用すればそのまま残っていましたが、 この方法だと後から(先でも)スキップするフィルタがかかるとスキップされてしまいます。

これを避けるために、99_DummyInboxというダミーなラベルを導入します。

そして残したいメールに対してこのラベルが付くようなフィルタを作ります。

全てについてまとめて付けても良いですし、 XMLファイルを編集して残したい条件のものをコピペしてこのラベルに置き換えたものを追加しても良いです。 その場合ちょっとフィルタの量は増えてしまいますが。

そして一番最後に

-label:99_DummyInbox含む(-をつけてるのでつまり99_DummyInboxのラベルが付いてない) メールに対して受信トレイをスキップするを適用するフィルタを作ります。

これによって受信トレイに残す必要のないメールを最後に一斉にアーカイブすることが出来ます。

この方法だとフィルタの順番も一番最後の受信トレイスキップ用のフィルタ以外は 気にしなくて良くなります。

なのでWebインターフェース上からアップデートするのもそれほど非現実的ではありません。 (一つ編集したら、最後の-label:99_DummyInboxのものをちょっと編集(適当に含むにスペース入れるとか。。。)してもう一度戻すとかして また一番下に戻す。)

実際には上に書いたNoLabelも使っているので NoLabelのものとDummyInboxのフィルタ2つを最後に持ってくる様な作業を行っています。

まとめ

以前まではラベルを無理やりフォルダの様に使っていましたが、 フィルタの変更方法の制限などで面倒な所がありました。

その辺も考慮してラベルをラベルっぽく使う様にしてみましたが、 フィルタ順をそこまで気にしなくて良くなったのは結構楽です。

加えて複数のラベルが付いてる方が実際に探しやすいです。

フィルタの条件、ラベルの付け方ももうちょっと工夫できそうな感じもしますが、 基本的にはこんな感じで使って行こうと思います。

使い方については決まったものの、やはりフィルタをウェブインターフェースで管理したり、 エキスポートしたXMLを直接編集するのは結構面倒です。

そこでフィルタをYAML形式でわかりやすく管理するためのツールも作ったのでよかったら次の記事も見てみてください。

Sponsored Links
Sponsored Links

« HomebrewのCaskのレポジトリがcaskroomからhomebrewへ移動 gmail_filter_manager: GmailのフィルタをYAMLで簡単に管理する »

}