Gmail ライクにメールを検索する Alfred Workflow をつくった

Posted on | 1122 words | ~3mins
perl alfred tool

Mac ユーザの皆さま,Alfred は使っておられますでしょうか? ご存知の方も多いと思いますが,Alfred は Mac で使えるコマンドライン型ランチャーです. 基本的には標準で搭載されている Spotlight でも同じようなことができますが,Alfred の方が拡張性も高く使いやすいと思います. 特に Powerpack という有料パックを購入すると使えるようになる Workflow という機能がめちゃくちゃ便利です. Workflow とは Alfred からスクリプトを実行する機能で,例えば Alfred から VM を操作したり,Evernote を検索したりすることができます. Workflow は簡単に公開することができるので,様々な Workflow が公開されています.

(参考: Alfred 2のユーザ体験をロケットスタートで始めるための13の偉大なWorkflow16 Great Workflows to Jumpstart Your Alfred ExperienceAlfred 2 Workflow List)

個人的には Mac を使う理由の1つと言ってもよいほど快適です. 使ってない人はぜひ一度試してみてください(Alfred の紹介記事は検索すればたくさんヒットするので使い方等は割愛します).

で,ヘビーユーザーな自分はメールの検索も Alfred でやりたかったので,今回 Alfred で Mail.app 内のメールを検索する Workflow をつくったという話です.

導入

以下のリンクからMailSearcher.alfredworkflowをダウンロードして,ダブルクリックすれば勝手にインポートされます.

ソースは以下のレポジトリにあります.

当然 Powerpack 導入済の Alfred が必要です. あとこの Workflow は あくまで Mail.app 内のメール検索なので,Thunderbird など他のメールクライアントを使ってる場合は使えないです…

使い方

mls {query}{query}を件名か本文に含むメールのリストを Alfred 上に表示,Enter を押すとそのメールを開きます.

ちなみに以下に示すような,Gmail の Advanced Search Operator の一部が使えます.

OperatorDefinitionExamples
from:Used to specify the sender.Example: from:amyMeaning: Messages from Amy
to:Used to specify a recipient.Example: to:davidMeaning: All messages that were sent to David
subject:Search for words in the subject line.Example: subject:dinnerMeaning: Messages that have the word “dinner” in the subject
is:starredis:unreadis:readSearch for messages that are starred, unread, or read.Example: is:read is:starred from:DavidMeaning: Messages from David that have been read and are marked with a star

(From Advanced search - Gmail Help.)

mls from:と入力するとアドレス一覧が出てくるなど,補完機能もついているので TAB で補完できます.

実装について

Perl スクリプトから Mail.app の sqlite DB を見てるだけです. Mail.app で開く部分は AppleScript でやってます. 全文検索をLIKE演算子でやってるのでデータが多いと結果が返ってくるのが遅い… FTS 3 + MeCab とか使ったらいいのでしょうが,DBへの変更は Mail.app がやるわけでどうするのが賢いのか思いついてない感じです. そのうち何とかせねば…

まとめ

自分が使いたかったので作りましたが,使ってくれる方がいらっしゃれば幸いです. プルリク等お待ちしてます.

皆さんも Workflow を自作して素敵な Alfred ライフを実現しましょう :)