最近、MacBook Proのバッテリーが寿命を迎えたようで、一切充電できなくなりました。ああ、Apple Storeへ行かなければならないのか……。現行機種のデザインは好きなんですが、バッテリー交換時の手間は如何ともし難いものがありますよね。

さて、今回は「フォトストリーム」について。ご存知、iCloudでサポートされた画像自動転送機能だが、OS Xで使う場合にはiPhoto 9.2以降またはAperture 3.2以降が必要という制限がある。その理由を説明するとともに、実際どのようにして画像の転送が行われているか、そしてその仕組みを応用する方法について解説してみよう。

フォトストリームの舞台裏

iOSデバイスで撮影した写真、OS X(iPhoto/Aperture)に取り込んだ写真は、インターネットを通じてiCloud上の領域へと転送される。その写真たちは、同じApple IDでヒモ付けられた他のフォトストリーム対応デバイスへと自動転送されていく――それが、フォトストリームの基本的なしくみだ。

しかし、少し考えてみると、いくつかの疑問点が生じる。他のデバイスからiCloudに新着した写真を、iOSアプリやiPhoto/Apertureはどうやって把握しているのか。ログイン項目にiCloudから写真をダウンロードするとおぼしきアプリケーションが見当たらないのはなぜか……。

その答えは、iPhotoやApertureのアプリケーションバンドル内にある「PhotoStreamAgent」というプログラムにある。iPhoto/Apertureの起動とともに実行され、以降プロセスとしてシステムに常駐する。このプロセスが、iCloudとの画像ファイルの送受信を担当しているのだ。

iPhoto終了後にアクティビティモニタで検索したところ、「PhotoStreamAgent」というプロセスが引き続き動作していることを確認できる

PhotoStreamAgentがローカル保存用に使う領域は、~ / Library / Application Support以下にある「iLifeAssetManagement」というフォルダだ。この領域にいくつかのサブフォルダを作成し、そのうち「assets」→「sub」以下に多数のサブフォルダ(01a4f8aa……といった16進数表記とおぼしき一意のフォルダ名)が作成され、そこに画像ファイルが格納される。

だから「~ / Library / Application Support / iLifeAssetManagement / assets / sub」以下を調べると、フォトストリームに格納されているはずの画像ファイルをFinderやTerminalから確認できる。たとえば、lsコマンドで調べるとわかるが、「sub」以下の画像ファイル格納用サブフォルダの数は、フォトストリームの上限とされる1,000以上にならない。言い換えれば、この領域を対象にすると、iPhoto/Apertureでは難しい画像検索が可能になる、というわけだ。

フォトストリームから自動ダウンロードされたファイルは、~ / Library / Application Support / iLifeAssetManagement / assets / subフォルダ以下に保存されている

sub以下にあるサブフォルダは1,000、つまりフォトストリームの上限である画像1,000点が維持されていることがわかる

フォトストリームを自己流検索

iPhoto/Apertureに頼らず検索するメリットは、「軽さ」にある。iPhoto/Apertureは起動に時間がかかるうえ、検索結果は他のアプリケーションから参照できない。FinderやTerminalで検索すればシステムリソースの消費は少なく、動作も軽いうえに検索結果を他に流用しやすい。

例として、Finderで検索する方法を紹介してみよう。操作はかんたん、「~ / Library / Application Support / iLifeAssetManagement / assets / sub」フォルダを開き、ウインドウ右上の検索バーに「png」や「jpg」といった検索条件を入力し、検索範囲に「sub」を指定すればOK。これだけの操作で、フォトストリームにある特定の画像フォーマットを抽出できるのだ。

Finderでフォトストリーム上のRAWイメージを抽出したところ。検索キーワードには「raw」を使用した

検索フィールドを表示すると、さらに高度な検索が可能になる。たとえば、幅が2,000ピクセル以上の画像ファイルを抽出したい場合、Command-Fで検索フィールドを表示したあと、条件に「幅(ピクセル)」を選択、空欄に「2000」と入力したあと「より大きい」を条件にくわえればいい。撮影機器などメタデータの多くを条件にできるので、iPhoto/Apertureより高度な検索が可能になるはずだ。

検索属性を追加すれば、メタデータを参照した高度な検索が可能になる

フォトストリームからダウンロードされた画像ファイルは、「mdfind」コマンドを利用すれば、メタデータを条件に検索することもできる。たとえば、カレントディレクトリが「~ / Library / Application Support / iLifeAssetManagement / assets / sub」にあるとき、以下のコマンドラインを実行すれば、フォトストリーム上の幅が640ピクセルの画像ファイルを抽出できる。Automatorの「シェルスクリプトを実行」アクションを組み合わせるなどすれば、他のアプリケーションとの連携も容易になるはずだ。

$ mdfind -onlyin . "kMDItemPixelWidth == 640"