忘年会の季節ですが、月刊誌の仕事を抱える僕らは忙しさのピーク。夜更けの寒さを堪えつつ、タイトなスケジュールで執筆に勤しんでおります。そういえば、iTunes Matchの国内展開は年内スタートではなかった? こちらに締め切りはないのかしら……。
さて、今回は「宛名印刷」について。といっても、ワープロソフトの使い方を紹介するのではなく、その前段階にあたる基礎データの収集、具体的には「『連絡先』から住所データをCSVとしてエクスポート」することにより、どのようなソフトでも活用できるようにしようという算段だ。
『連絡先』のデータ構造
実は筆者、師走の声を聞くと取り組みはじめる恒例行事がある。それは「年賀状の宛名印刷」。かれこれ8年前に記事としてまとめたこともあるが(リンク)、手製Perlスクリプトで住所データをLaTeXソースに差し込み、それをPDFに変換したものを印刷しているのだ。住所データはカンマ区切りのテキスト(CSV)であり、これまではExcelで管理していた。
しかし、8年前とは事情が異なる。この数年でiPhoneとともに過ごす時間が長くなり、仕事関係者の情報はもっぱらiPhoneの『連絡先』で管理するように。『連絡先』にはCSVエクスポート機能がないため、データを取り出すのはひと苦労なのだ。
『連絡先』に蓄積されたデータは、拡張子「.abbu」の書類にエクスポートできる。この書類はバンドル構造であり、内部にはbzip2+tarで固められた書庫ファイル(*.abbu.tbz)がいくつかあり、それを展開すると各種メタデータのほかに、連絡先データ本体であるファイル(例:AddressBook-v22.abcddb)が現れる。
このabcddbファイルは、SQLite3が使用するデータベース。SQLite3はCoreDataに採用されており、SafariやMail、Spotlightなど多くのOS X用アプリケーション/システムツールは、その高速なデータアクセスに支えられている。『連絡先』もそのひとつなのだ。
SQLデータベースを直接開く
第1の方法として考えたのは、SQLite3データベースから直接データを取り出すこと。Terminalから「sqlite3」コマンドを利用する手もあるが、SQLの命令を対話的に実行せねばならず、師走の慌ただしい時期には避けたいところだ。
そこでチョイスしたのが、Firefoxアドオン「SQLite Manager」。SQLite3データベースをビジュアルに俯瞰できるほか、クエリーの結果をCSVに書き出す機能も用意されている。
ただし、SQLに通じていないかぎり、書き出すフィールド名は「ZFIRSTNAME」や「ZLASTNAME」などになってしまうため、そのままでは差し込み印刷に使いにくい。SQLite3データベースの閲覧ツールとしては役立つが、年賀状の宛名印刷にはとても……というのが本音だ。
解決策は意外なところに
『連絡先』のデータはSQLite3なのだから、これをうまくハンドリングすればCSVに変換できてシメシメ、というのが筆者の考えたプランだったが、前述の「SQLite Manager」でそれが現実的でないことを痛感した。
そんなとき、何気なく『連絡先』の項目をデスクトップへドラッグ&ドロップすると……vCard形式のファイルが生成された。それは以前から承知していたが、これを他のアプリケーションに対して行うとどうなるか?
まず試したのは「Excel for Mac 2011」。選択した項目をコピー&ペーストすると、姓名だけはワークシートに書き出せるが、住所や電話番号は対象外。ドラッグ&ドロップにも反応がなかったため、この方法は早々に断念した。
次に試したのは「Numbers」。こちらも項目を選択してコピー&ペーストするだけでは、姓名がワークシートに転写されるに過ぎなかったが、ドラッグ&ドロップしてみると……姓、名、電話とメールアドレスが表として追加された! クリックすると列記号はB/C/J/Sと飛んでいることが判明したため、すべての列を表示すると、今度は住所や郵便番号などすべての情報が!! 無事CSVに書き出すこともでき、これで宛名印刷の準備は万端。さて、年賀はがきを買いに行くとしますか……