大変長らくご無沙汰しております。よりによって4月1日にTwitter上で復帰を宣言、それから2ヶ月以上経過しましたが、ついに帰って参りました。かくも長き不在には諸事情ありますが、本日をもって一区切りということで……。次回からはタイトルを「新・OS X ハッキング」に改め、精進して参ります。応援のほど、よろしくお願いします。

さて、今回は「Mail.app」について。近々リリースされるはずのLionへ移行するにあたり、クリーンインストールしたいがメール関連のデータを温存したいと願う向きは多いはず。安全策は「移行アシスタント」に頼ることだが、この際捨てたいメールまでコピーされてはたまらない。そこで、手作業でメール関連データをバックアップする際のポイントをいくつか紹介してみよう。

Mail.appへの思い

最終回にあたりMail.appを選択したのには理由がある。というのも、Mail.appはNEXTSTEP時代を含めてもっとも長く利用しているツールだからだ。

NEXTSTEPの頃から標準装備されているアプリケーションは複数ある。PDF簡易編集機能を備える画像ビューア「Preview.app」、時間差でスクリーンショットを撮るときに使う「Grab.app」。いまやインストール専用の「Installer.app」は、削除/圧縮機能を備えるパッケージ管理ツールとして利用されていた。本連載の常連だった「Terminal.app」も、現在とはだいぶ機能的に異なるが存在していた。名前が同じということなら、Dock.appもそうだ。

脱線気味の昔話になってしまったが、そのうちもっともOSの移行に際して気を使うのはMail.appだ。まず、Mac App Storeという新しいソフトウェア配布プラットフォームの登場もあり、Lionが従来どおりの方法でインストール/アップグレードすべきものなのかがわからない。Mail.appもフルスクリーン対応のアプリケーションとしてデザインが修正されているという。しかし、TigerのときにさまざまなデータがSQLiteベースに変更されてからは(第236回)、構造部分に大きな変更はない。LionのMail.appも構造部分には手をつけないのだとすれば、手作業のバックアップもある程度役に立つと考えられる。

NEXTSTEP 3.3Jの「Mail.app」。POP/SMTPクライアント機能が標準装備されていないなど、機能的には数世代以上前のものだ

Mail.appが参照するデータ

Mail.appが使用するデータを手動バックアップする場合、~/Library/Mailをまるごと保存するのが基本だ。このディレクトリ以下には、送受信されたメッセージが保管されるアカウントごとのディレクトリ -- POP-XXXX@hoge.com、IMAP-XXXX@dokka.comなど -- のほか、プラグインが置かれる「Bundles」、任意に作成されたメールボックスがサブディレクトリとして存在する「Mailboxes」などのサブディレクトリがある。どのメッセージをバックアップするかは、個別のファイル(*.emlx)をQuickLookで確かめつつコピーすればいいので、それは省略する。

なお、この~/Library/Mailディレクトリだけでは不足だ。現在のMail.appは、Address Book.appのデータベースと連携して宛先情報を管理しているため、~/Library/Application Support/AddressBookディレクトリもバックアップしておいたほうがいい。以下の作業内容は、この2つのディレクトリを対象とするものだ。

どうせクリーンインストールするなら、不要なメッセージは残したくない。Quick Lookで確認しつつ、バックアップ後のフォルダから不要なものは取り除いてしまおう

 1.迷惑メールの学習効果

Mail.appを使い続けると、迷惑メール選別の精度が向上する。これは迷惑メールフィルタの学習効果によるもので、そのデータは「~/Library/Mail/LSMMap2」というファイルに蓄積される。データ構造がLionのMail.appに引き継がれているかどうかの検証は、Lionのリリースを待たねばならないが、保存しておく価値は大だろう。

 2.メッセージ送信者の情報

Mail.appでは、送受信されるメッセージを解析し、そこに含まれているメールアドレスをAddress Book.appのデータベース(~/Library/Application Support/AddressBook/MailRecents-v4.abcdmr)に保管している。新規メッセージを作成するとき、なにか文字を入力するとアドレスが補完されるのは、この仕組みがあるからだ。データベースの内容はsqlite3コマンドで調べることができるので、バックアップしておいて損はないだろう。

$ cd ~/Library/Application Support/AddressBook
$ sqlite3 MailRecents-v4.abcdmr 
 ・
 ・
sqlite> select ZLASTNAME,ZFIRSTNAME,ZEMAIL from ZABCDMAILRECENT;

 3.とりあえず残したい「Envelope Index」

明らかに不要なメッセージは(バックアップ後に)削除してしまうとして、どのようなメッセージが届いていたか、履歴だけは残しておいたほうがいいかもしれない。Mailディレクトリにあるデータベース「Envelope Index」には、「subjects」という名のテーブルがあり、ここには内部管理用のIDとともに、メッセージの件名が残されている。「addresses」テーブルには、宛名に使われたすべてのメールアドレスも残っている。ファイルサイズも、とりあえず残しておいて害にならない程度だ。

sqite3コマンドで「Envelope Index」のテーブルを参照したところ