最近、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との画像ファイルの送受信を担当しているのだ。
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フォルダ以下に保存されている |
フォトストリームを自己流検索
iPhoto/Apertureに頼らず検索するメリットは、「軽さ」にある。iPhoto/Apertureは起動に時間がかかるうえ、検索結果は他のアプリケーションから参照できない。FinderやTerminalで検索すればシステムリソースの消費は少なく、動作も軽いうえに検索結果を他に流用しやすい。
例として、Finderで検索する方法を紹介してみよう。操作はかんたん、「~ / Library / Application Support / iLifeAssetManagement / assets / sub」フォルダを開き、ウインドウ右上の検索バーに「png」や「jpg」といった検索条件を入力し、検索範囲に「sub」を指定すればOK。これだけの操作で、フォトストリームにある特定の画像フォーマットを抽出できるのだ。
検索フィールドを表示すると、さらに高度な検索が可能になる。たとえば、幅が2,000ピクセル以上の画像ファイルを抽出したい場合、Command-Fで検索フィールドを表示したあと、条件に「幅(ピクセル)」を選択、空欄に「2000」と入力したあと「より大きい」を条件にくわえればいい。撮影機器などメタデータの多くを条件にできるので、iPhoto/Apertureより高度な検索が可能になるはずだ。
フォトストリームからダウンロードされた画像ファイルは、「mdfind」コマンドを利用すれば、メタデータを条件に検索することもできる。たとえば、カレントディレクトリが「~ / Library / Application Support / iLifeAssetManagement / assets / sub」にあるとき、以下のコマンドラインを実行すれば、フォトストリーム上の幅が640ピクセルの画像ファイルを抽出できる。Automatorの「シェルスクリプトを実行」アクションを組み合わせるなどすれば、他のアプリケーションとの連携も容易になるはずだ。
$ mdfind -onlyin . "kMDItemPixelWidth == 640"