iPhoneで撮った写真を自動的にFlickrにバックアップするMac用ツール icloud-photo-backup-flickr

iPhone で撮った写真を、まったく手間を掛けずに Flickr にバックアップするためのツールを作ってみました。

https://github.com/jmblog/icloud-photo-backup-flickr

ポイントは「まったく手間を掛けずに」。何も操作せずとも勝手にバックアップが取られている、という状態を目指しました。

必要なもの

  • Mac OS X
  • Node.js
  • Flickr アカウント

Mac が前提となります。また、Node.js が必要なので、入っていない場合は公式サイトで配布されているインストーラーを使うか、Homebrew を使ってインストールして下さい。

# Homebrew のインストール
$ ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
$ brew install node

バックアップ先として Flickr を選んだのは、容量無制限の旧Proアカウントだからなのですが、先日のリニューアルで、無料アカウントでも1TBもらえるようになったので、そちらでも十分事足りるのではないかと思います。(バックアップ用に別アカウント取ってもいいかもしれないですね。)

仕組み

iPhone で撮った写真は、何もしなくても自動的に iCloud にアップロードされます。これがフォトストリームという機能です。

ただし iCloud には「30日間だけ」しか保存されず、30日を過ぎると古いものから削除されてしまいます。すべての写真を保存しておきたい場合は、削除される前に Mac や Windows にダウンロードして、ローカルに残しておく必要があります。Mac や Windows でフォトストリームの設定がされていれば、ダウンロードは自動的に行われます。(ただし完全に自動というわけではない。詳しくはのちほど。)

このフォトストリームの機能を利用して、Mac 上に新しい写真がダウンロードされるのを監視し、検知したら自動で Flickr にアップロードする、というのがこのツールの大まかな仕組みです。

S0400_iCloudPhotostream

使い方

すべてターミナル上での作業になります。

1. ソースをダウンロードしてローカルに展開する

下の例では展開先のディレクトリを ~/Library/iCloudPhotoBackupFlickr としていますがどこでも構いません。また、ダウンロードの代わりに git clone でももちろん大丈夫です。(そっちのほうが簡単ですね。)

$ cd ~/Library
$ curl -L -o master.zip https://github.com/jmblog/icloud-photo-backup-flickr/archive/master.zip
$ unzip master.zip && rm master.zip
$ mv icloud-photo-backup-flickr-master/ iCloudPhotoBackupFlickr/
$ cd iCloudPhotoBackupFlickr
$ npm install # 忘れずに

2. このツールから Flickr に写真をアップロードする許可を与える

$ node auth-flickr.js

このスクリプトを実行すると、ブラウザが起動し Flickr の画面が開きます。「OK, I’LL AUTHORIZE IT」ボタンをクリックして、許可を与えてください。成功すると「Success!」という画面になるので、ブラウザを閉じて、ターミナルに戻ります。

3. 手動でバックアップツールを動かしてみる

動作確認も兼ねて、試しに手動でツールを動かしてみましょう。

$ node backup-flickr.js

対象の画像ファイルがあれば、Flickr へのアップロード処理が始まります。初めて動かした場合は、大量にファイルがアップロードされるかもしれません。途中で止めたい場合は、Control+c を押して下さい。次回動かした時に、続きから始まるのでご安心を。もし、初めて動かしたにも関わらず何も処理されない場合は、フォトストリームがうまく設定できていない可能性があります。Apple のサポートページ「iCloud: フォトストリームを設定する」を参考に設定を見なおしてみて下さい。

4. iPhotoアプリなしで常にフォトストリームを動かす

先ほど「Mac や Windows でフォトストリームの設定がされていれば、ダウンロードは自動的に行われます。」と書きましたが、実際は iPhoto アプリまたは Aperture アプリを開いていないと、自動でダウンロードはされません。これは、iPhoto(あるいは Aperture)を開いているときのみ、フォトストリームが動くようになっているからです。

個人的にはどちらのアプリも日常的には利用していないので、バックアップをするためにわざわざ iPhoto を起動するのは「できるだけ手間を掛けずに」という方針に反します。

調べてみたところ、iPhoto(あるいは Aperture)を開かなくてもフォトストリームを動かす方法を見つけました。

$ open /Applications/iPhoto.app/Contents/Library/LoginItems/PhotoStreamAgent.app

これで、常にバックグラウンドでフォトストリームが動いている状態になります。正常に動いているかどうかは、アクティビティモニタで確認することができます。(右上の「フィルタ」に「フォトストリーム」と入力するとすぐ見つけられます。)

130625-0004

ただ、これだけだとログインしなおした時に元に戻ってしまいます。ログイン項目に「フォトストリーム」を追加して、ログイン時に必ず動くようにしておくとよいでしょう。

$ osascript -e 'tell application "System Events" to make login item at end with properties {path:"/Applications/iPhoto.app/Contents/Library/LoginItems/PhotoStreamAgent.app", hidden:false, name:"PhotoStreamAgent"}'

この AppleScript を実行すると、フォトストリームがログイン項目に追加されます。[システム環境設定]-[ユーザとグループ] の「ログイン項目」を確認してみて下さい。

130625-0002

5. 自動でバックアップ処理を動かす

いよいよ自動でバックアップを動かす設定です。さきほど手動で動かした処理がまだ続いているなら Control+c で止めるか、処理が終わるまで待ってから、次のコマンドを入力してみてください。

$ node create-plist.js
$ ln -s $(pwd)/com.github.jmblog.iCloudPhotoBackupFlickr.plist ~/Library/LaunchAgents/
$ launchctl load ~/Library/LaunchAgents/com.github.jmblog.iCloudPhotoBackupFlickr.plist

これで自動的にバックアップが動くように設定されました。バックアップが実行されたかどうかは、コンソールでログを確認できます。

130625-0006

試しに iPhone で写真を撮ってみましょう。Flickr に無事アップロードされましたか?

技術的な補足

  • Flickr の Access Token および Access Token Secret は、node-confy というモジュールを使って ~/.confy というファイルに格納されています。
  • フォトストリームで iCloud からダウンロードされた画像は、~/library/Application Support/iLifeAssetManagement/assets/sub というディレクトリに格納されます。ツールは launchd.plistWatchPaths キーを使ってこのフォルダを監視しています。
  • バックアップが成功すると、[tool dir]/history 配下に ~/library/Application Support/iLifeAssetManagement/assets/sub のハッシュキーらしきディレクトリ名と同名の空ディレクトリを作成します。これがバックアップの履歴となります。
  • フォトストリームは動画に対応していないため、残念ながらバックアップの対象とはなりません。

最後に

実際に運用してみると、思った以上に快適です。写真のバックアップというのは結構悩ましい問題で、つい後回しにしてしまいがちだったのですが、これでかなりすっきりしました。

将来的には Growl / Mountain Lion の通知機能に対応したいなぁ、とか、せっかくだから OS X アプリにしたいなぁ(設定が面倒くさすぎるので)などと考えてます。もし要望や不具合などあれば、ぜひコメントを残して下さい。Pull Request も歓迎!

google-code-prettify 用のテーマを公開しました

google-code-prettify といえば、Webサイト上のソースコードをシンタックスハイライト表示するためのライブラリとして、最も有名なものの一つだと思います。(Bootstrap でも使われてますし。)

そんな google-code-prettify 用のテーマをいくつか作ってみました。

続きを読む

続・Sass で 出力スタイルを compressed にするとカラーコードが3桁に短縮されて困った話

Sass で 出力スタイルを compressed にするとカラーコードが3桁に短縮されて困った話」で、IE の Filter で指定する色の形式が意図したものにならないということを書いたのですが、解決策が見つかりました。
続きを読む

続・YUI の CSS Fonts を使う場合は SCSS を利用すると管理しやすいよ

YUI の CSS Fonts を使う場合は SCSS を利用すると管理しやすいよ」というエントリーで、@mixin を使ったフォントサイズの指定方法を紹介したのですが、Sass 3.1.0 から追加された、@function ディレクティブを使ったほうが、管理しやすいんじゃないかと思い、関数を書いてみました。
続きを読む