MagoPicまでの長い道のり その一

September 15th, 2011

MagoPic(マゴピク)というサービスを開始しました。

シンプルで規模の小さなシステムですが、プログラムはサーバークライアントともに一人でやりましたので、ここでは暇を見つけて技術的な裏話や開発中にハマった他の開発者の方にも役立つかもしれないTips的な事を無責任に書いていけたらとおもいます。

まずはじめに、MagoPicとは何なのか?

「Yet another 写真共有サービスです」と、いうとまずツッコミが入るでしょう。

  • Picasa使えよ!
  • Flickr使えよ!
  • Snapfish使えよ!
  • フォト蔵使えよ!

おっしゃるとおりです。世の中には星の数ほど写真共有サービスがあり、いずれも非常に洗練されています。みんなも使っているはずです。僕も使っています。たまーに一緒に遊んだ友達に写真を送ったりするときには。しかし、そもそも、作成の動機は完全に自分のためで、離れて住む両親が孫の写真を送れとうるさいので日常の写真を簡単に共有できるものが欲しかったんです。そんな私にとって上記のサービスは最適解ではありませんでした。

  • アップロードするのが面倒くさい
  • アップロードした事を伝えるのが面倒くさい
  • 容量制限がいや(うちは2年間で78GBたまりました)
  • 現像するために縮小版ではなく元のデータを要求される
  • 自分のためにもちゃんと整理したい。バックアップもしたい。
  • 親に使い方を教えるのが面倒くさい

要は面倒くさいんです。

ローカルでは、どうせディスクにちゃんと整理してたまっていっているんです(PCへの取り込みもPicasaのインポート機能はExifをちゃんと判別しないケースがあったりして嫌だったのでスクリプトで自動化していますが)。それ以上の手間なしに同じものを両親にも届けたい。ただそれだけのことがしたかったんです。

MagoPicが出来るまではいろいろな手段を試みました。

リモートでネットワークドライブを見えるようにした

  1. WiFiを使えるようにしてあげるよ、という触れ込みで実家にDD-WRTベースのルーターを仕込む
  2. リモートからSSHで常時アクセスできるようにする
  3. autosshなどを使ってこちらのNASが見えるようにcifsをリモートポートフォワードする

よい点

  • 親の側では一度設定をするだけでよいので超簡単(やってあげればよい)

悪い点

  • 遅い。遅すぎる。(回線が)
  • こちらのNASをずっと動かしておかないといけない → すぐディスクがクラッシュする

実家にもNASを置いて定期的に同期するようにした

回線の遅さの問題と、NASの常時稼働によるクラッシュの問題を解決するために、実家にもNASを置いてssh+rsyncで自動的に同期するようにしました。省エネ機能で自動的にsleepに入るNASのためにrsync前にMagickPacketを送って起こしてあげたりする必要がありましたが、それ以外は何ら問題なく快適な環境が出来ました。

いずれもRAID1のNASで、うちと両親と義理の両親の計三個所(バンクーバー、神戸、島根)に配置されているので冗長性もばっちり!まずデータを失うことはないぜ、これで安心、と思っていた矢先、ディスクがクラッシュしました。想定内なので換装してRAIDを再構築して問題なし、なのですが、この計6台のディスクたちが入れ替わり立ち替わり半年毎ぐらいにクラッシュして差し替えの手間とコストがバカにならなくなってきたのです。

そもそも、私はハードディスクとの相性がすこぶる悪く、職場でも家でも研究室でも個人で使っているマシンの中で必ず毎年1,2個はディスクがクラッシュしてしまうという状況が少なくとも10年以上続いています。使い方が悪いのか、ディスクが悪いのか、私の内面的な問題なのか分かりませんが、いくら冗長化でデータが守られているとはいえ、もうハードディスクを買うのが嫌になりました。

やっぱりCloudしかないべ、でもプライバシーが。。。

ローカルのハードディスクを卒業し、クラウドにデータを置くことにしました。色々調べた結果、HostMonsterが帯域容量無制限でキャンペーン中に登録すると月額わずか$3であることが分かりました。しかしよくよく調べると、ディスクスペースは無制限だが、ファイル数には制限があるとのこと。じゃあブロックデバイス化だ。あと、クラウドはサーバー管理者が内容を見ようと思えば技術的には見れてしまう。それはいやだ。暗号化するしかない。
  1. 容量帯域ともに無制限のホスティングサービスHostMonsterに契約
  2. SSHアクセスを有効にしてもらう
  3. ブロックディスクイメージを作る
  4. TrueCryptで暗号化する
  5. クライアントからはsshfs経由でサーバー上のTrueCryptディスクイメージをマウント

やりました。ついに月額わずか$3と言うハードディスクよりもはるかに安価に無制限で信頼性の高い&セキュアなストレージが手に入りました。

しかし、一ヶ月後、HostMonsterの担当者から連絡があり、規約に違反するので削除しないとアカウントを停止するとのこと。確かに、Webページのホスティング以外の用途に使うなとは書いてある。ごめんなさい。むむむ。確かにsshfsはまずかった。じゃあ公式に提供されているWebDav経由ならどうだ?HTTPだからいいだろう、と思ってしばらくやってみたがやはり同様の警告を受けてしまった。無制限ホスティングサービスといってもやりたい放題ではないのだということを学びました。

挫折、そしてWebサービスで妥協する

クラウド上で暗号化することはとりあえず断念。この頃には既に心も折れていたので、もうオープンソースのWebアルバムでもインストールして手っ取り早く片付けてしまおうと思いました。

HostMonsterのコントロールパネルにあるSimpleScriptという簡単にアプリをインストールできる仕組みがあって、そのリストの中で見つけたZenPhotoというアプリの名前に惹かれて導入しました。これは、ファイルシステム上の写真をそのままWebアルバム化してくれる機能があるので、アップロードもrsyncで一発でできます。そんなこんなで以下の形に落ち着きました。

自分(写真をアップロードする時)

  1. デジカメや携帯をPCにつなぐ
  2. カスタムの全自動スクリプトを実行する(下記はスクリプトの動作内容)
    1. 接続されたSDカードや外部記憶デバイスの中の写真や動画をサーチ
    2. 写真はEXIF情報に基づいて年月日で分類されたフォルダーに移動
    3. 動画はファイルのタイムスタンプに基づいて年月日に分類されたフォルダーに移動
    4. 動画をffmpegでflv形式にエンコードしなおすmakeファイルを実行
    5. エンコードが終わったらHostMonster上のZenPhotoのアルバムディレクトリにrsync
    6. rsyncが完了したら両親の携帯にrsyncのログをメールで送りつける(サーバー管理者バリ)

両親(写真を見る時)

  1. ZenPhotoのURLにアクセスする

写真をアップロードする方も見る方も基本的にはワンステップで。とりあえず面倒くさくなく。当初の目的は達成されました。しかし、後味が悪すぎます。そんなの嫌だ。何より格好良くない。そんなこんなでMagoPic構想が始まるのです。

それにしても、たかが孫の写真共有ごときにここまでするなんて、なんと親孝行な息子だろうと我ながら思う。

Leave a Reply

*