give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

カオス化したGmailのフィルタを整理する方法

はじめに

僕が勤めているソニックガーデンではメインの情報共有ツールとしてyouRoomを使っています。
普通の一般企業がメールでやりとりする内容の大半はyouRoomで完結させているので、メールの依存度はあまり高くないと思いますが、それでもメールを全く使っていないわけではありません。
システム関係の通知や社外から問い合わせ等ではメールを使っています。


メールは僕個人宛てのメールだけではなく、グループアドレス宛てのメールも届きます。
システム通知系のメールや、グループアドレス宛てに届いた全くの興味のない宣伝メールなど、それなりの種類、量のメールが届くので、これまでもGmailのフィルタ機能を使って自動的に分類を分けるためにラベルを付けたり、価値のないメールを削除したりしていました。


ただ、このフィルタの設定がこれまで非常にアドホック(付け焼き刃、その場しのぎ)だったというか、フィルタを使いたくなったときに毎回適当なフィルタを追加していたので、だんだんと結構な数のフィルタが溜まってきました。
それこそ、フィルタの「スパゲッティコード」です。
プログラマたるもの、「スパゲッティコード」を放置するわけにはいきません。


前々から「フィルタをちゃんと整理しなきゃ」と思い続けて、先日ようやくフィルタの大整理を完了させることができました。
今回はGmailのフィルタを整理するときの流れや考え方について、僕なりにまとめてみようと思います。


f:id:JunichiIto:20140405112455p:plain:w300


ちょっと長いエントリなので、先にアウトラインだけを挙げておきます。

  • スパゲッティコード化したフィルタの問題点
  • ステップ0: フルスクラッチで書き直したくなる衝動を窓から放り投げる
  • ステップ1: 現在のフィルタ設定を分析する
  • ステップ2: メールフィルタの理想形を設計する
  • ステップ3: スプレッドシート上で具体的な条件を設計する
  • ステップ4: 実際にフィルタを整理する
  • ステップ5: 実際に使ってみながら条件を微調整する
  • 大掃除にかかった時間

 

スパゲッティコード化したフィルタの問題点

まずスパゲッティコード化したカオスなメールフィルタの問題点について考えてみます。

問題点1: フィルタの条件が衝突する

適当にフィルタを追加していくと、そのうち条件が混線し始め、設定Aと設定Bの両方に合致するメールが出てきたりします。
条件が衝突すると思った通りにInboxをスキップしてくれなかったり、一つのメールに意味もなく二つのラベルが付いたりします。

問題点2: 問題が起きても解決できない(解決する気が起きない)

上のように「あれ、なんかおかしいな」という問題が起きても、カオス化した山のようなメールフィルタから原因を見つけるのは非常に大変です。
「過去の自分は他人」状態になっているので、どこで何をやっているのかさっぱりわかりません。
がんばれば解決できるかもしれませんが、わざわざそこに時間をかけるのも億劫なので、問題が起きていても結局「・・・ま、いっか。」になってしまいます。

問題点3: 精神的に気持ち悪い

実は一番の問題はこれかもしれません。
プログラムを書く時は「コードはDRYに読みやすく!!」なんて言ってるくせに、フィルタ設定画面を開くと、全くDRYでもなく読みやすくもないフィルタ設定が山のように並んでいるのは、プログラマとして完全にブルーです。
そこへさらに新しいフィルタを追加しようとするときは、「これでまたカオス化が一段と増すのか・・・」と我ながら憂鬱になります。


・・・以上のように、スパゲッティコード化したカオスなメールフィルタはどこかで大掃除しなければ、こうした問題はいつまで経っても解消されません。
さあ、重い腰を上げて大掃除に取りかかりましょう!

ステップ0: フルスクラッチで書き直したくなる衝動を窓から放り投げる

さて、スパゲッティコードを書き直すとなると、今の設定を全部投げ捨ててゼロから作り直したくなると思います。
実際僕がそうでした。


ですが、スパゲッティコードであっても、それをフルスクラッチで書き直すのはあまり得策だとは言えません。
これはプログラムを書き直すときも同様で、ジョエル・スポルスキ氏は書籍「Joel on Software」の中で次のように語っています。

彼らは意図的にやったのだ。彼らがそれをやったのは、どんなソフトウェア会社でも犯し得る、最悪の戦略的誤りによる。

彼らはプログラムをスクラッチから書き直すことに決めたのだ

Joel on Software 第24章 あなたが絶対すべきでないこと PART I


今回はこの考え方にならい、現在の設定をリファクタリングするような形でフィルタを整理していきました。
今の設定を投げ捨てる前に、まず設定を見直してみましょう。

ステップ1: 現在のフィルタ設定を分析する

大掃除への第一歩は地道な作業から始まります。
というか、このあとのステップもすべて地道な作業ばかりなんですが。


それはさておき、まずはスパゲッティなフィルタの山から目をそらさず、その中で自分が何をやろうとしてきたのかを分析してください。
そこまで詳細な分析は不要です。
フィルタの傾向やパターンを理解できればOKです。


フィルタの件数が山のようにあったとしても、一つずつ見ていけば「ラベルを付けるためのフィルタ」とか「最初からゴミ箱に入れるフィルタ」とか、ある程度のグループが見えてくると思います。


また、特定の宛先や特定の差出人など、複数のフィルタにまたがって登場するメールアドレスなんかも見えてくるのではないでしょうか。


現在のフィルタ設定を見直して、「過去の自分がやろうとしていたこと」をだいたい把握できるようにしてください。


ちなみに僕は一度設定の一覧をプリントアウトして、赤ペンでメモを入れたりして分析をしました。
量が多いと頭の中で全部整理するのは無理なので、紙やEvernoteなどに書き留めていく方が無難です。

ステップ2: メールフィルタの理想形を設計する

さて、上のように現在の設定を分析すると、自ずと理想のフィルタ設定が見えてきます。
メールフィルタを使って何がしたいのか、自動的にどう処理されると気持ちいいのか、これから実施する大掃除の「ゴール」を思い描いてください。


たとえば僕の「ゴール」はこんな感じでした。

全く役に立たないメール(グループアドレス宛ての宣伝メール等)
自動的にゴミ箱行きとする。
日常的に発生するシステム関連の通知や、SNS的なディスカッションの通知
すぐにキャッチする必要はないので、分類を示すラベルを付けた上でInboxをスキップする。
グループアドレス宛てに届いたメール
大半が「FYI(ご参考までに)」的なメールなので、「Other」のラベルを付けた上でInboxをスキップする。
上記以外の自分宛てメールや、システムダウン等のクリティカルなシステム通知
すぐにキャッチすべきなので、Inboxに入れる。


極端に単純化すれば、

  • 最初から読まないメール
  • あとで読むメール
  • 今すぐ読むメール

の3種類を自動的に振り分けたい、という感じです。


このあたりは人それぞれ状況が違うと思うので、自分自身で「理想形」を設計してください。

ステップ3: スプレッドシート上で具体的な条件を設計する

設計もできたことだし、さあGmailのフィルタを変更していきましょう・・・・ではなく、さらに設計を進めます。
ステップ2が概要設計だとしたら、ステップ3は詳細設計です。(おお、ウォーターフォール・・・)


ステップ2で設計した理想形を実現するための、具体的なフィルタ条件をここで設計します。


そして、ここが一番のキモなのですが、フィルタ条件は「単一の項目 + OR条件」で判断するようにします


たとえば、「差出人(from)が xxx@hoge.com 、 yyy@piyo.com のいずれかであればゴミ箱行きとする」みたいな感じです。


NGなのは「差出人が xxx@hoge.com かつ、件名に abcd が含まれる場合」というように、複数の項目の組み合わせで判断してしまうパターンです。
こうしてしまうと、ターゲットとするメールごとにフィルタを用意しなければならず、フィルタの数が増えてしまいます。


既存の設定をよく見直して、「確実にフィルタリングできる単一の項目」を見抜いてください。
たとえば、先ほどのNGな例の場合、よく見れば「件名が abcd」という条件だけで十分だったりします。(もちろん状況によります。)


そして、スプレッドシート上でフィルタ条件を整理していきます。
たとえばこんな感じです。

f:id:JunichiIto:20140405074847p:plain:w500


もちろん、条件の値は手入力するよりも既存のフィルタ設定からコピペする方が確実です。


そしてスプレッドシートの1行が、次のステップで設定する「フィルタ1件」に対応します。


こうして条件を整理していくと、たまに「あ、ここが完全に重複していた」とか、「今まではこの条件を使っていたけど、そういえばこっちの条件を使った方が適切だな」というのが見えてきます。
なので、現行のフィルタよりも条件が洗練されていくはずです。

ステップ4: 実際にフィルタを整理する

さて、いよいよ設定を実際に変更するステップにやって来ました!
ステップ3で具体的な条件は整理できているので、これを基本的に書き写すだけです。


ステップ3でもちらっと話しましたが、基本的にスプレッドシートの1行がフィルタ1件に対応するように設定します。
つまり、「単一の項目 + OR条件の羅列 + 適切なアクション(ラベルを付ける、削除する等)」で1件のフィルタを作ります


また、OR条件は { } (中括弧)を使うと短く書けるのがちょっとしたTipsです。
たとえば、以下のスプレッドシートを例に挙げると、

f:id:JunichiIto:20140405074847p:plain:w500

「削除する」の条件は次のように書けます。

from:{info@hoge.com noreply@piyo.com support@fuga.com}

subject:{不在にしています "Out of office"}


このフィルタを記入する場所はこちら(Has the words)になります。

f:id:JunichiIto:20140405083237p:plain:w500


フィルタを設定するとこんな感じになります。

f:id:JunichiIto:20140405093339p:plain:w450


次に、新しいフィルタを作成したら、不要になった古いフィルタを削除します。


たとえば僕の場合、削除用のフィルタを個別に作っていたのでかなり大量にありました。
削除用のフィルタを新しく作り直したことで、フィルタの数がかなり減りました。
なぜなら、「単一の項目 + OR条件の羅列 + 適切なアクション」とすることで、散らばっていた複数のフィルタを一つのフィルタにまとめることができたからです。


このように新しいフィルタの作成と古いフィルタの削除を繰り返していくと、次第に今まであったフィルタが少なくなっていきます。
僕の場合62件あったフィルタが14件になり、4分の1以上削減できました。
しかも、フィルタの条件を「単一の項目 + OR条件の羅列 + 適切なアクション」というルールにしているので、条件の見通しも劇的に良くなりました。

ステップ5: 実際に使ってみながら条件を微調整する

これまでやってきたことは「リファクタリング」なので、基本的に従来とフィルタの動きが変わったりすることはないはずです。
とはいえ、条件を作り直したところも多いので、一部で意図しないフィルタ設定に変わっている可能性もあります。


そうした問題を見つけたら、フィルタの設定を見直して変更してください。
プログラミングで言えば、「デバッグ」ですね。


しかし、条件がきれいに整理されているので原因を調査したり、問題を修正するのはずいぶん楽になっているはずです。


また、問題を修正する場合だけでなく、新しくフィルタの条件を追加する場合も「どの項目(差出人、宛先、件名等)でフィルタリングするのが一番適切か」を考えて、既存のフィルタにOR条件を追加するだけで完了します。


これなら精神衛生上もスッキリです!!

大掃除にかかった時間

正確に時間を計っていたわけではないのですが、全部トータルすると3時間ぐらいかかったんじゃないかと思います。
地道な作業の繰り返しで、決してすぐ終わるというわけではないですが、これで「未来の自分の心の平和」が確保できるなら、投資する価値はあると思うのですが、どうでしょうか?


これはプログラミングでいうところの「技術的負債の返済」っていうやつですね。

まとめ

このようにして今回僕はカオス化していたGmailのフィルタをきれいに整理することができました。
スパゲッティコードだとか、詳細設計だとか、リファクタリングだとか、プログラマならではの観点でフィルタを整理できるところもなかなか興味深かったりしますw


僕と同じようにフィルタをどうやって整理すればいいか悩んでいる人がいれば、ぜひ参考にしてみてください!

あわせて読みたい

ところで、冒頭でも書いたように僕の場合、仕事では基本的にyouRoomを使っているので、仕事で全面的にメールを使っている人に比べればフィルタの設定もかわいいものかもしれません。


なぜyouRoomがメールよりも便利なのか、という点については、以前書いたこちらのエントリを読んでみてください。

入門youRoom ~メールでよくある5つの不満と、それを解消した知られざる情報共有ツール~ - give IT a try
f:id:JunichiIto:20120915071406p:plain:w450